📄 gameplayer.java~69~
字号:
}
//该线程监听从验证机来的消息
class MsgReceiver extends Thread
{
ObjectInputStream ois;
public MsgReceiver(ObjectInputStream ois)
{
this.ois = ois;
}
public void run()
{
while(!gameOver)
{
try
{
Message tu = (Message)ois.readObject();
messageFromServer = tu.m1;
}
catch(Exception e) {}
}
}
}
//该线程序随机改变敌人坦克的位置和行进方向,并移动敌人和我方已经打出的炮弹
class RandomTank extends Thread
{
Random rm = new Random();
public void run()
{
int i;
while(!gameOver)
{
for (i=0; i<tankGroup.size(); i++) //随机移动敌人的坦克
{
TankInfor ti = (TankInfor)tankGroup.elementAt(i);
ti.dir = rm.nextInt(4)+1;
/* try{
sleep(100);}
catch(Exception e){};*/
switch(ti.dir)
{
case DIRUP: //向上
ti.y -= rm.nextInt(10)+10;
if (ti.y < GAMEY)
{
ti.y = GAMEY;
}
break;
case DIRDOWN: //向下
ti.y += rm.nextInt(10)+10;
if (ti.y > GAMEY+GAMEHEIGHT-TANKHEIGHT)
{
ti.y = GAMEY+GAMEHEIGHT-TANKHEIGHT;
}
break;
case DIRLEFT: //向左
ti.x -= rm.nextInt(10)+10;
if (ti.x < GAMEX)
{
ti.x = GAMEX;
}
break;
case DIRRIGHT: //向右
ti.x += rm.nextInt(10)+10;
if (ti.x > GAMEX+GAMEWIDTH-TANKWIDTH)
{
ti.x = GAMEX+GAMEWIDTH-TANKWIDTH;
}
break;
default:
System.out.println("错误的方向");
}
//判断敌人的坦克是否与我方坦克碰撞,若碰撞,游戏结束
gameOver = judgeCollision(ti, me);
if (gameOver) return;
ti.bomb = rm.nextInt(10); //在随机移动敌人坦克的过程中随机打炮
if (ti.bomb == 1)
{
bombGroup.addElement(new BombInfor(ti.x, ti.y, ti.dir));
acGun.play();
}
}
//朝特定的方向移动敌人打出的每个炮弹,
for(i=0; i<bombGroup.size(); i++)
{
BombInfor bi = (BombInfor)bombGroup.elementAt(i);
switch(bi.dir)
{
case DIRUP: //向上
bi.y -= rm.nextInt(10)+20;
if (bi.y < GAMEY)
{
bombGroup.removeElement(bi);
i--;
}
break;
case DIRDOWN: //向下
bi.y += rm.nextInt(10)+20;
if (bi.y > GAMEY+GAMEHEIGHT)
{
bombGroup.removeElement(bi);
i--;
}
break;
case DIRLEFT: //向左
bi.x -= rm.nextInt(10)+20;
if (bi.x < GAMEX)
{
bombGroup.removeElement(bi);
i--;
}
break;
case DIRRIGHT: //向右
bi.x += rm.nextInt(10)+20;
if (bi.x > GAMEX+GAMEWIDTH)
{
bombGroup.removeElement(bi);
i--;
}
break;
}
//判断敌人的炮弹是否打中我方坦克,若打中,游戏结束
gameOver = judgeShootMe(bi, me);
if (gameOver) return;
}
//朝特定的方向移动自己打出的每个炮弹,
for(i=0; i<myBomb.size(); i++)
{
BombInfor bi = (BombInfor)myBomb.elementAt(i);
switch(bi.dir)
{
case DIRUP: //向上
bi.y -= rm.nextInt(10)+20;
if (bi.y < GAMEY)
{
myBomb.removeElement(bi);
i--;
}
break;
case DIRDOWN: //向下
bi.y += rm.nextInt(10)+20;
if (bi.y > GAMEY+GAMEHEIGHT)
{
myBomb.removeElement(bi);
i--;
}
break;
case DIRLEFT: //向左
bi.x -= rm.nextInt(10)+20;
if (bi.x < GAMEX)
{
myBomb.removeElement(bi);
i--;
}
break;
case DIRRIGHT: //向右
bi.x += rm.nextInt(10)+20;
if (bi.x > GAMEX+GAMEWIDTH)
{
myBomb.removeElement(bi);
i--;
}
break;
}
//判断我方炮弹是否打中敌人坦克, true--胜利了, false--还没有胜利
victory = judgeShootEnemy(bi, tankGroup);
if (victory)
{
//通知服务器胜利的消息
Message m = new Message();
m.m1 = "Level";
m.m2 = "";
m.m3 = level;
try
{
oos.writeObject(m);
}
catch(Exception e){};
level++;
tankGroup.removeAllElements();
bombGroup.removeAllElements();
myBomb.removeAllElements();
me.bombRemainder += MYBOMBTOTAL; //每过一级,加20发炮弹;
for (i=0; i<level+2; i++)
{
if (i%3==2){
tankGroup.addElement(new TankInfor(30, 15, 4, 0));
}
if (i%3==0){
tankGroup.addElement(new TankInfor(250, 15, 4, 0));
}
if (i%3==1){
tankGroup.addElement(new TankInfor(470, 15, 4, 0));
}
}
}
}
try{
sleep(100);
}
catch(Exception e){};
repaint();
}
}
}
//判断敌人的坦克是否与我方坦克碰撞,若碰撞,游戏结束. true--collide, false--No
public boolean judgeCollision(TankInfor ti, MyTank me1)
{
boolean b1=false, b2=false, b3=false;
switch(ti.dir)
{
case DIRUP:
b1 = (ti.y >= me1.y) && (ti.y <= me1.y + MYTANKHEIGHT);
b2 = (ti.x >= me1.x) && (ti.x <= me1.x + MYTANKWIDTH);
b3 = (me1.x >= ti.x) && (me1.x <= ti.x + TANKWIDTH);
break;
case DIRDOWN:
b1 = (me1.y >= ti.y) && (me1.y <= ti.y + TANKHEIGHT);
b2 = (ti.x >= me1.x) && (ti.x <= me1.x + MYTANKWIDTH);
b3 = (me1.x >= ti.x) && (me1.x <= ti.x + TANKWIDTH);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -