练****81无限星空本例知识点一句话讲解新学知识使用Graphics类画图像使用Math类产生随机数已学知识使用Thread类管理线程使用String类处理字符串一、练****具体要求本练****制作无限星空的实例。如图81-1所示,程序执行后,创建一个带有无限星空的面板,星星的位置是随机的。该面板可以响应用户操作,当在面板上按下鼠标并且左右旋转鼠标时,星空的轨迹将会跟随鼠标的旋转方向发生改变。二、程序及注释(1)编程思路:首先,本练****因为要制作无限星空的实例,所以首先要生成星星,这是通过自写的Star来实现的:在Star类里,通过函数publicvoidDraw(Graphicsg,doublerot)画出星星,通过函数publicvoidGrayMe(Graphicsg)为星星设置颜色,分别为灰色,浅灰色和白色。为实现星星的移动,所以要编写主类StarField,先通过语句Starpol[]生成一个数组,然后在StarField的构造函数里,通过pol[i]=newStar(Width,Height,100,type)语句的循环,生成了无限星空。为控制星星的运行,所以在publicvoidrun()函数中,通过坐标改变和线程睡眠的技术完成此项功能。(2)程序实现及注释://.*;//star类classStar{ int H,V; int x,y,z; int type;//构造函数 Star(intwidth,intheight,intdepth,inttype) { =type; H=width/2; V=height/2; x=(int)(()*width)-H; y=(int)(()*height)-V; if((x==0)&&(y==0))x=10; z=(int)(()*depth); }//画星星函数 publicvoidDraw(Graphicsg,doublerot) { double X,Y; int h,v,hh,vv; int d; z-=2; if(z<-63)z=100; hh=(x*64)/(64+z); vv=(y*64)/(64+z); X=(hh*(rot))-(vv*(rot)); Y=(hh*(rot))+(vv*(rot)); h=(int)X+H; v=(int)Y+V; if((h<0)||(h>(2*H)))z=100; if((v<0)||(v>(2*H)))z=100; GrayMe(g); if(type==0) { d=(100-z)/50; if(d==0)d=1; (h,v,d,d); } else { d=(100-z)/20; (h-d,v,h+d,v); (h,v-d,h,v+d); if(z<50){ d/=2; (h-d,v-d,h+d,v+d); (h+d,v-d,h-d,v+d); } } } //设置颜色函数 publicvoidGrayMe(Graphicsg) { if(z>50) {
练习81 限星空 来自淘豆网www.taodocs.com转载请标明出处.