⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fish.java

📁 Java项目开发与毕业设计指导 朱福喜, 黄昊编著 清华大学出版社 项目1
💻 JAVA
字号:
package client;
class Fish extends Thread
 {
 	 int id;
     int x,		  //该鱼的x坐标
 	    y,		  //该鱼的y坐标
 	    width,	  //该鱼使用的图片的宽度
 	    height;	  //该鱼使用的图片的高度

	int space_mul  = 40,  //控制v值的一个乘数
	    space_plus = 10,  //控制v值的一个加数
	    lean_mul  = 10,  //控制l值的一个乘数
	    x1_mul = 1800,//控制x1值的一个乘数
	    y1_mul = 800; //控制y1值的一个乘数

 	//随机产生鱼初始游的方向
 	//int down = (int)(Math.random()*10)%2;	//down=1 : 向下游
 	//int right= (int)(Math.random()*10)%2;	//right=1: 向右游
 	int down,
 	    right;
 	int space = (int)(Math.random()*space_mul)+space_plus;//space用来控制刷新周期,space越小,两次刷新之间的时间间隔就越小,从而速度就越快
 	int lean_angle = (int)(Math.random()*lean_mul);	//随机产生斜游角度比x:y=lean_angle,即在x方向上游动l次之后才在y方向上移动一次

	//随机产生鱼上下左右游动的最大上限,即振幅
 	int x1 = (int)(Math.random()*x1_mul);   //值在0~1800之间
 	int y1 = (int)(Math.random()*y1_mul);    // 0~800

 	int i,	//鱼的标志:第i条鱼(本程序中共有8条鱼)
 	    count_x1 = 0,//x方向上振幅计数
 	    count_y1 = 0;//y方向上振幅计数


 	boolean running = true;
 	boolean end = false;
 	FishPanel fishpanel;

 	public Fish(FishPanel _fishpanel, int _x, int _y, int _width, int _height, int _i,int _down,int _right)
 	{
 		fishpanel = _fishpanel;
 		        x = _x;
 		        y = _y;
 		    width = _width;
 		   height = _height;
 		        i = _i;
                down = _down;
                right = _right;
 		start();
 	}

 	public void start()
 	{
 		running = true;
 		super.start();
 	}

 	public void run()
 	{
        while(running)
 		{
 			if(end)
 			    return;
            computeX();
 			computeY();
 			try
 			{
 				sleep(space);//v
 			}catch(Exception e){}
 			fishpanel.repaint();
 		}
 	}

 	public void halt()
 	{
 		running = false;
 	}

 	public void computeX()
 	{
         if(right == 1)
 		{
 			if(x >= fishpanel.getWidth()-width)
 			{//判断是否到右端边框或达到最大振幅
 				  //如果已连接到网络,则需将此鱼从面板上删除
                  if(NetState.b_connect)
 				 {
                    //从本机上删除此对象
                    fishpanel.delFish(this.id);
 				 }
                  else
 				 {
                     x = 0;
                     reset('x');
                 }
 			}
 			else if(count_x1 == x1)
 			    right = 0;
 			x++;
 		}
 		else
 		{
 			 if(x <= 0)
 			 {//判断是否到左端边框或达到最大振幅
 			 	//如果已连接到网络,则需将此鱼从面板上删除
                  if(NetState.b_connect)
 				 {
                    //从本机上删除此对象
                    fishpanel.delFish(this.id);
 				 }
 				 else
 				 {
                     x = fishpanel.getWidth()-width;
                     reset('x');
 			     }
              }
              else if(count_x1 == x1)
 			    right = 1;
 			 x--;
 		}
 		count_x1++;
 	}

 	public void computeY()
 	{//计算鱼的上下游动
 		if(lean_angle != 0)//判断随机数lean_angle是否为0,是则水平游动,否则计算角度
 		if(down == 1 && count_x1%lean_angle == 0)//x former
 		{//down=1表示向下游且当x++或x--了lean_angle次后,y++
 			if(y >= fishpanel.getHeight()-height || count_y1 == y1)
 			{//判断是否到底或上下振幅游满否
 				down=0; reset('y');
 			}
 			y++;
 		}
 		else if(count_x1%lean_angle == 0 || count_y1 == y1)//x former
 		{//当向上游且当x++或x--了l次之后,y--
 			if(y <= 0)
 			{
 				down=1; reset('y');
 			}
 			y--;
 		}
 		count_y1++;
 	}

 	public void reset(char xory)
 	{//鱼游动状态改变后重新生成各项数值
 		if(xory == 'x')
 		{
            x1 = (int)(Math.random()*x1_mul);//重新生成新的左右振幅(判断依据:x)
 			count_x1 = 0; //左右振幅计数清0
 		}
 		else
 		{
 			y1 = (int)(Math.random()*y1_mul);//重新生成新的上下振幅(判断依据:y)
 			count_y1 = 0;//上下振幅计数清0
 		}
 		space = (int)(Math.random()*space_mul)+space_plus;//重新生成新的速度
 		lean_angle = (int)(Math.random()*lean_mul);//重新生成新的角度比
 	}
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -