java坦克_JAVA课程设计(坦克大战)

public GamePanel(MainFrame frame,intlevel,GameType gameType)

{this.frame =frame ;this.level=level;this.gameType=gameType;

setBackground(Color.GRAY);

init();

Thread t=newFreshThead();

t.start();

addListener();

}private voidinit()

{

bullets=new ArrayList();

allTanks=new ArrayList<>();

walls=new ArrayList<>();

boomImage=new ArrayList<>();

image=new BufferedImage(794,572,BufferedImage.TYPE_INT_BGR);

g2=image.createGraphics();

playerTanks=new ArrayList<>();

play1=new Tank(278,537,ImageUtil.PLAYER1_UP_IMAGE_URL,this,TankType.player1);if(gameType==GameType.TWO_PLAYER)

{

play2=new Tank(500,537,ImageUtil.PLAYER2_UP_IMAGE_URL,this,TankType.player2);

playerTanks.add(play2);

}

playerTanks.add(play1);

botTanks=new Vector<>();

botTanks.add(new Bot(botX[0],1,this,TankType.bot));

botTanks.add(new Bot(botX[1],1,this,TankType.bot));

botTanks.add(new Bot(botX[2],1,this,TankType.bot));

botReadyCount-=3;

allTanks.addAll(playerTanks);

allTanks.addAll(botTanks);

base=new Base(367,532);

initWalls();

}private voidaddListener()

{

frame.addKeyListener(this);

}private voidinitWalls()

{

Map map=Map.getMap(level);

walls.addAll(map.getWalls());

walls.add(base);

}public voidpaint(Graphics g)

{

paintTankActoin();

CreateBot();

paintImage();

g.drawImage(image,0, 0, this);

}private voidpaintImage()

{

g2.setColor(Color.BLACK);

g2.fillRect(0, 0, image.getWidth(),image.getHeight() );

panitBoom();

paintBotTanks();

paintBotCount();

panitPlayerTanks();

allTanks.addAll(playerTanks);

allTanks.addAll(botTanks);

paintWalls();

paintBullets();if(botSurplusCount==0)

{

stopThread();

paintBotCount();

g2.setFont(new Font("楷体",Font.BOLD,50));

g2.setColor(Color.GREEN);

g2.drawString("胜利", 250, 400);

gotoNextLevel();

}if(gameType ==GameType.ONE_PLAYER)

{if(!play1.isAlive()) {

stopThread();

boomImage.add(newBoom(play1.x,play1.y));

panitBoom();

paintGameOver();

gotoPrevisousLevel();

}

}else {//双人模式

if(play1.isAlive()&&!play2.isAlive())

{

survivor=play1;

}else if(!play1.isAlive()&&play2.isAlive())

{

survivor=play2;

}else if(!(play1.isAlive()||play2.isAlive())) {

stopThread();

boomImage.add(newBoom(survivor.x,survivor.y));

panitBoom();

paintGameOver();

gotoPrevisousLevel();//重新进入本关

}

}if(!base.isAlive())

{

stopThread();

paintGameOver();

base.setImage(ImageUtil.BREAK_BASE_IMAGE_URL);

gotoPrevisousLevel();

}

g2.drawImage(base.getImage(),base.x,base.y,this);

}private voidpaintBotCount() {

g2.setFont(new Font("楷体",Font.BOLD,25));

g2.setColor(Color.BLUE);

g2.drawString("敌方坦克剩余:"+ botSurplusCount, 10,30);

}private voidpaintGameOver()

{

g2.setFont(new Font("楷体",Font.BOLD,50));

g2.setColor(Color.RED);

g2.drawString("Game Over !",250,400);

}private voidpanitBoom()

{for(int i=0;i

Boom boom=boomImage.get(i);if(boom.isAlive())

{

boom.show(g2);

}else{

boomImage.remove(i);

i--;

}

}

}private voidpaintWalls()

