?? fish.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 + -