坦克游戏部分代码0.2
1.Tank
package project.tankgame05;
public class Tank {
private int x;
private int y;
private int direction;
private int speed = 3;
private boolean t_sur = true;
public Tank(int x, int y) {
this.x = x;
this.y = y;
}
public void moveUp(){
y -= speed;
}
public void moveRight(){
x += speed;
}
public void moveDown(){
y += speed;
}
public void moveLeft(){
x -= speed;
}
public void fire(){
}
public int getDirection() {
return direction;
}
public void setDirection(int direction) {
this.direction = direction;
}
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 getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public boolean isT_sur() {
return t_sur;
}
public void setT_sur(boolean t_sur) {
this.t_sur = t_sur;
}
}
2.MyTank
package project.tankgame05;
import java.util.Vector;
public class MyTank extends Tank {
MyBullet myBullet = null;
Vector<MyBullet> myBullets = new Vector<>();
public MyTank(int x, int y) {
super(x, y);
}
@Override
public void fire() {
if(myBullets.size() == 8){
return;
}
switch (getDirection()){
case 0:
myBullet = new MyBullet(getX()+20,getY(),getDirection());
break;
case 1:
myBullet = new MyBullet(getX()+60,getY()+20,getDirection());
break;
case 2:
myBullet = new MyBullet(getX()+20,getY()+60,getDirection());
break;
case 3:
myBullet = new MyBullet(getX(),getY()+20,getDirection());
break;
}
myBullets.add(myBullet);
new Thread(myBullet).start();
}
}
3.EnemyTank
package project.tankgame05;
import java.util.Vector;
public class EnemyTank extends Tank implements Runnable{
Vector<EnemyBullet> e_Bullets_Ve = new Vector<>();
Vector<EnemyTank> enemyTanks = new Vector<>();
public void setEnemyTanks(Vector<EnemyTank> enemyTanks) {
this.enemyTanks = enemyTanks;
}
public boolean isTouchEnemyTank(){
for (int i = 0; i < enemyTanks.size(); i++) {
EnemyTank enemyTank = enemyTanks.get(i);
if(this != enemyTank){
double len = Math.sqrt((this.getX() - enemyTank.getX())*(this.getX() - enemyTank.getX())+
(this.getY() - enemyTank.getY())*(this.getY() - enemyTank.getY()));
if(len <= 70){
return true;
}
}
}
return false;
}
public EnemyTank(int x, int y) {
super(x, y);
}
@Override
public void run() {
while (true){
if(isT_sur() && e_Bullets_Ve.size() < 5){
EnemyBullet bul = null;
switch (getDirection()){
case 0:
bul = new EnemyBullet(getX()+20,getY(),0);
break;
case 1:
bul = new EnemyBullet(getX()+60,getY()+20,1);
break;
case 2:
bul = new EnemyBullet(getX()+20,getY()+60,2);
break;
case 3:
bul = new EnemyBullet(getX(),getY()+20,3);
break;
}
e_Bullets_Ve.add(bul);
new Thread(bul).start();
}
switch (getDirection()){
case 0:
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(getY() > 0 && !isTouchEnemyTank()){
moveUp();
}
}
break;
case 1:
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(getX() + 60 < 1000 && !isTouchEnemyTank()){
moveRight();
}
}
break;
case 2:
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(getY() + 60 < 750 && !isTouchEnemyTank()){
moveDown();
}
}
break;
case 3:
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(getX() > 0 && !isTouchEnemyTank()){
moveLeft();
}
}
break;
}
setDirection((int)(Math.random()*4));
if(!isT_sur()){
System.out.println("敌人坦克线程: "+ Thread.currentThread().getName()
+" 已经结束");
break;
}
}
}
}
4.Bullet
package project.tankgame05;
public class Bullet {
private int b_x;
private int b_y;
private int b_direction;
private int b_speed = 3;
private boolean b_sur = true;
public Bullet(int b_x, int b_y, int b_direction) {
this.b_x = b_x;
this.b_y = b_y;
this.b_direction = b_direction;
}
public int getB_x() {
return b_x;
}
public void setB_x(int b_x) {
this.b_x = b_x;
}
public int getB_y() {
return b_y;
}
public void setB_y(int b_y) {
this.b_y = b_y;
}
public int getB_direction() {
return b_direction;
}
public void setB_direction(int b_direction) {
this.b_direction = b_direction;
}
public int getB_speed() {
return b_speed;
}
public void setB_speed(int b_speed) {
this.b_speed = b_speed;
}
public boolean isB_sur() {
return b_sur;
}
public void setB_sur(boolean b_sur) {
this.b_sur = b_sur;
}
}
5.MyBullet
package project.tankgame05;
public class MyBullet extends Bullet implements Runnable{
public MyBullet(int b_x, int b_y, int b_direction) {
super(b_x, b_y, b_direction);
}
@Override
public void run() {
while (true){
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
switch (getB_direction()){
case 0:
setB_y(getB_y()-getB_speed());
break;
case 1:
setB_x(getB_x()+getB_speed());
break;
case 2:
setB_y(getB_y()+getB_speed());
break;
case 3:
setB_x(getB_x()-getB_speed());
break;
}
if(!(getB_x()>=0 && getB_x()<=1000 && getB_y()>=0 &&getB_y()<=750)
|| isB_sur() == false){
setB_sur(false);
System.out.println("我的子弹线程 "+ Thread.currentThread().getName() +" 已经结束");
break;
}
}
}
}
6.EnemyBullet
package project.tankgame05;
public class EnemyBullet extends Bullet implements Runnable{
public EnemyBullet(int b_x, int b_y, int b_direction) {
super(b_x, b_y, b_direction);
}
@Override
public void run() {
while (true){
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
switch (getB_direction()){
case 0:
setB_y(getB_y()-getB_speed());
break;
case 1:
setB_x(getB_x()+getB_speed());
break;
case 2:
setB_y(getB_y()+getB_speed());
break;
case 3:
setB_x(getB_x()-getB_speed());
break;
}
if(!(getB_x()>=0 && getB_x()<=1000 && getB_y()>=0 &&getB_y()<=750)
|| !isB_sur()){
setB_sur(false);
System.out.println("敌人子弹线程 "+ Thread.currentThread().getName() +" 已经结束");
break;
}
}
}
}
7.Bomb
package project.tankgame05;
public class Bomb {
int x;
int y;
int life = 9;
boolean isLive = true;
public Bomb(int x, int y) {
this.x = x;
this.y = y;
}
public void cutLife(){
if(isLive && life>=0){
life--;
}else{
isLive = false;
}
}
}
8.Recorder
package project.tankgame05;
import java.io.*;
import java.util.Vector;
public class Recorder {
private static int killEneTankNum = 0;
private static BufferedWriter bw = null;
private static BufferedReader br = null;
private static String filePath = "src\\record.txt";
private static String filePath1 = "src\\record2.txt";
public static void addkillEneTankNum(){
Recorder.killEneTankNum++;
}
private static Vector<EnemyTank> enemyTanks = null;
private static MyTank mytank = null;
private static Vector<Node> nodes = new Vector<>();
public static void setEnemyTanks(Vector<EnemyTank> enemyTanks) {
Recorder.enemyTanks = enemyTanks;
}
public static void setMytank(MyTank mytank) {
Recorder.mytank = mytank;
}
public static void storekillEneTankNum(){
try {
bw = new BufferedWriter(new FileWriter(filePath));
bw.write(killEneTankNum+"");
bw.newLine();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(bw != null){
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void storeAliveEneTank(){
try {
bw = new BufferedWriter(new FileWriter(filePath1));
for (int i = 0; i < enemyTanks.size(); i++) {
EnemyTank enemyTank = enemyTanks.get(i);
if(enemyTank.isT_sur()){
String str = enemyTank.getX() + " " + enemyTank.getY()
+ " " + enemyTank.getDirection();
bw.write(str);
bw.newLine();
}
}
if(mytank!= null && mytank.isT_sur()){
String str = mytank.getX() + " " + mytank.getY()
+ " " + mytank.getDirection();
bw.write(str);
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(bw!=null){
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void readKillTankNum(){
try {
br = new BufferedReader(new FileReader(filePath));
Recorder.killEneTankNum = Integer.parseInt(br.readLine());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static Vector<Node> readTank(){
try {
br = new BufferedReader(new FileReader(filePath1));
String tanks = null;
while ((tanks = br.readLine()) != null){
String[] s = tanks.split(" ");
Node node = new Node(Integer.parseInt(s[0])
, Integer.parseInt(s[1])
, Integer.parseInt(s[2]));
nodes.add(node);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
return nodes;
}
}
public static int getKillEneTankNum() {
return killEneTankNum;
}
public static void setKillEneTankNum(int killEneTankNum) {
Recorder.killEneTankNum = killEneTankNum;
}
}
9.Node
package project.tankgame05;
public class Node {
private int x;
private int y;
private int direct;
public Node(int x, int y, int direct) {
this.x = x;
this.y = y;
this.direct = direct;
}
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 getDirect() {
return direct;
}
public void setDirect(int direct) {
this.direct = direct;
}
}
10.AePlayWave
package project.tankgame05;
import javax.sound.sampled.*;
import java.io.File;
import java.io.IOException;
public class AePlayWave extends Thread {
private String filename;
public AePlayWave(String wavfile) {
filename = wavfile;
}
public void run() {
File soundFile = new File(filename);
AudioInputStream audioInputStream = null;
try {
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
} catch (Exception e1) {
e1.printStackTrace();
return;
}
AudioFormat format = audioInputStream.getFormat();
SourceDataLine auline = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
try {
auline = (SourceDataLine) AudioSystem.getLine(info);
auline.open(format);
} catch (Exception e) {
e.printStackTrace();
return;
}
auline.start();
int nBytesRead = 0;
byte[] abData = new byte[512];
try {
while (nBytesRead != -1) {
nBytesRead = audioInputStream.read(abData, 0, abData.length);
if (nBytesRead >= 0)
auline.write(abData, 0, nBytesRead);
}
} catch (IOException e) {
e.printStackTrace();
return;
} finally {
auline.drain();
auline.close();
}
}
}
11.TankPanel
package project.tankgame05;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.util.Vector;
public class TankPanel extends JPanel implements KeyListener,Runnable{
MyTank mytank = null;
Vector<EnemyTank> enemyTanks = new Vector<>();
Vector<Node> nodes = new Vector<>();
int enemyTankNum = 5;
Vector<Bomb> bombs = new Vector<>();
Image image1 = null;
Image image2 = null;
Image image3 = null;
public TankPanel(String key){
File file1 = new File("src\\record.txt");
File file2 = new File("src\\record2.txt");
if(!file1.exists() && !file2.exists()){
key = "1";
System.out.println("读取旧游戏失败,开启新游戏");
}
switch (key){
case "1":
mytank = new MyTank(100,600);
for (int i = 0; i < enemyTankNum; i++) {
EnemyTank enemyTank = new EnemyTank(150 * (i + 1), 0);
EnemyBullet enemyBullet = new EnemyBullet(enemyTank.getX() + 20,
enemyTank.getY() + 60, 2);
enemyTank.e_Bullets_Ve.add(enemyBullet);
new Thread(enemyBullet).start();
enemyTank.setDirection(2);
enemyTanks.add(enemyTank);
enemyTank.setEnemyTanks(enemyTanks);
new Thread(enemyTank).start();
}
Recorder.setEnemyTanks(enemyTanks);
Recorder.setMytank(mytank);
break;
case "2":
Recorder.readKillTankNum();
nodes = Recorder.readTank();
if(nodes == null){
break;
}
int hedui = (Recorder.getKillEneTankNum() + nodes.size());
if(hedui != enemyTankNum){
Node node = nodes.get(this.nodes.size() - 1);
mytank = new MyTank(node.getX(),node.getY());
mytank.setDirection(node.getDirect());
for (int i = 0; i < nodes.size()-1; i++) {
Node node1 = nodes.get(i);
EnemyTank enemyTank = new EnemyTank(node1.getX(),node1.getY());
EnemyBullet enemyBullet = new EnemyBullet(enemyTank.getX() + 20,
enemyTank.getY() + 60, node1.getDirect());
enemyTank.e_Bullets_Ve.add(enemyBullet);
new Thread(enemyBullet).start();
enemyTank.setDirection(node1.getDirect());
enemyTanks.add(enemyTank);
enemyTank.setEnemyTanks(enemyTanks);
new Thread(enemyTank).start();
}
Recorder.setEnemyTanks(enemyTanks);
Recorder.setMytank(mytank);
}else{
for (int i = 0; i < nodes.size(); i++) {
Node node1 = nodes.get(i);
EnemyTank enemyTank = new EnemyTank(node1.getX(),node1.getY());
EnemyBullet enemyBullet = new EnemyBullet(enemyTank.getX() + 20,
enemyTank.getY() + 60, node1.getDirect());
enemyTank.e_Bullets_Ve.add(enemyBullet);
new Thread(enemyBullet).start();
enemyTank.setDirection(node1.getDirect());
enemyTanks.add(enemyTank);
enemyTank.setEnemyTanks(enemyTanks);
new Thread(enemyTank).start();
}
Recorder.setEnemyTanks(enemyTanks);
Recorder.setMytank(mytank);
}
break;
default:
System.out.println("输入有误~~");
}
image1 = Toolkit.getDefaultToolkit()
.getImage(TankPanel.class.getResource("/bomb_1.gif"));
image2 = Toolkit.getDefaultToolkit()
.getImage(TankPanel.class.getResource("/bomb_2.gif"));
image3 = Toolkit.getDefaultToolkit()
.getImage(TankPanel.class.getResource("/bomb_3.gif"));
new AePlayWave("src\\111.wav").start();
}
public void showInfor(Graphics g){
g.setColor(Color.black);
Font font = new Font("楷体", Font.BOLD, 25);
g.setFont(font);
g.drawString("已击毁敌人坦克",1020,30);
drawTank(1020,60,g,0,1);
g.setColor(Color.black);
g.drawString(Recorder.getKillEneTankNum()+"",1080,100);
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.BLACK);
g.fillRect(0,0,1000,750);
showInfor(g);
if(mytank != null && mytank.isT_sur()){
drawTank(mytank.getX(),mytank.getY(),g,mytank.getDirection(),0);
}
if(enemyTanks != null){
for (int i = 0; i < enemyTanks.size(); i++) {
EnemyTank enemyTank = enemyTanks.get(i);
if(enemyTank.isT_sur()) {
drawTank(enemyTank.getX(), enemyTank.getY(), g,
enemyTank.getDirection(), 1);
}else{
enemyTanks.remove(enemyTank);
}
}
}
if(mytank != null && mytank.myBullets != null){
for (int i = 0; i < mytank.myBullets.size(); i++) {
MyBullet myBullet = mytank.myBullets.get(i);
if(myBullet != null && myBullet.isB_sur()){
g.setColor(Color.RED);
g.fillOval(myBullet.getB_x(),myBullet.getB_y(),5,5);
}else{
mytank.myBullets.remove(myBullet);
}
}
}
if(enemyTanks != null ){
for (int i = 0; i < enemyTanks.size(); i++) {
EnemyTank enemyTank = enemyTanks.get(i);
if(enemyTank.e_Bullets_Ve != null){
for (int j = 0; j < enemyTank.e_Bullets_Ve.size(); j++) {
EnemyBullet enemyBullet = enemyTank.e_Bullets_Ve.get(j);
if(enemyBullet.isB_sur()){
g.setColor(Color.yellow);
g.fillOval(enemyBullet.getB_x(), enemyBullet.getB_y(),
5, 5);
}else{
enemyTank.e_Bullets_Ve.remove(enemyBullet);
}
}
}
}
}
for (int i = 0; i < bombs.size(); i++) {
Bomb bomb = bombs.get(i);
if(bomb.isLive){
if(bomb.life > 6){
g.drawImage(image1,bomb.x,bomb.y,50,50,this);
bomb.cutLife();
}else if(bomb.life > 3){
g.drawImage(image2,bomb.x,bomb.y,50,50,this);
bomb.cutLife();
}else{
g.drawImage(image3,bomb.x,bomb.y,50,50,this);
bomb.cutLife();
}
}else{
bombs.remove(bomb);
}
}
}
public void drawTank(int x, int y, Graphics g,int direct,int type){
switch (type){
case 0://我们的坦克
g.setColor(Color.pink);
break;
case 1:
g.setColor(Color.yellow);
break;
}
switch (direct){
case 0:
g.fill3DRect(x,y,10,60,false);
g.fill3DRect(x+30,y,10,60,false);
g.fill3DRect(x+10,y+10,20,40,false);
g.fillOval(x+10,y+20,20,20);
g.drawLine(x+20,y+30,x+20,y);
break;
case 1:
g.fill3DRect(x,y,60,10,false);
g.fill3DRect(x,y+30,60,10,false);
g.fill3DRect(x+10,y+10,40,20,false);
g.fillOval(x+20,y+10,20,20);
g.drawLine(x+30,y+20,x+60,y+20);
break;
case 2:
g.fill3DRect(x,y,10,60,false);
g.fill3DRect(x+30,y,10,60,false);
g.fill3DRect(x+10,y+10,20,40,false);
g.fillOval(x+10,y+20,20,20);
g.drawLine(x+20,y+30,x+20,y+60);
break;
case 3:
g.fill3DRect(x,y,60,10,false);
g.fill3DRect(x,y+30,60,10,false);
g.fill3DRect(x+10,y+10,40,20,false);
g.fillOval(x+20,y+10,20,20);
g.drawLine(x,y+20,x+30,y+20);
break;
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_W){
mytank.setDirection(0);
if(mytank.getY()>0){
mytank.moveUp();
}
}else if(e.getKeyCode() == KeyEvent.VK_D){
mytank.setDirection(1);
if(mytank.getX()+60<1000){
mytank.moveRight();
}
}else if(e.getKeyCode() == KeyEvent.VK_S){
mytank.setDirection(2);
if(mytank.getY()+60<750){
mytank.moveDown();
}
}else if(e.getKeyCode() == KeyEvent.VK_A){
mytank.setDirection(3);
if(mytank.getX()>0){
mytank.moveLeft();
}
}
if(mytank != null && mytank.isT_sur()){
if(e.getKeyCode() == KeyEvent.VK_J){
mytank.fire();
}
}
this.repaint();
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void run() {
while (true){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
killEnenmy();
killMyTank();
this.repaint();
}
}
public void bitEnenmy(MyBullet myBullet, EnemyTank enemyTank){
switch (enemyTank.getDirection()){
case 0:
case 2:
if(myBullet.getB_x() >= enemyTank.getX() && myBullet.getB_x() <= enemyTank.getX()+40
&& myBullet.getB_y() >= enemyTank.getY() && myBullet.getB_y() <= enemyTank.getY()+60 ){
myBullet.setB_sur(false);
enemyTank.setT_sur(false);
for (int i = 0; i < enemyTank.e_Bullets_Ve.size(); i++) {
EnemyBullet enemyBullet = enemyTank.e_Bullets_Ve.get(i);
enemyBullet.setB_sur(false);
}
Recorder.addkillEneTankNum();
bombs.add(new Bomb(enemyTank.getX(),enemyTank.getY()));
}
break;
case 1:
case 3:
if(myBullet.getB_x() >= enemyTank.getX() && myBullet.getB_x() <= enemyTank.getX()+60
&& myBullet.getB_y() >= enemyTank.getY() && myBullet.getB_y() <= enemyTank.getY()+40 ){
myBullet.setB_sur(false);
enemyTank.setT_sur(false);
for (int i = 0; i < enemyTank.e_Bullets_Ve.size(); i++) {
EnemyBullet enemyBullet = enemyTank.e_Bullets_Ve.get(i);
enemyBullet.setB_sur(false);
}
Recorder.addkillEneTankNum();
bombs.add(new Bomb(enemyTank.getX(),enemyTank.getY()));
}
break;
}
}
public void killEnenmy(){
for (int i = 0; i < mytank.myBullets.size(); i++) {
MyBullet myBullet = mytank.myBullets.get(i);
for (int j = 0; j < enemyTanks.size(); j++) {
if (enemyTanks != null && myBullet!= null){
EnemyTank enemyTank = enemyTanks.get(j);
bitEnenmy(myBullet,enemyTank);
}
}
}
}
public void bitMyTank(EnemyBullet enemyBullet, MyTank mytank){
if(mytank != null && mytank.isT_sur()) {
switch (mytank.getDirection()) {
case 0:
case 2:
if (enemyBullet.getB_x() >= mytank.getX() && enemyBullet.getB_x() <= mytank.getX() + 40
&& enemyBullet.getB_y() >= mytank.getY() && enemyBullet.getB_y() <= mytank.getY() + 60) {
enemyBullet.setB_sur(false);
mytank.setT_sur(false);
for (int i = 0; i < mytank.myBullets.size(); i++) {
MyBullet myBullet = mytank.myBullets.get(i);
myBullet.setB_sur(false);
}
bombs.add(new Bomb(mytank.getX(), mytank.getY()));
}
break;
case 1:
case 3:
if (enemyBullet.getB_x() >= mytank.getX() && enemyBullet.getB_x() <= mytank.getX() + 60
&& enemyBullet.getB_y() >= mytank.getY() && enemyBullet.getB_y() <= mytank.getY() + 40) {
enemyBullet.setB_sur(false);
mytank.setT_sur(false);
for (int i = 0; i < mytank.myBullets.size(); i++) {
MyBullet myBullet = mytank.myBullets.get(i);
myBullet.setB_sur(false);
}
bombs.add(new Bomb(mytank.getX(), mytank.getY()));
}
break;
}
}
}
public void killMyTank(){
for (int i = 0; i < enemyTanks.size(); i++) {
EnemyTank enemyTank = enemyTanks.get(i);
for (int j = 0; j < enemyTank.e_Bullets_Ve.size(); j++) {
EnemyBullet bullet = enemyTank.e_Bullets_Ve.get(j);
bitMyTank(bullet,mytank);
}
}
}
}
12.TankGame05
package project.tankgame05;
import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Scanner;
public class TankGame05 extends JFrame {
TankPanel tankPanel01 = null;
public static void main(String[] args) {
TankGame05 tankGame01 = new TankGame05();
}
public TankGame05(){
System.out.println("1: 开始新游戏\r\n2: 继续上局游戏");
Scanner scanner = new Scanner(System.in);
String next = scanner.next();
tankPanel01 = new TankPanel(next);
this.add(tankPanel01);
this.setSize(1300,850);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.addKeyListener(tankPanel01);
new Thread(tankPanel01).start();
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("游戏关闭,数据正在存档中......");
Recorder.storekillEneTankNum();
Recorder.storeAliveEneTank();
System.exit(0);
}
});
}
}