{for(int i=0;i

{

Wall w=walls.get(i);if(w.isAlive())

{

g2.drawImage(w.getImage(),w.x,w.y,this);

}else{

walls.remove(i);

i--;

}

}

}private voidpaintBullets()

{for(int i=0;i

{

Bullet b=bullets.get(i);if(b.isAlive()) {

b.move();

b.hitBase();

b.hitWall();

b.hitTank();

g2.drawImage(b.getImage(), b.x,b.y,this);

}else{

bullets.remove(i);

i--;

}

}

}private voidpaintBotTanks()

{for(int i=0;i

{

Bot t=(Bot)botTanks.get(i);if(t.isAlive()) {

t.go();

g2.drawImage(t.getImage(), t.x,t.y,this);

}else{

botTanks.remove(i);

i--;

boomImage.add(newBoom(t.x,t.y));

decreaseBot();

}

}

}private voidpanitPlayerTanks()

{for(int i=0;i

{

Tank t=playerTanks.get(i);if(t.isAlive()) {

g2.drawImage(t.getImage(), t.x,t.y,this);

}else{

playerTanks.remove(i);

i--;

boomImage.add(newBoom(t.x,t.y));

}

}

}private synchronized voidstopThread()

{

frame.removeKeyListener(this);

finish=true;

}private class FreshThead extendsThread

{public voidrun()

{while(!finish)

{

repaint();try{

Thread.sleep(FRESH);

}catch(InterruptedException e)

{

e.printStackTrace();

}

}

}

}private voidCreateBot()

{

createBotTimer+=FRESH;if(botTanks.size()0&&createBotTimer>=4000)

{int index=r.nextInt(3);

Rectangle bornRect=new Rectangle(botX[index],1,35,35);for(int i=0,lengh=allTanks.size();i

{

Tank t=allTanks.get(i);if(t.isAlive()&&t.hit(bornRect))

{return;

}

}

botTanks.add(new Bot(botX[index],1,GamePanel.this,TankType.bot));

botReadyCount--;

createBotTimer=0;

}

}private voidgotoNextLevel() {

Thread jump=newJumpPageThead(Level.nextLevel());

jump.start();

}private voidgotoPrevisousLevel() {

Thread jump=newJumpPageThead(Level.previsousLevel());

jump.start();

}public voiddecreaseBot()

{

botSurplusCount--;

}

@Overridepublic voidkeyPressed(KeyEvent e) {//TODO 自动生成的方法存根

switch(e.getKeyCode())

{caseKeyEvent.VK_Y:

y_key=true;break;caseKeyEvent.VK_W:

w_key=true;

a_key=false;

s_key=false;

d_key=false;break;caseKeyEvent.VK_A:

w_key=false;

a_key=true;

s_key=false;

d_key=false;break;caseKeyEvent.VK_S:

w_key=false;

a_key=false;

s_key=true;

d_key=false;break;caseKeyEvent.VK_D:

w_key=false;

a_key=false;

s_key=false;

d_key=true;break;caseKeyEvent.VK_HOME:caseKeyEvent.VK_NUMPAD1:

num1_key=true;break;caseKeyEvent.VK_UP:

up_key=true;

down_key=false;

right_key=false;

left_key=false;break;caseKeyEvent.VK_DOWN:

up_key=false;

down_key=true;

right_key=false;

left_key=false;break;caseKeyEvent.VK_LEFT:

up_key=false;

down_key=false;

right_key=false;

left_key=true;break;caseKeyEvent.VK_RIGHT:

up_key=false;

down_key=false;

right_key=true;

left_key=false;break;

}

}private voidpaintTankActoin()

{if(y_key)

{

play1.attack();

}if(w_key)

{

play1.upward();

}if(d_key)

{

play1.rightward();

}if(a_key)

{

play1.leftward();

}if(s_key)

{

play1.downward();

}if(gameType==GameType.TWO_PLAYER)

{if(num1_key)

{

play2.attack();

}if(up_key)

{

play2.upward();

}if(right_key)

{

play2.rightward();

}if(left_key)

{

play2.leftward();

}if(down_key)

{

play2.downward();

}

}

}

@Overridepublic voidkeyReleased(KeyEvent e) {//TODO 自动生成的方法存根

switch(e.getKeyCode())

{caseKeyEvent.VK_Y:

y_key=false;break;caseKeyEvent.VK_W:

w_key=false;break;caseKeyEvent.VK_A:

a_key=false;break;caseKeyEvent.VK_S:

s_key=false;break;caseKeyEvent.VK_D:

d_key=false;break;caseKeyEvent.VK_HOME:caseKeyEvent.VK_NUMPAD1:

num1_key=false;break;caseKeyEvent.VK_UP:

up_key=false;break;caseKeyEvent.VK_DOWN:

down_key=false;break;caseKeyEvent.VK_LEFT:

left_key=false;break;caseKeyEvent.VK_RIGHT:

right_key=false;break;

}

}public voidaddBullet(Bullet b)

{

bullets.add(b);

}public ListgetWalls(){returnwalls;

}publicBase getBase()

{returnbase;

}public ListgetTanks()

{returnallTanks;

}private class JumpPageThead extendsThread{intlevel;public JumpPageThead (intlevel)

{this.level=level;

}public voidrun()

{try{

Thread.sleep(1000);

frame.setPanel(newLevelPanel(level,frame,gameType));

}catch(InterruptedException e)

{

e.printStackTrace();

}

}

}

@Overridepublic voidkeyTyped(KeyEvent e) {//TODO 自动生成的方法存根

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值