微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题自制Windows的变幻线
栏目软件世界
作者蓝孩子
发布2001年27期
  Windows下的经典荧屏保护程序——变幻线,我想大家必定都不陌生吧。它不仅起到保护爱机屏幕的作用,还给人以美感。这里将它的算法简单地向大家剖析一下,让大家对它的底细有个了解。
   算法原理:
  中学物理课光学部分的镜面反射大家应该还有印象吧(如图)?(

)变幻线的最基本的算法正是光学反射定律。不过它不是用光线反射,而是用光球(更确切说是光点)。打开变幻线屏保预览,仔细观察它的多边形的每一个顶点(盯着一个顶点看),这样会很容易发现它的运动规律就是反射定律。
  算法有了,我们开始编写程序,为了让大家更容易理解一些和表达的方便,本文采用QuiCk BASIC 45编写。
   源程序:
  DECLARE SUB poly(n!, C!)
  CONST num= 40,numofcornet=4,co=12,delay=500
  'num为屏幕上同时存在的Polygon数
  'numofcorner为多边形顶点数
  ’co为所绘多边形的颜色
  'delay为延迟交量,根据机器配置不同可以适当改变
  DIM SHARED corner(1 TO num,1 TO numofcorner, 1 TO 2)
  '存储多边形顶点表
  DIM speed(1 TO numoforner,1 TO 2)
  '存储各个顶点运动速度表
  RANDOMIZE TIMER
  '初始化随机变量
  FOR i=1 TO numofcorner
  '初始化多边形顶点表
  corner(l,i,1)=INT(RND*640)
  cornerf(l,i,2)=INT(RND* 480)
  NEXT i
  FOR i= 1 TO numofcorner
  '初始化各个顶点运动速度表
  speed(i,l)=INT(RND*5)+3
  speed(i,2)=INT(RND*5)+3
  NEXT i
  CLS:SCREEN 12'640*480*16色图形模式
  FOR i= 2 TO num
  FOR j=1 TO numofcorner
  IF corner(i -1,j,l)+speed(j,l)< 0 OR corner(i -l,j,1)+ speed(j,l)> 639 THEN speed(j,l)=-speed(j,1)
  corner(i,j,1)=corner(i -1,j,1)+ speed(j,l)
  IF corner(i -1,j,2)+speed(j,2)< 0 OR corner(i -l,j,2)-speed(j.2)> 479 THEN speed(j,2)=-speed(j,2)
  corner(i,j,2)= corner(i -l,j,2)+ speed(j,2)
  NEXT j
  Poly i,CO
  NEXT i
  p=numofcorner
  DO WHILE INKEY$=””
  lastp = p
  p=p十1
  IF P>num THEN p=1
  poly p,0 '擦掉最先一个多边形
  FOR i=1 TO numofcorner
  IF corner(lastp,i,l)+ speed(i,1)<0 OR corner(lastp,i,l)+speed(i,l)>639 THEN speed(i,l)=-speed(i,l)
  corner(p,i,1)=corner(lastp,i,1)+speed(i,l)
  IF corner(lastp,i,2)+speed(i,2<0 OR corner(lastp,i,2)+ speed(i,2)>479 THEN speed(i,2)=-speed(i,2)
  corner(p,i, 2)=corner(lastp,i,2)+speed(i,2)
  NEXT i
  Poly P,co'画上最后一个多边形
  FOR i=1 TO delay:NEXT i '延迟语句
  LOOP
  SUB Poly(n,c)
  PSET(corner(n,numofcorner,l),corner(n,numofcorner,2))
  FOR i=1 TO numofcorner
  LINE -(corner(n,i,1),corner(n,i,2)),c
  NEXT i
  END SUB
  这样,一个简单的变幻线程序就完成了。兴趣的朋友还可以自己加入控制随时间变化颜色或者多个变幻线同时运作的机制。呵呵,侃侃自己做的屏幕保护程序是不是很酷,很有成感啊?!