} public TankGame(){ jmb = new JMenuBar(); jm = new JMenu("游戏(G)"); jm.setMnemonic("G"); jmi1 = new JMenuItem("开始游戏(S)"); jmi1.setMnemonic("S"); jmi1.addActionListener(this); jmi1.setActionCommand("newGame"); jmi2 = new JMenuItem("继续游戏(O)"); jmi2.setMnemonic("O");
jmi3 = new JMenuItem("退出游戏(X)"); jmi3.setMnemonic("X"); jmi3.addActionListener(this); jmi3.setActionCommand("exit");
//启动mp线程 //em = new EnemyTask(); //mp = new MyPanel(); msp = new myStartPanel();
this.setJMenuBar(jmb); this.add(msp); //this.add(mp); jmb.add(jm); jm.add(jmi1); jm.add(jmi2); jm.add(jmi3); this.setSize(600,500); //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); //this.addKeyListener(mp); Thread t1 = new Thread(msp); t1.start(); // Thread t = new Thread(mp); // t.start(); } @Override public void actionPerformed(ActionEvent arg0) { if(arg0.getActionCommand().equals("newGame")){ mp = new MyPanel(); Thread t = new Thread(mp); t.start(); this.remove(msp); this.remove(mp); this.add(mp); this.setVisible(true); this.addKeyListener(mp); //Recoder.getRecording();
} } class myStartPanel extends JPanel implements Runnable{ int times = 0; public void paint(Graphics g ){ super.paint(g); g.fillRect(0, 0, 400, 300); if(times%2 ==0){
g.setColor(Color.BLUE); Font f = new Font("华文新魏", Font.BOLD, 30); g.setFont(f); g.drawString("stage:1", 150, 150); } }
@Override public void run() { while(true){ try { Thread.sleep(300);
} catch (InterruptedException e) { e.printStackTrace(); } this.repaint(); times ++; } } } class MyPanel extends JPanel implements KeyListener,Runnable{ int [] TanksX = new int[20]; int [] TanksY = new int[20]; int [] ShotsX = new int[100]; int [] ShotsY = new int[100]; // int [][]Tanks = new int[20][2]; // int [][]Shots = new int[20][2]; int [] ETdirects = new int[20]; int [] HeroShotsX = new int[10]; int [] HeroShotsY = new int[10];
static Hero hero = null; EnemyTask et = null; shot s = null; boolean isPaintShot = true;
int a = 0, b = 0 , c = 0; int [] directs = new int [10];
static //敌人坦克集合 Vector<EnemyTask> ets = new Vector<EnemyTask>();
int enSize = 3; //敌人坦克初始数量 int enSizes = 5; //敌人坦克画面总数量
} }//class tank extends Tank{ // // public tank(int x, int y, int direct,int type) { // super(x, y, direct,type); // // TODO Auto-generated constructor stub // } // //}下面是工具类:package com.qq.TankGame;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Vector; class Recoder{ /** * */ private static Vector<EnemyTask> ets = new Vector<EnemyTask>(); public static Vector<EnemyTask> getEts() { return ets; } public static void setEtss(Vector<EnemyTask> ets) { Recoder.ets = ets; } private static int enSize ; public static int getEnSize() { return enSize; } public static void setEnSize(int enSize) { Recoder.enSize = enSize; } private static Hero hero ;
public static Hero getHero() { return hero; } public static void setHero(Hero hero) { Recoder.hero = hero; } public static void KeepExit(){ //System.out.println(hero.getX()); int [] TanksX = new int[20]; int [] TanksY = new int[20]; int [] ShotsX = new int[100]; int [] ShotsY = new int[100]; int [] ETdirects = new int[20]; int [] HeroShotsX = new int[10]; int [] HeroShotsY = new int[10];
int [] heros = new int[]{ hero.getX(), hero.getY(), hero.direct
}; for(int i = 0 ; i < ets.size(); i ++){ EnemyTask et = ets.get(i); TanksX[i] = et.getX(); TanksY[i] = et.getY(); ETdirects [i] = et.direct;
} }public class Tank { int x = 0 ; int y = 0; int direct = 0; //方向 int type = 0 ;//类型 int speed = 30;//速度 int color; boolean isLive; public int getColor() { return color; } public void setColor(int color) { this.color = color; } public int getS() { return speed; } public void setS(int speed) { this.speed = speed; } public Tank(int x , int y , int direct , int type, int speed, boolean isLive){ this.x = x; this.y = y; this.direct = direct; this.type= type; this.speed = speed; this.isLive = isLive; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getD() { return direct; } public void setD(int direct) { this.direct = direct; } public int getT() { return type; } public void setT(int type) { this.type = type; }
} class EnemyTask extends Tank implements Runnable{ Vector<shot> ss = new Vector<shot>(); Vector<EnemyTask> ets = new Vector<EnemyTask>(); boolean isdirects = true; public EnemyTask(int x, int y, int direct , int type, int speed ,boolean isLive) { super(x, y, direct, type, speed, isLive); // TODO Auto-generated constructor stub } public boolean isTouchOhterTank (){ boolean b = false; switch (this.direct) { case 0://此坦克向上 for(int i = 0; i < ets.size(); i++){ EnemyTask et = ets.get(i); if(et != this){ if(et.direct == 0 || et.direct == 1){//上或下 if((this.x>=et.x && this.x <= et.x + 20//第一个点x在内 && this.y>=et.y && this.y <= et.y + 30)//第一个点y在内 ||(this.x + 20>=et.x && this.x+ 20 <= et.x + 20//第二个点x在内 && this.y >=et.y && this.y <= et.y + 30)//第二个点y在内 ){ b = true;
return b ; } @Override public void run() { int a = (int) (Math.random() * 10 + 2);//连动步数 int times = 0; while(true){ try { Thread.sleep(300); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //if(x > 0 && x < 400 - 30 & y > 0 && y < 300 - 30){ //if(!this.isTouchOhterTank()){ switch(this.direct){ case 0: //System.out.println(isTouchOhterTank()); for(int i = 0 ;i < a ; i++){ if(y - this.speed > 0 && !this.isTouchOhterTank()){ y -= this.speed; } try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } break; case 1: for(int i = 0 ;i < a ; i++){ if(y + speed < 300 - 30 && !this.isTouchOhterTank()){ y += this.speed; } try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } break; case 2: for(int i = 0 ;i < a ; i++){ if(x - speed > 0 && !this.isTouchOhterTank()){ x -= this.speed; } try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } break; case 3: for(int i = 0 ;i < a ; i++){ if(x + speed < 400 - 30 && !this.isTouchOhterTank()){ x += this.speed; } try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } break; } //} times ++; if(times % 2 == 0){
if(isLive){ if(ss.size() < 3){ shot s = null; switch (direct) { case 0://向上 s = new shot(x + 10 , y ,0); ss.add(s); break; case 1://向下 s = new shot(x + 10 , y + 30 , 1); ss.add(s); break; case 2://向左 s = new shot(x , y + 10 , 2); ss.add(s); break; case 3://右 s = new shot(x + 30 , y + 10 , 3); ss.add(s); break; default: break; } Thread t = new Thread(s); t.start(); } }
} public void setEts(Vector<EnemyTask> ets) { this.ets = ets;
}// @Override // public void run() { // while(true){ // try { // Thread.sleep(50); // } catch (InterruptedException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // // y ++ ; // System.out.println(y); // } // // } }class Hero extends Tank{ // public Hero(int x , int y, int direct , int type,int speed, boolean isLive){ super(x, y, direct, type,speed , isLive); } Vector<shot> ss = new Vector<shot>(); shot s = null; //开火 public void shotEnemy(){ //System.out.println("shotEnemy"); if(Recoder.getMyLife() > 0){//生命没有了,不能发子弹
switch (this.direct) { case 0://向上 s = new shot(x + 10 , y ,0); ss.add(s); break; case 3://右 s = new shot(x + 30 , y + 10 , 3); ss.add(s); break; case 1://向下 s = new shot(x + 10 , y + 30 , 1); ss.add(s); break; case 2://向左 s = new shot(x , y + 10 , 2); ss.add(s); break; default: break; } Thread t = new Thread(s); t.start();
} }
//向上,下,左,右 public void MoveUp(){ if(y - this.speed > 0){ y -= speed; } } public void MoveDown(){ if(y + this.speed < 300 -30){ y += speed; } } public void MoveLeft(){ if(x - this.speed > 0){ x -= speed; } } public void MoveRight(){ if(x + this.speed < 400 -30){ x += speed; } } } class shot implements Runnable{ int x ,y; int direct; int speed = 20; //子弹速度 boolean isShot = true; boolean isLive = true;//子弹是否活着 public shot(int x,int y, int direct){ this.x = x; this.y = y; this.direct = direct;
} @Override public void run() { while(true){ try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(isShot){ switch (direct) { case 0://向上 y -= speed; break; case 1://下 y += speed; break; case 2://右 x -= speed; break; case 3://左 x += speed; break;