自制Windows的变幻线
#1?牐犓惴ㄔ恚?
?牐犞醒?物理课光学部分的镜面反射大家应该还有印象吧(如图)?(^27020501a^)变幻线的最基本的算法正是光学反射定律。不过它不是用光线反射,而是用光球(更确切说是光点)。打开变幻线屏保预览,仔细观察它的多边形的每一个顶点(盯着一个顶点看),这样会很容易发现它的运动规律就是反射定律。
?牐犓惴ㄓ辛耍颐强急嘈闯绦颍巳么蠹腋菀桌斫庖恍┖捅泶锏姆奖悖疚牟捎肣uiCk BASIC 45编写。
#1?牐犜闯绦颍?
?牐燚ECLARE SUB poly(n!, C!)
?牐燙ONST num= 40,numofcornet=4,co=12,delay=500
?牐牐?num为屏幕上同时存在的Polygon数
?牐牐?numofcorner为多边形顶点数
?牐牎痗o为所绘多边形的颜色
?牐牐?delay为延迟交量,根据机器配置不同可以适当改变
?牐燚IM SHARED corner(1 TO num,1 TO numofcorner, 1 TO 2)
?牐牐Т娲⒍啾咝味サ惚?
?牐燚IM speed(1 TO numoforner,1 TO 2)
?牐牐Т娲⒏鞲龆サ阍硕俣缺?
?牐燫ANDOMIZE TIMER
?牐牐С跏蓟婊淞?
?牐燜OR i=1 TO numofcorner
?牐牐С跏蓟啾咝味サ惚?
?牐燾orner(l,i,1)=INT(RND*640)
?牐燾ornerf(l,i,2)=INT(RND* 480)
?牐燦EXT i
?牐燜OR i= 1 TO numofcorner
?牐牐С跏蓟鞲龆サ阍硕俣缺?
?牐爏peed(i,l)=INT(RND*5)+3
?牐爏peed(i,2)=INT(RND*5)+3
?牐燦EXT i
?牐燙LS:SCREEN 12'640*480*16色图形模式
?牐燜OR i= 2 TO num
?牐燜OR j=1 TO numofcorner
?牐營F 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)
?牐燾orner(i,j,1)=corner(i -1,j,1)+ speed(j,l)
?牐營F 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)
?牐燾orner(i,j,2)= corner(i -l,j,2)+ speed(j,2)
?牐燦EXT j
?牐燩oly i,CO
?牐燦EXT i
?牐爌=numofcorner
?牐燚O WHILE INKEY$=””
?牐爈astp = p
?牐爌=p十1
?牐營F P>num THEN p=1
?牐爌oly p,0 '擦掉最先一个多边形
?牐燜OR i=1 TO numofcorner
?牐營F corner(lastp,i,l)+ speed(i,1)<0 OR corner(lastp,i,l)+speed(i,l)>639 THEN speed(i,l)=-speed(i,l)
?牐燾orner(p,i,1)=corner(lastp,i,1)+speed(i,l)
?牐營F corner(lastp,i,2)+speed(i,2<0 OR corner(lastp,i,2)+ speed(i,2)>479 THEN speed(i,2)=-speed(i,2)
?牐燾orner(p,i, 2)=corner(lastp,i,2)+speed(i,2)
?牐燦EXT i
?牐燩oly P,co'画上最后一个多边形
?牐燜OR i=1 TO delay:NEXT i '延迟语句
?牐燣OOP
?牐燬UB Poly(n,c)
?牐燩SET(corner(n,numofcorner,l),corner(n,numofcorner,2))
?牐燜OR i=1 TO numofcorner
?牐燣INE -(corner(n,i,1),corner(n,i,2)),c
?牐燦EXT i
?牐燛ND SUB
?牐犝庋桓黾虻サ谋浠孟叱绦蚓屯瓿闪恕P巳さ呐笥鸦箍梢宰约杭尤肟刂扑媸奔浔浠丈蛘叨喔霰浠孟咄痹俗鞯幕啤:呛牵┵┳约鹤龅钠聊槐;こ绦蚴遣皇呛芸幔苡谐筛邪。浚?