java版坦克大战游戏源码.docx
《java版坦克大战游戏源码.docx》由会员分享,可在线阅读,更多相关《java版坦克大战游戏源码.docx(17页珍藏版)》请在冰点文库上搜索。
java版坦克大战游戏源码
java版坦克大战游戏源码
packagetankwar;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.event.KeyEvent;
importjava.awt.event.KeyListener;
importjava.io.File;
importjava.io.FileInputStream;
importjava.util.ArrayList;
importjava.util.Random;
importjavax.swing.BorderFactory;
importjavax.swing.ImageIcon;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importtankwar.Tank.Direction;
importbarrier.EnemyBorn;
importbarrier.Gold;
importbarrier.Home;
importbarrier.Iron;
importbarrier.SelfBorn;
importbarrier.Wall;
publicclassTankWarimplementsKeyListener{
staticbooleanTIMEOUT=false;
privateJFramef;
privateJPanelgamePanel;
privatePanelShowmessgePanel;
privatemyPanelp;
privateTankmyTank;
publicstaticfinalintAREA_WIDTH=830;
publicstaticfinalintAREA_HEIGHT=800;
privateArrayListmissles=newArrayList();
privateArrayListallTanks=newArrayList();
privateArrayListbooms=newArrayList();
privateArrayListwalls=newArrayList();
privateArrayListirons=newArrayList();
privateArrayListgolds=newArrayList();
privateArrayList- items=newArrayList
- ();
privateArrayListenemyBorns=newArrayList();
privateSelfBornselfBorn;
privateHomehome;
privateTankenemyTank;
privateRandomr;
privateImageIconbackGround;
privatefinalStringmap;
privateinttankMax;
privatebooleanover=false;
privatestaticintselfMax=3;
privatebooleanwin;
privatebooleanflash=false;
privateTankWartw=this;
staticintSCORE=0;
privatefinalJFramemainF;
privateintstyle;
publicTankWar(Stringmap,inttankMax,JFramemainF,intstyle)
throwsException{
this.map=map;
this.tankMax=tankMax;
this.mainF=mainF;
this.style=style;
init();
}
privatevoidinit(){
f=newJFrame("坦克大战V3.0");
gamePanel=newJPanel(null);
p=newmyPanel();
p.setBackground(Color.WHITE);
r=newRandom();
messgePanel=newPanelShow();
initMap(newFile("map/"+map));
try{
myTank=newTank(selfBorn.getX(),selfBorn.getY(),true,allTanks,
walls,irons,golds,missles,home,booms,style);
}catch(Exceptione1){
}
myTank.setDir(Direction.U);
allTanks.add(myTank);
addTank();
try{
backGround=newImageIcon(
TankWar.class.getResource("/pic/whiteback.jpg"));
}catch(Exceptione){
}
p.setBorder(BorderFactory.createEtchedBorder(Color.BLACK,Color.WHITE));
p.setSize(AREA_WIDTH,AREA_HEIGHT);
messgePanel.setBounds(AREA_WIDTH,0,200,AREA_HEIGHT);
gamePanel.add(messgePanel);
gamePanel.add(p);
f.add(gamePanel);
f.setBounds(0,0,AREA_WIDTH+200,AREA_HEIGHT);
f.setDefaultCloseOperation(3);
f.setResizable(true);
f.setFocusable(true);
f.addKeyListener(this);
f.setVisible(true);
newThread(newRunnable(){
publicvoidrun(){
while(!
over){
if(!
myTank.isLive()){
selfMax--;
if(selfMax<0){
f.removeKeyListener(tw);
over=true;
win=false;
break;
}else{
myTank.setLevel
(1);
myTank.setX(selfBorn.getX());
myTank.setY(selfBorn.getY());
myTank.setDir(Direction.U);
myTank.setHp(50);
myTank.setLive(true);
}
}
if(tankMax<=0&&allTanks.size()==1){
f.removeKeyListener(tw);
over=true;
win=true;
}
if(!
home.isLive()){
f.removeKeyListener(tw);
over=true;
win=false;
}
p.repaint();
myTank.move();
for(inti=1;iallTanks.get(i).move();
allTanks.get(i).setNoFire(myTank.getNoFire()+1);
//if(allTanks.get(i).getX()%5==0&&allTanks.get(i).getY()%5==0)
aI(allTanks.get(i));
}
if(allTanks.size()<=enemyBorns.size()+1)
addTank();
myTank.setNoFire(myTank.getNoFire()+1);
messgePanel.setEnemyCount(tankMax);
messgePanel.setSelfCount(selfMax);
messgePanel.setScore(SCORE);
if(SCORE%500==0){
SCORE+=100;
Itemitem=newItem(allTanks,booms,irons,home);
items.add(item);
item.start();
}
try{
Thread.sleep(30);
}catch(InterruptedExceptione){
}
}
over();
}
}).start();
}
privateclassmyPanelextendsJPanel{
/**
*
*/
privatestaticfinallongserialVersionUID=4408440723797225328L;
@Override
publicvoidpaintComponent(Graphicsg){
super.paintComponent(g);
g.drawImage(backGround.getImage(),0,0,null);
for(intj=0;jwalls.get(j).draw(g);
}
for(intj=0;jirons.get(j).draw(g);
}
for(intj=0;jgolds.get(j).draw(g);
}
for(intj=0;jenemyBorns.get(j).draw(g);
}
home.draw(g);
selfBorn.draw(g);
for(intj=0;jallTanks.get(j).drawTank(g);
}
for(intj=0;jirons.get(j).draw(g);
}
for(inti=0;imissles.get(i).drawMissle(g);
if(!
missles.get(i).isLive())
missles.remove(i);
}
for(inti=0;iif(booms.get(i).isLive())
booms.get(i).drawBoom(g);
else
booms.remove(i);
}
for(intj=0;jif(!
items.get(j).isLive()){
items.remove(j);
continue;
}
items.get(j).draw(g);
}
if(over)
drawOver(g);
messgePanel.repaint();
}
}
@Override
publicvoidkeyTyped(KeyEvente){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidkeyPressed(KeyEvente){
if(over){
if(e.getKeyCode()==KeyEvent.VK_F1){
over=false;
missles.clear();
allTanks.clear();
booms.clear();
walls.clear();
irons.clear();
golds.clear();
enemyBorns.clear();
try{
init();
}catch(Exceptione1){
}
}else{
f.setVisible(false);
mainF.setSize(800,800);
mainF.setVisible(true);
}
}elseif(e.getKeyCode()==KeyEvent.VK_SPACE){
myTank.fire();
}else{
myTank.keyPress(e);
}
}
@Override
publicvoidkeyReleased(KeyEvente){
myTank.keyReleased(e);
}
publicvoidaI(Tanktank){
if(TIMEOUT){
tank.setUp(false);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(false);
return;
}
if(r.nextInt(40)==0)
tank.fire();
if(r.nextInt(10)==0){
if(tank.getX()>=myTank.getX()
&&tank.getX()<=myTank.getX()+Tank.SIZE
&&tank.getY()>myTank.getY()){
tank.setUp(true);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(false);
tank.setDir(Direction.U);
return;
}elseif(tank.getX()>=myTank.getX()
&&tank.getX()<=myTank.getX()+Tank.SIZE
&&tank.getY()tank.setUp(false);
tank.setLeft(false);
tank.setDown(true);
tank.setRight(false);
tank.setDir(Direction.D);
return;
}
elseif(tank.getX()>myTank.getX()
&&tank.getY()>=myTank.getY()
&&tank.getY()<=myTank.getY()+Tank.SIZE){
tank.setUp(false);
tank.setLeft(true);
tank.setDown(false);
tank.setRight(false);
tank.setDir(Direction.L);
return;
}elseif(tank.getX()&&tank.getY()>=myTank.getY()
&&tank.getY()<=myTank.getY()+Tank.SIZE){
tank.setUp(false);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(true);
tank.setDir(Direction.R);
return;
}
}
if(tank.getX()<=0){
tank.setUp(false);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(true);
tank.setDir(Direction.R);
}
if(tank.getY()<=0){
tank.setUp(false);
tank.setLeft(false);
tank.setDown(true);
tank.setRight(false);
tank.setDir(Direction.D);
}
if(tank.getX()>=AREA_WIDTH-Tank.SIZE){
tank.setUp(false);
tank.setLeft(true);
tank.setDown(false);
tank.setRight(false);
tank.setDir(Direction.L);
}
if(tank.getY()>=AREA_HEIGHT-Tank.SIZE){
tank.setUp(true);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(false);
tank.setDir(Direction.U);
}elseif(r.nextInt(300)==1){
tank.setUp(true);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(false);
tank.setDir(Direction.U);
}
elseif(r.nextInt(300)==2){
tank.setUp(false);
tank.setLeft(true);
tank.setDown(false);
tank.setRight(false);
tank.setDir(Direction.L);
}elseif(r.nextInt(300)==3){
tank.setUp(false);
tank.setLeft(false);
tank.setDown(true);
tank.setRight(false);
tank.setDir(Direction.D);
}elseif(r.nextInt(300)==4){
tank.setUp(false);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(true);
tank.setDir(Direction.R);
}
}
publicvoidinitMap(Filefile){
try{
FileInputStreamread=newFileInputStream(file);
for(inti=0;ifor(intj=0;jswitch(read.read()){
case1:
walls.add(newWall(j*50,i*50));
break;
case2:
irons.add(newIron(j*50,i*50));
break;
case3:
golds.add(newGold(j*50,i*50));
break;
case4:
selfBorn=newSelfBorn(j*50,i*50);
break;
case5:
enemyBorns.add(newEnemyBorn(j*50,i*50));
break;
case6:
home=newHome(j*50,i*50);
break;
}
}
}
read.close();
}catch(Exceptione){
}
;
}
publicvoidaddTank(){
if(tankMax<=0)
return;
for(inti=allTanks.size();itry{
inttemp=r.nextInt(enemyBorns.size());
enemyTank=newTank(enemyBorns.get(temp).getX(),enemyBorns
.get(temp).getY(),false,allTanks,walls,irons,
golds,missles,home,booms,r.nextInt(3)+1);
}catch(Exceptione){
e.printStackTrace();
}
enemyTank.setDir(Direction.D);
enemyTank.setDown(true);
allTanks.add(enemyTank);
tankMax--;
if(tankMax<=0)
return;
}
}
publicstaticvoidaddMyTankLives(){
selfMax++;
}
privatevoidover(){
for(inti=0;ifor(intj=0;jirons.add(newIron(j*50,i*50));
p.repaint();
try{
Thread.sleep(5);
}cat