文档库 最新最全的文档下载
当前位置:文档库 › java写的坦克大战简易版

java写的坦克大战简易版

java写的坦克大战简易版
java写的坦克大战简易版

MyTankGame2.java

package test;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

//import java.io.*;

import java.util.*;

class MyTankGame2 extends JFrame implements ActionListener {

MyPanel mp=null;

//定义一个开始的面板

MyStartPanel msp=null;

//做出我需要的菜单

JMenuBar jmb=null;

//开始游戏

JMenu jm1=null;

JMenuItem jmi1=null;

//退出系统

JMenuItem jmi2=null;

//存盘退出

JMenuItem jmi3=null;

JMenuItem jmi4=null;

public static void main(String[] args)

{

//System.out.println("Hello World!");

MyTankGame2 mtg=new MyTankGame2();

}

//构造方法

public MyTankGame2()

{

//创建菜单及菜单选项

jmb=new JMenuBar();

jm1=new JMenu("游戏(G)");

//设置助记符

jm1.setMnemonic('G');

jmi1=new JMenuItem("开始新游戏(N)");

jmi2=new JMenuItem("退出游戏(E)");

jmi3=new JMenuItem("存盘退出游戏");

jmi4=new JMenuItem("继续上局游戏");

jmi4.addActionListener(this);

jmi4.setActionCommand("continueGame");

jmi3.addActionListener(this);

jmi3.setActionCommand("saveExit");

jmi2.setMnemonic('E');

//对jmi1进行响应

jmi1.addActionListener(this);

jmi1.setActionCommand("newGame");

jmi2.addActionListener(this);

jmi2.setActionCommand("exit");

jm1.add(jmi1);

jm1.add(jmi2);

jm1.add(jmi3);

jm1.add(jmi4);

jmb.add(jm1);

msp=new MyStartPanel();

Thread t=new Thread(msp);

t.start();

this.setJMenuBar(jmb);

this.add(msp);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setSize(600,450);

this.setVisible(true);

}

@Override

public void actionPerformed(ActionEvent e) {

//对用户不同的点击进行不同的处理

if(e.getActionCommand().equals("newGame"))

{

mp=new MyPanel("newGame");

Thread t=new Thread(mp);

t.start();

//先删除旧的面板

this.remove(msp);

this.add(mp);

//注册监听

this.addKeyListener(mp);

//显示

this.setVisible(true);

}

else if(e.getActionCommand().equals("exit"))

{//保存击毁敌人的数量

Recorder.keepRecording();

System.exit(0);

}

//对存盘退出做处理

else if(e.getActionCommand().equals("saveExit"))

{

//工作

Recorder re=new Recorder();

re.setEts(mp.ets);

//保存击毁敌人的数量和敌人的坐标

re.keepRecAndEnemyTank();

//退出

System.exit(0);

}

else if(e.getActionCommand().equals("continueGame"))

{ //

mp=new MyPanel("con");

//mp.flag=;

Thread t=new Thread(mp);

t.start();

//先删除旧的面板

this.remove(msp);

this.add(mp);

//注册监听

this.addKeyListener(mp);

//显示

this.setVisible(true);

}

}

}

class MyStartPanel extends JPanel implements Runnable

{ int times

public void paint(Graphics g)

{

super.paint(g);

g.fillRect(0, 0, 400, 300);

//提示信息

if(times%2==0)

{

g.setColor(Color.yellow);

//开关信息的字体

Font myFont=new Font("华文新魏",Font.BOLD,30);

g.setFont(myFont);

g.drawString("stage:1", 150, 140);

}

}

@Override

public void run() {

// TODO Auto-generated method stub

while(true)

{

//休眠

try {

Thread.sleep(100);

} catch (Exception e) {

// TODO: handle exception

}

times++;

//重画

this.repaint();

}

}

}

//我的面板

class MyPanel extends JPanel implements KeyListener,Runnable {

//定义我的坦克

Hero hero=null;

//判断继续上局还是新游戏

//定义敌人的坦克组

Vector ets=new Vector();

Vector nodes=new Vector();

//定义炸弹集合

Vector bombs=new Vector();

int enSize=5;

//定义三张图片

Image image1=null;

Image image2=null;

Image image3=null;

//构造方法

public MyPanel(String flag)

{

//恢复记录

Recorder.getRecording();

hero=new Hero(30,231);

if(flag.equals("newGame"))

{

//初始化敌人的坦克

for(int i=0;i

{//创建一辆敌人的坦克对象

EnemyTank et=new EnemyTank((i+1)*50,0);

et.setColor(0);

et.setDirect(2);

//将MyPanel的敌人坦克向量交给该敌人坦克

et.setEts(ets);

//启动敌人的坦克

Thread t=new Thread(et);

t.start();

//给敌人的坦克添加一颗子弹

Shot s=new Shot(et.x+10, et.y+30, 2,1);

et.ss.add(s);

new Thread(s).start();

ets.add(et);//加入

}

}

else

{

nodes=new Recorder().getNodesAndEnNums();

//初始化敌人的坦克

for(int i=0;i

{

Node node=nodes.get(i);

//创建一辆敌人的坦克对象

EnemyTank et=new EnemyTank(node.x,node.y);

et.setColor(0);

et.setDirect(node.direct);

//将MyPanel的敌人坦克向量交给该敌人坦克

et.setEts(ets);

//启动敌人的坦克

Thread t=new Thread(et);

t.start();

//给敌人的坦克添加一颗子弹

Shot s=new Shot(et.x+10, et.y+30, 2,1);

et.ss.add(s);

new Thread(s).start();

ets.add(et);//加入

}

}

/*try {

image1=ImageIO.read(new File("/bomb_1.gif"));

image3=ImageIO.read(new File("/bomb_3.gif"));

} catch (Exception e) {

e.printStackTrace();

// TODO: handle exception

}*/

//播放开战声音

AePlayWave apw=new AePlayWave("F:\\myjava\\day9\\坦克大战

\\TankGamae13\\src\\111.wav");

apw.start();

//初始化图片

image1=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource( "/bomb_1.gif"));

image2=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource( "/bomb_2.gif"));

image3=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource( "/bomb_3.gif"));

}

//画出提示信息

public void showInfo(Graphics g)

{

//画出提示信息坦克(该坦克不参与战斗)

this.drawTank(100, 320, g, 0, 0);

g.setColor(Color.black);

g.drawString(Recorder.getEnNum()+"", 128, 343);

this.drawTank(165, 320, g, 0, 1);

g.setColor(Color.black);

g.drawString(Recorder.getMyLife()+"", 195, 343);

//画出玩家的总成绩

g.setColor(Color.black);

Font f=new Font("宋体",Font.BOLD,20);

g.setFont(f);

g.drawString("您的总成绩", 410, 25);

this.drawTank(420, 60, g, 0, 0);

g.setColor(Color.black);

g.drawString(Recorder.getAllEnNum()+"", 455, 80);

}

//重写paint函数

public void paint(Graphics g)

{

super.paint(g);

g.fillRect(0,0,400,300);

//画出提示信息

this.showInfo(g);

//画出自己的坦克

if(hero.isLive)

{

this.drawTank(hero.getX(),hero.getY(),g,hero.getDirect(),1);

}

//从ss中取出每一颗子弹并绘制

for(int i=0;i

{

Shot myShot =hero.ss.get(i);

//画出子弹

if(myShot!=null&&myShot.isLive==true)

{

g.draw3DRect(myShot.x, myShot.y, 1, 1, false);

}

if(myShot.isLive==false)

{

//从ss中删除掉该子弹

hero.ss.remove(myShot);

}

}

//画出炸弹

for(int i=0;i

{

Bomb b=bombs.get(i);

if(b.life>6)

{

g.drawImage(image1, b.x, b.y, 30, 30,this);

}

else if(b.life>3)

{

g.drawImage(image2, b.x, b.y, 30, 30,this);

}

else

{

g.drawImage(image3, b.x, b.y, 30, 30,this);

}

//让b的生命值减小

b.lifeDown();

if(b.life==0)

{//把炸弹从向量中去掉

bombs.remove(b);

}

}

//画出敌人的坦克

for(int i=0;i

{ EnemyTank et=ets.get(i);

if(et.isLive)

{

this.drawTank(et.getX(),et.getY(), g, et.getDirect(), 0);

//顺便画出敌人的子弹

for(int j=0;j

{

//取出子弹

Shot enemyShot=et.ss.get(j);

if(enemyShot.isLive)

{

g.draw3DRect(enemyShot.x, enemyShot.y, 1, 1, false);

}

else

{//如果死亡了,就从Vextor中删除掉

et.ss.remove(enemyShot);

}

}

}

}

}

//判断我的子弹是否会击中敌人的坦克

public void hitEnemyTank()

{

//判断是否会击中

for(int i=0;i

{

//取出子弹

Shot myShot=hero.ss.get(i);

//判断子弹是否有效

if(myShot.isLive)

{

//取出每一个敌人坦克与之匹配

for(int j=0;j

{

//取出坦克

EnemyTank et=ets.get(j);

if(et.isLive)

{

if(this.hitTank(myShot, et))

{ //减少敌人数量

Recorder.reduceEnNum();

//增加我的记录

Recorder.addEnEnum();

}

}

}

}

}

}

//我是否被击中

public void hitMe()

{

//取出每一个敌人的坦克

for(int i=0;i

{

//取出坦克

EnemyTank et=ets.get(i);

//取出每颗子弹

for(int j=0;j

{//取出子弹

Shot enemyShot=et.ss.get(j);

if(hero.isLive)

{

if(this.hitTank(enemyShot, hero))

{

//待写

}

}

}

}

}

//画出一个专门判断子弹是否击中敌人坦克的函数

public boolean hitTank(Shot s ,Tank et)

{

boolean b2=false;

//判断该坦克的方向

switch(et.direct)

{

//敌人坦克的方向是向上或者向下

case 0:

case 2:

if(s.x>et.x&&s.xet.y&&s.y

{

//击中

//子弹死亡

s.isLive=false;

//敌人坦克死亡

et.isLive=false;

b2=true;

//System.out.println("hytfyfrujyg");

//创建一颗炸弹放入Vector

Bomb b=new Bomb(et.x, et.y);

bombs.add(b);

}

break;

case 1:

case 3:

if(s.x>et.x&&s.xet.y&&s.y

{

//击中

//子弹死亡

s.isLive=false;

//敌人坦克死亡

et.isLive=false;

b2=true;

Bomb b=new Bomb(et.x, et.y);

bombs.add(b);

}

break;

}

return b2;

}

//画出坦克的函数(扩展)

public void drawTank(int x,int y,Graphics g,int direction,int type) {

//判断类型

switch(type)

{

case 0:

g.setColor(Color.CYAN);break;

case 1:g.setColor(Color.yellow);break;

}

//判断方向

switch(direction)

{

//向上走

case 0:

//g.setColor(Color.CYAN);

//画出我的坦克(到时再封装成一个函数)

//1.画出左边的矩形

g.fill3DRect(x,y,5,30,false);

//2.画出右边边的矩形

g.fill3DRect(x+15,y,5,30,false);

//3画出中间的矩形

g.fill3DRect(x+5,y+5,10,20,false);

//4画圆形

g.fillOval(x+5,y+10,10,10);

//5.画出线

g.drawLine(x+10,y+15,x+10,y);

break;

case 1://向右

g.fill3DRect(x, y, 30,5, false);

g.fill3DRect(x, y+15, 30,5 ,false);

g.fill3DRect(x+5, y+5, 20, 10, false);

g.fillOval(x+10, y+5, 10, 10);

g.drawLine(x+15, y+10, x+30, y+10);

break;

case 2:

//向下

g.fill3DRect(x,y,5,30,false);

//2.画出右边边的矩形

g.fill3DRect(x+15,y,5,30,false);

//3画出中间的矩形

g.fill3DRect(x+5,y+5,10,20,false);

//4画圆形

g.fillOval(x+5,y+10,10,10);

//5.画出线

g.drawLine(x+10,y+15,x+10,y+30);

break;

case 3://向左

g.fill3DRect(x, y, 30,5, false);

g.fill3DRect(x, y+15, 30,5 ,false);

g.fill3DRect(x+5, y+5, 20, 10, false);

g.fillOval(x+10, y+5, 10, 10);

g.drawLine(x+15, y+10, x, y+10);

break;

}

}

@Override

public void keyTyped(KeyEvent e) {

// TODO Auto-generated method stub

}

@Override

//w上,s下,a左,右边

public void keyPressed(KeyEvent e) {

// TODO Auto-generated method stub

if(e.getKeyCode()==KeyEvent.VK_W)

{

//设置我的坦克的方向上

this.hero.setDirect(0);

if(this.hero.y>0)

{

this.hero.moveUp();

}

}

else if(e.getKeyCode()==KeyEvent.VK_D)

{

//设置我的坦克的方向右边

this.hero.setDirect(1);

if(this.hero.x<370)

{this.hero.moveRight();}

}

else if(e.getKeyCode()==KeyEvent.VK_S)

{

//设置我的坦克的方向 xia边

this.hero.setDirect(2);

if(this.hero.y<=271)

{

this.hero.moveDown();

}

}

else if(e.getKeyCode()==KeyEvent.VK_A)

{

//设置我的坦克的方向左边

this.hero.setDirect(3);

if(this.hero.x>0)

{

this.hero.moveLeft();

}

}

if(e.getKeyCode()==KeyEvent.VK_K)

{

//玩家按了一个k键,开火

if(this.hero.ss.size()<=5)

{

this.hero.shotEnemy();

}

}

//必须用repaintPanel

this.repaint();

}

@Override

public void keyReleased(KeyEvent e) {

// TODO Auto-generated method stub }

@Override

public void run() {

// TODO Auto-generated method stub

//每隔100毫秒去重画

while(true)

{

try {

Thread.sleep(100);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

this.hitEnemyTank();

this.hitMe();

//重绘

this.repaint();

}

}

}

Members.java

package test;

import java.io.*;

import java.util.Vector;

import javax.sound.sampled.AudioFormat;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.DataLine;

import javax.sound.sampled.SourceDataLine;

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;

https://www.wendangku.net/doc/469998324.html, info = new https://www.wendangku.net/doc/469998324.html,(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();

}

}

}

class Node//恢复点

{

int x,y,direct;

public Node(int x,int y,int direct)

{

this.x=x;

this.y=y;

this.direct=direct;

}

}

//记录类,同时也可以保存一些设置

class Recorder

{

//记录每关有多少敌人

private static int enNum=5;

//设置我有多少可用的人

private static int myLife=3;

//记录总共消灭了多少敌人

private static int allEnNum=0;

//从文件中恢复记录点

static Vector nodes=new Vector();

private static FileWriter fw=null;

private static BufferedWriter bw=null;

private static FileReader fr=null;

private static BufferedReader br=null;

private Vector ets=new Vector();

public Vector getEts() {

return ets;

}

public void setEts(Vector ets) {

this.ets = ets;

}

//完成读取任务

public Vector getNodesAndEnNums()

{

try {

fr=new FileReader("F:\\myRecording.txt");

br=new BufferedReader(fr);

String n="";

//先读取第一行

n=br.readLine();

allEnNum=Integer.parseInt(n);

while((n=br.readLine())!=null)

{

String []xyz=n.split(" ");

Node node=new Node(Integer.parseInt(xyz[0]),

Integer.parseInt(xyz[1]),

Integer.parseInt(xyz[2]));

nodes.add(node);

}

} catch (Exception e) {

e.printStackTrace();

// TODO: handle exception

}

finally

{

try {

br.close();

fr.close();

} catch (Exception e2) {

// TODO: handle exception

}

}

return nodes;

}

//保存击毁敌人坦克的数量和敌人坦克的坐标,方向

public void keepRecAndEnemyTank()

{

try {

//创建

fw=new FileWriter("F:\\myRecording.txt");

bw=new BufferedWriter(fw);

bw.write(allEnNum+"\r\n");

//保存当前还活着的坐标和方向

for(int i=0;i

{

//取出第一个坦克

EnemyTank et=ets.get(i);

if(et.isLive)

{

String record=et.x+" "+et.y+" "+et.direct;

//写入到文件

bw.write(record+"\r\n");

}

}

} catch (Exception e) {

// TODO: handle exception

}

finally

{

//关闭流

try {

bw.close();

fw.close();

} catch (Exception e2) {

// TODO: handle exception

}

}

}

//从文件中读取记录

public static void getRecording()

{

try {

fr=new FileReader("F:\\myRecording.txt");

br=new BufferedReader(fr);

String n=br.readLine();

allEnNum=Integer.parseInt(n);

} catch (Exception e) {

e.printStackTrace();

// TODO: handle exception

}

finally

{

try {

br.close();

fr.close();

} catch (Exception e2) {

// TODO: handle exception

}

}

}

//把玩家击毁敌人的坦克数量保存到文件中

public static void keepRecording()

{

try {

//创建

fw=new FileWriter("F:\\myRecording.txt");

bw=new BufferedWriter(fw);

bw.write(allEnNum+"\r\n");

} catch (Exception e) {

// TODO: handle exception

}

finally

{

//关闭流

try {

bw.close();

fw.close();

} catch (Exception e2) {

// TODO: handle exception

}

}

}

public static int getAllEnNum() {

return allEnNum;

}

public static void setAllEnNum(int allEnNum) { Recorder.allEnNum = allEnNum;

}

public static int getEnNum() {

return enNum;

}

public static void setEnNum(int enNum) {

Recorder.enNum = enNum;

}

public static int getMyLife() {

return myLife;

}

public static void setMyLife(int myLife) { Recorder.myLife = myLife;

}

//减少敌人数

public static void reduceEnNum()

{

enNum--;

}

//消灭敌人

public static void addEnEnum()

{

allEnNum++;

}

}

//炸弹类

class Bomb

{

int x,y;

//炸弹的生命

int life=9;

boolean isLive=true;

public Bomb(int x,int y)

{

this.x=x;

this.y=y;

}

//减少生命值

public void lifeDown()

{

if(life>0)

{life--;}

else

{this.isLive=false;}

}

}

//子弹类

class Shot implements Runnable

{

int x,y;

int direct;

int speed=1;

//是否还活着

boolean isLive=true;

public Shot(int x,int y,int direct,int speed) {

this.x=x;

this.y=y;

this.direct=direct;

this.speed=speed;

}

@Override

public void run() {

// TODO Auto-generated method stub

while(true)

{

try {

Thread.sleep(50);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

switch(direct)

{

case 0://向上

y-=speed;break;

case 1://向右

x+=speed;break;

case 2://下

y+=speed;break;

case 3:

x-=speed;break;

}

//子弹何时死亡??????

if(x<0||x>400||y<0||y>300)

{

this.isLive=false;

break;

}

//System.out.println(x+""+y);

}

}

}

//坦克类

class Tank

{

int x=0;

int y=0;

//定义方向的值0上,右2,下3,左

int direct=0;

//坦克的速度

int speed=1;

int color=0;

boolean isLive=true;

public int getColor() {

return color;

}

public void setColor(int color) {

this.color = color;

}

public int getSpeed() {

return speed;

}

public void setSpeed(int speed) {

this.speed = speed;

}

public int getDirect() {

return direct;

}

public void setDirect(int direct) {

this.direct = direct;

}

public Tank(int x,int y)

{

this.x=x;

this.y=y;

}

public int getX()

{

return x;

}

public int getY()

{

return y;

}

public void setX(int x)

{

this.x=x;

}

public void setY(int y)

{

this.y=y;

}

}

//敌人的坦克 ,做成线程

class EnemyTank extends Tank implements Runnable {

//boolean isLive=true;

int times=0;

//定义一个向量,可以访问到MyPanel上所有敌人的坦克

Vector ets=new Vector();

//定义一个向量,可以存放敌人的子弹

Vector ss=new Vector();

//敌人添加子弹应当在刚刚创建坦克和敌人的坦克子弹死亡之后

public EnemyTank(int x, int y)

{

super(x, y);

}

//得到MyPanel的敌人坦克向量

public void setEts(Vectorvv)

{

this.ets=vv;

}

//判断是否碰到了别人的敌人的坦克

public boolean isTouchOtherEnemy()

{

boolean b=false;

//..。

switch(this.direct)

{

case 0:

//我的坦克向上

//取出所有的敌人坦克

for(int i=0;i

{

//取出第一坦克

EnemyTank et=ets.get(i);

if(et!=this)

{

if(et.direct==0||et.direct==2)//如果敌人的方向向上或者向下

{

if(this.x>=et.x&&this.x<=et.x+20&&this.y>=et.y&&this.y<=et.y+30)

{

return true;

}

if(this.x+20>=et.x&&this.x+20<=et.x+20&&this.y>=et.y&&this.y<=et.y+3 0)

{

return true;

}

}

if(et.direct==3||et.direct==1)//别人的左右方向

{

if(this.x>=et.x&&this.x<=et.x+30&&this.y>=et.y&&this.y<=et.y+20)

{

return true;

}

if(this.x+20>=et.x&&this.x+20<=et.x+30&&this.y>=et.y&&this.y<=et.y+2 0)

{

return true;

}

}

}

}

break;

case 1:

//坦克向右

for(int i=0;i

{

//取出第一坦克

EnemyTank et=ets.get(i);

if(et!=this)

{

if(et.direct==0||et.direct==2)//如果敌人的方向向上或者向下

{

if(this.x+30>=et.x&&this.x+30<=et.x+20&&this.y>=et.y&&this.y<=et.y+3 0)

{

return true;

}

if(this.x+30>=et.x&&this.x+30<=et.x+20&&this.y+20>=et.y&&this.y+20<= et.y+30)

{

return true;

}

}

if(et.direct==3||et.direct==1)//别人的左右方向

{

if(this.x+30>=et.x&&this.x+30<=et.x+30&&this.y>=et.y&&this.y<=et.y+2 0)

{

return true;

}

if(this.x+30>=et.x&&this.x+30<=et.x+30&&this.y+20>=et.y&&this.y+20<= et.y+20)

{

return true;

}

}

}

}

break;

case 2://向下

for(int i=0;i

{

//取出第一坦克

EnemyTank et=ets.get(i);

if(et!=this)

韩顺平java坦克大战1.0版本_源代码

/**画坦克1.0 */ import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JFrame; import javax.swing.JPanel; public class MyTankGame extends JFrame { MyPanel mp=null; public static void main(String[] args) { MyTankGame mtk=new MyTankGame(); } public MyTankGame() { mp=new MyPanel(); this.add(mp);//把面板加入窗体 //注册监听 this.addMouseListener(mp); this.addKeyListener(mp); this.addMouseMotionListener(mp); this.addWindowListener(mp); this.setTitle("坦克大战");//窗体标题 this.setSize(600,400);//大小,宽,高(像素) this.setLocation(300,300);//显示位置。左边距,上边距 //禁止用户改变窗口大小 this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);//显示 } } //我的面板 class MyPanel extends JPanel implements

Java语言坦克大战游戏设计(附有代码和图片)

JISHOU UNIVERSITY 本科生毕业设计 题目:基于java语言坦克大战游戏开发作者: 学号: 所属学院:信息科学与工程学院 专业年级: 指导教师:职称: 完成时间: 吉首大学教务处制

目录 基于java语言坦克大战游戏开发 (1) 摘要 (1) Based on the development of Java language Tank Wars Game (2) 第一章游戏简要说明 (3) 第二章开发环境介绍 (4) 2.1 开发环境 (4) 2.2 java语言特点简介 (4) 2.3 Eclipse开发工具的简介 (5) 第三章系统总体设计 (6) 3.1程序功能的总和 (6) 3.2主体模块 (6) 3.3子弹模块 (6) 3.4坦克模块 (7) 3.5 墙模块 (7) 3.6血液模块 (7) 3.7爆炸模块 (8) 第四章游戏详细设计过程 (9) 4.1创建游戏窗口 (9) 4.2改变游戏背景颜色。 (11) 4.3创建坦克 (11) 4.4 让坦克动起来 (12) 4.5改变窗口的大小 (13) 4.6让坦克受控制 (14) 4.7创建一个Tank类 (15) 4.8让坦克向8个方向移动 (16)

4.9修改4.8中所设计的不足 (18) 4.10添加子弹类 (19) 4.11根据己方坦克的位置,打出子弹 (21) 4.12修改坦克停下来不能打出子弹的问题 (21) 4.13让坦克能够打出多发子弹 (23) 4.14解决炮弹不消亡和坦克出界的问题 (23) 4.15增加敌方坦克 (24) 4.16击毙出现的敌方坦克 (25) 4.17加入爆炸效果 (26) 4.18添加多辆敌方坦克 (27) 4.19让敌方坦克智能化 (29) 4.20建立游戏障碍物 (31) 4.21阻止坦克互相穿越 (32) 4.22为我方坦克添加大招和血条 (33) 4.23添加血块 (34) 4.24重新载入敌军或我军坦克 (35) 4.25加入图片 (35) 第五章游戏的可行性测试 (37) 5.1游戏界面介绍 (37) 5.2游戏运行测试 (40) 第六章总结 (43) 参考文献 (44)

坦克大战程序代码

import java.awt.* ; import javax.swing.* ; import java.awt.event.*; import java.util.EventListener; class f extends JFrame { f(String title) { this.setTitle(title) ; this.setSize(608 , 630) ; this.setLocation(300 , 100) ; this.setBackground(Color.BLACK) ; MyTank mp = new MyTank() ; this.add(mp) ; this.addKeyListener(mp) ; new Thread(mp).start() ; } public static void main(String[] args) { f h = new f("坦克大战(版本1.0)") ; h.setVisible(true) ; } } //主战坦克 class MyTank extends JPanel implements KeyListener , Runnable { int x = 280, y = 280 ;//坦克的初始位置 int op = 1 ;//坦克的移动方向 int color = 0 ; int tankspeed = 8 ;//坦克的速度 int tankbullet = 8 ;//坦克的子弹速度 int tankfbullet = 4 ;//敌军的子弹速度 int shengming = 100 ;//生命 int fenshu = 0 ; int nandu = 5 ; //设置游戏难度 //子弹 int dx = 295 , dy = 295 ; int dx1 = 295 , dy1 = -10 ; int dx2 = 600 , dy2 = 295 ;

项目坦克大战设计报告

《JA V A程序开发课程设计》项目设计 项目名称:TankWar 软件 专业:软件工程班级:13软工1班姓名:毛晨光学号:24 一、需求分析: 基本功能: 1.玩家控制的坦克能够四处移动并且打击敌方坦克; 2.敌方坦克能够随机四处移动并且打击玩家控制的坦克; 3.玩家控制的坦克拥有血量,而敌方坦克没有; 4.坦克受到攻击时血条会缩短; 5.敌方坦克被消灭完之后,提示游戏胜利; 6.用户方坦克被消灭后提示游戏结束; 特色功能: 1.坦克具有图片,不单单只是个圈圈。 2.增加了血包功能,地图上会随机出现一个血包,我方坦克开过会增加 血量。 二、系统设计: 类:实现游戏界面地图的初始化。 类:绘制和重绘功能。 :监听用户的键盘输入。 类:实现坦克的初始化,绘制,移动,发射等功能。 :实现敌方坦克的初始化,绘制,移动,发射等功能。 类:实现炮弹的初始化,绘制,移动,攻击功能。 类:实现爆炸的初始化。绘制功能,爆炸效果由绘制半径从小到大再到小的圆实现。 类:包含枚举。 类:用于实现血包的功能。 三、功能实现。 一.绘制地图功能: public class TankMap extends Frame{ tart(); }

制坦克功能:public class Tank { 方坦克的绘制方法 public class EnemyTank extends Tank{ 弹绘制方法public class Shell { ntersects())){

ntersects())){ "hittanks"); (false); =false; Explor ex=new Explor(x-3,y-3,; return true; } } return true; } }

坦克大战java源代码审批稿

坦克大战j a v a源代码 YKK standardization office【 YKK5AB- YKK08- YKK2C- YKK18】

有些图片路径会出错要注意package ; import 坦克类 class Tank { int x=0; int y=0; int color=0; int speed=1; int direct=0; boolean isLive=true; public Tank(int x,int y) { =x; =y; } public int getX() { return x; } public void setX(int x) { = x; } public int getY() { return y; } public void setY(int y) { = y; } public int getDirect() { return direct; } public void setDirect(int direct) { = direct; }

public int getColor() { return color; } public void setColor(int color) { = color; } } ; import .*; import .*; import .*; public class MyTankGame4 extends JFrame implements ActionListener{ MyPanel mp=null; MyStartPanel msp=null; quals("New Game")) { (msp); mp=new MyPanel(); Thread mt=new Thread(mp); (); (mp); (mp); (true); } } } etImage"/.jpg")); etImage"/")); image2=().getImage"/")); image3=().getImage"/"));

基于java的游戏坦克大战论文

基于j a v a的游戏坦克 大战论文 文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]

目录 1 2 5 1

第一章绪论 课题研究的背景 如今我们的生活节奏越来越快,每个人的生活压力也在不断变大,长期紧绷着神经容易产生心理和生理上的双重伤害,人们需要在工作和学习之外放松自己,玩玩游戏正是放松自己的方式之一。 坦克大战,一个众所周知的小游戏,曾经在红白机时代风靡一时。其界面简单,耐玩,关卡多,可玩性高,没有局限的年龄层。 Java是现在全球最时髦的开发工具之一,它拥有庞大且完善的类库,内置了其他语言需要靠库甚至是操作系统才能支持的功能,拥有一个虚拟机,总之,Java的出现,确实给整个程序界带来了巨大的冲击,也许现在还无法准确评估Java为整个IT业带来的影响,但是有一点毋庸置疑—Java将不可避免的影响一带程序员。 使用Java作为开发工具,来做坦克大战这个小游戏,是一种很理性的选择。Java游戏可以在本地桌面系统下运行,也可以在Web浏览器下运行。 我在大学四年中学到了很多计算机的知识,JAVA语言,软件工程,数据结构,软件工程等课程。如今我将用我所学的知识来完成一个坦克大战游戏,来锻炼自己的动手能力,独立作出一个小程序。 课题研究的任务 本文中所做的主要工作如下: (1)介绍了制作坦克大战游戏的意义和目的。 (2)设计坦克大战游戏各个类,实现各类效果和目标。 (3)分析并解决游戏中的若干技术问题。 (4)完成坦克大战游戏,进行测试并分析结果.

第二章系统分析 课题的可行性分析 1、课题要求 (1)与实践活动和相关的文件和资料由教师提供。 (2)本课题要求学生有熟练的Java开发能力,有较强的自学能力。 (3)具体问题再做详细调查研究并与指导老师面谈。 2、可行性分析 技术可行性:游戏对机器没有多大要求,现在无论什么电脑,只要能安装J2SDK,就能在电脑上开发这款游戏。制作出来的游戏可以在本地桌面运行,也可在WEB上运行,现在JAVA语言非常成熟,完全能够完成这个游戏。 经济可行性:开发这个游戏除了耗费自己的时间和精力以外,不需要其他的资金问题,完成后放到网上开放下载,无需任何费用,有兴趣的人可以自己下载来玩。 需求分析 在游戏中需要实现的功能: (1)能够通过键盘自由控制坦克移动和发射子弹; (2)敌方坦克能够随机移动和随机发射子弹; (3)子弹和不同阵营坦克碰撞后会产生爆炸; (4)消灭敌方坦克后会有个计分板记录玩家得分 (5)游戏进行到一半时可以暂停退出,下次打开游戏时选继续游戏可以继续之前的游戏。 第三章系统总体设计 游戏总体流程设计 开始新游戏时,先进行初始化,然后调用敌方坦克类和我方坦克类,实现键盘监听功能,战场显示所有坦克的移动,发射子弹。判断子弹和敌方坦克的碰撞,调用爆炸类,调用记录类,修改玩家总得分。

java开发坦克大战

j a v a开发坦克大战 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

坦克大战游戏演示为什么选择这个项目 1、好玩 2、涉及到java各个方面的技术 1、java面向对象编程; 2、界面编程; 3、绘图技术; 4、多线程; 5、文件i/o操作; 6、数据库 3、巩固旧知识,学习新知识 java绘图坐标体系 绘图坐标本系--介绍 坐标原点位于左上角,以像素为单位。像素是计算机屏幕上最小的显示单位。在java的坐标系中,第一个是X坐标,表示当前位置为水平方向,距离坐标原点X个像素;第二个是Y坐标,表示当前位置为垂直方向,距离坐标原点Y个像素。 坐标体系--像素 计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是800×600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。现在的计算机可以支持更高的分辨率,也就是说,屏幕上可以显示更多的像素。因此,像素是一个密度单位,而厘米是长度单位,两者无法比较。 绘图原理(1)[] Component类提供了两个和绘图相关最重要的方法: 1、paint(Graphicsg)绘制组件的外观 2、repaint()刷新组件的外观

当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件 .*; .*; publicclassWindow013extendsJFrame{ ; 7、画字符串drawString(Stringstr,intx,inty); 8、设置画笔的字体setFont(Fontfont); 9、设置画笔的颜色setColor(Colorc); ; .*; publicclassWindow014extendsJFrame{ ; .*; publicclassWindow015extendsJFrame{ ; .*; import publicclassWindow016extendsJFrameimplementsActionListener{ quals("黑色")){ 点击了黑色按钮"); ; }elseif().equals("红色")){ 点击了红色按钮"); ; }else{ 不知道"); } } } classCatimplementsActionListener{ publicvoidactionPerformed(ActionEventarg0){ if().equals("黑色")){ 也知道你按下了黑色按钮");

马士兵坦克大战经典源代码

package com.bjsxt.tank; import java.awt.*; import java.awt.event.*; import java.util.List; import java.util.ArrayList; /** * 这个类的作用是坦克游戏的主窗口 * @author mashibing * */ public class TankClient extends Frame { /** * 整个坦克游戏的宽度 */ public static final int GAME_WIDTH = 800; public static final int GAME_HEIGHT = 600; Tank myTank = new Tank(50, 50, true, Tank.Direction.STOP, this); Wall w1 = new Wall(100, 200, 20, 150, this), w2 = new Wall(300, 100, 300, 20, this); List explodes = new ArrayList(); List missiles = new ArrayList(); List tanks = new ArrayList(); Image offScreenImage = null; Blood b = new Blood(); public void paint(Graphics g) { /* * 指明子弹-爆炸-坦克的数量 * 以及坦克的生命值 */ g.drawString("missiles count:" + missiles.size(), 10, 50); g.drawString("explodes count:" + explodes.size(), 10, 70); g.drawString("tanks count:" + tanks.size(), 10, 90); g.drawString("tanks life:" + myTank.getLife(), 10, 110); if(tanks.size() <= 0) { for(int i=0; i<5; i++) { tanks.add(new Tank(50 + 40*(i+1), 50, false, Tank.Direction.D, this)); }

java开发坦克大战

坦克大战游戏演示 为什么选择这个项目 1、好玩 2、涉及到java各个方面的技术 1、java面向对象编程; 2、界面编程; 3、绘图技术; 4、多线程; 5、文件i/o操作; 6、数据库 3、巩固旧知识,学习新知识 java绘图坐标体系 绘图坐标本系--介绍 坐标原点位于左上角,以像素为单位。像素是计算机屏幕上最小的显示单位。在java 的坐标系中,第一个是X坐标,表示当前位置为水平方向,距离坐标原点X个像素;第二个是Y坐标,表示当前位置为垂直方向,距离坐标原点Y个像素。 坐标体系--像素 计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是800×600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。现在的计算机可以支持更高的分辨率,也就是说,屏幕上可以显示更多的像素。因此,像素是一个密度单位,而厘米是长度单位,两者无法比较。 绘图原理(1)[Window013.java] Component类提供了两个和绘图相关最重要的方法: 1、paint(Graphics g)绘制组件的外观 2、repaint()刷新组件的外观 当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件 import java.awt.*; import javax.swing.*; public class Window013 extends JFrame{ //定义组件 MyPanel mp=null; public static void main(String[] args) { Window013 th=new Window013();

坦克大战程序源代码

import java.awt.*; import java.awt.event.*; import java.util.List; import java.util.*; public class TankClient extends Frame { private static final long serialVersionUID = 1L; public static final int GAME_WIDTH=800; public static final int GAME_HIGH=600; Tank myTank=new Tank(50,50,this,true); List tanks=new ArrayList(); List missles=new ArrayList(); private static Random r=new Random(); Wall w1=new Wall(300,100,300,40,this),w2=new Wall(100,150,40,300,this); AddBlood Addb=new AddBlood(); List explodes = new ArrayList(); Image offScreenImage=null; public void paint(Graphics g) { g.drawString("missles count:"+missles.size(), 10,50); g.drawString("tanks count:" + tanks.size(), 10, 70); g.drawString("exlpode count:" +explodes.size(), 10, 90); g.drawString("mytank life:" + myTank.getLife(), 10, 110); for(int i=0;i

java坦克大战毕业设计论文

基于J2SE的网络版坦克大战游戏设计 摘要 [摘要]:J2SE (Java 2 Standard Edition)就是Java2的标准版,主要用于桌面应用软件的编程,是伴随着计算机技术的飞速发展而诞生的一项新的开发技术。随着个人电脑的日益普及、Java 功能在个人电脑上的实现,Java应用程序产生的单机增值服务逐渐体现出其影响力,对丰富人们的生活内容、愉悦身心、开发智力等起着不可忽视的作用。该论文通过总结和分析JA V A 游戏的开发流程和代码框架的设计,开发了一款基于J2SE架构的游戏——坦克大战。本设计采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。运行程序后允许用户选择执行选项菜单。在开始游戏后,启动服务器和客户端,对背景的所有物体进行绘图。在主程序运行的线程中,画面刷新将以一定的频率采用双缓冲技术对屏幕重绘,实时反映整个游戏的进行状态。用户控制的坦克运行在主线程中,随屏幕刷新的频率而移动。坦克将在游戏开始时进行初始化,然后将坦克绘制在地图的上层。本设计主要实现的功能是让坦克能向八个方向移动,并且打出炮弹,子弹击中敌人坦克,子弹和敌人坦克同时消失,产生爆炸,CPU坦克能智能的移动并且打出炮弹。能够支持网络对战和单机对战两种模式。 Java良好的跨平台特性在软件的开发中显示出了巨大的威力,“一次编写,随处运行”,java 系统可以运行在不同的操作系统和硬件上。随着linux的持续增长以及MacOSX完全支持java 技术,跨平台的特性变得越来越有分量。 由于免费、跨平台、java语言本身技术先进,在高校中,java已经成为许多学科研究、课程和计算的首选语言,用java做上机作业,一般都是鼓励的。据我所知,北大、清华许多院系的研究生入学考试都可以用java语言答题。实际上,用java来完成这些工作,大多数情况下要比用C或其他语言简洁得多,你可以把注意力集中在算法等核心部分,从而获得更高分数。 [关键词] 面向对象坦克大战游戏J2SE Socket

毕业设计论文 基于J2ME的Java游戏--坦克大战的开发

目录 摘要 ................................................................................................................... - I - Abstract .................................................................................................................... - I - 引言 ...................................................................................................................... II 第一章绪论 .................................................................................................... - 1 - 1.1 手机软件现状.......................................................................................... - 1 - 1.2 游戏业务及J2ME概况............................................................................ - 1 - 1.3 任天堂(Nintendo)的8位FC机器和Battle City背景介绍............ - 3 - 1.4 本章小结.................................................................................................. - 3 - 第二章开发环境及相关技术的介绍 ................................................................ - 5 - 2.1 开发环境.................................................................................................. - 5 - 2.2 Java语言的特点..................................................................................... - 5 - 2.3 关于JBuilder9....................................................................................... - 5 - 2.4 关于Wireless Tool Kit....................................................................... - 6 - 2.5 Java Appication Manager.................................................................... - 6 - 2.6 本章小结.................................................................................................. - 6 - 第三章程序结构、思想和相关技术 ................................................................ - 7 - 3.1 本程序需解决的有关技术问题.............................................................. - 7 - 3.2 程序流程.................................................................................................. - 8 - 3.3 绘图与MIDP2.0新增的GameCanvas包.............................................. - 10 - 3.3.1 提供低级绘制的Canvas类....................................................... - 10 - 3.3.2 Graphics类................................................................................ - 10 - 3.3.3 PNG格式...................................................................................... - 10 - 3.3.4 Game包中的新功能.................................................................... - 11 - 3.3.5 有关绘图的一些技术................................................................. - 12 - 3.4 坦克的控制和敌方的智能运行............................................................ - 12 - 3.5 子弹的运行和控制................................................................................ - 13 - 3.6 RMS数据库系统..................................................................................... - 14 - 3.7 内存使用的最佳化................................................................................ - 15 - 3.8 混淆器(Obfuscator)的使用................................................................ - 16 - 3.9 模拟器的相关调试................................................................................ - 16 - 3.10 本章小结.............................................................................................. - 17 - 第四章程序分析和具体实现 .............................................................................. - 18 - 4.1 游戏进入前的选择................................................................................ - 18 - 4.2 主游戏逻辑及其涉及到的若干类........................................................ - 19 - 4.3 坦克的共同行为.................................................................................... - 21 - 4.4 玩家坦克的功能属性............................................................................ - 22 - 4.5 敌人坦克的功能属性............................................................................ - 22 - 4.6 子弹的运行和控制................................................................................ - 24 - 4.7 记分系统................................................................................................ - 25 -

坦克大战java源代码

有些图片路径会出错要注意package com.tankgame; import java.util.Vector; //坦克类 class Tank { int x=0; int y=0; int color=0; int speed=1; int direct=0; boolean isLive=true; public Tank(int x,int y) { this.x=x; this.y=y; } 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;

} public int getColor() { return color; } public void setColor(int color) { this.color = color; } } //我的坦克 class Hero extends Tank { Shot shot=null; Vector shotm=new V ector(); public Hero(int x,int y) { super(x,y); this.color=5; } //坦克具有一个打击敌人的方法 public void shotenemy(int x,int y,int direct) { switch(direct) { case 0: shot=new Shot(this.x+10,this.y,0); shotm.add(shot); break; case 1: shot=new Shot(this.x+30,this.y+10,1); shotm.add(shot); break; case 2: shot=new Shot(this.x+10,this.y+30,2); shotm.add(shot); break; case 3: shot=new Shot(this.x,this.y+10,3); shotm.add(shot);

坦克大战系统《Java程序开发实训》综合实训报告

《Java程序开发实训》综合实训报告 题目:坦克大战系统 姓名:方庆 学号:2010203206 班级:10软件(2)班

一、系统实现的主要功能及运行结果截图 选择的语言的原因 游戏本身是一种娱乐方式,带给人无尽的乐趣,而且游戏行业的发展也将是带动周边行业的发展。同样对做出游戏的人的要求也会越来越高一满足游戏爱好者的要求。本次期末设计就是设计一种娱乐性较强的小游戏坦克大战,说到大战其实是不敢当的。但游戏基本拥有可玩性。java语言是一种跨平台,适合与分布计算环境的面向对象编程语言,java主要用在web开发,手机游戏及一些平台游戏的开发,他有很好的跨平台性。所以本次的设计坦克游戏选择的是java。 系统软件的软件环境 1.网络服务器操作系统:Window是 XP以上 2.开发工具:Eclipse 3运行环境:J2sdk 4.编程语言:java语言。 人机对战模式功能 1.能够发射子弹打击敌人 2.敌人能够移动 3.能够模拟爆炸 4.能够产生障碍 5能够增长生命6.能够使用超级子弹 坦克可以发射子弹

玩家坦克被击中血量减少。 被击中的坦克发生爆炸并且吃血块可以加血量。

玩家坦克可以从把方向发射超级子弹 自己的TankHealth为<=0时,。说明玩家坦克已死亡。游戏结束

本系统的坦克大战是基于java语言设计的开发,具有较高的人工智能和相对的图形处理。游戏可一人作战每次电脑方有10辆坦克, 此一举消灭全部的敌方坦克为目的。在这过程中坦克有机会得到血块来添加自己的生命值。从而变得强大。也利用wall来形成阻击敌人。 游戏拥有开挂的功能。可以穿过墙体来攻击敌方坦克。还给玩家坦克 置了超级炮弹。从八个方向同时射出炮弹来摧毁敌方坦克。主要功能 简单罗列如下: 1.屏幕左上方显示游戏的状态,当玩家方坦克全数为0是游戏结束 2.敌方坦克只在空地上行走,不可通过Wall 3.游戏打坏敌方坦克后,可随机位置随机出现血块奖励。坦克经过该 位置可获得相应的生命值加成。 4.玩家坦克的游戏资格和电脑坦克不同。 TankClient类设计流程 游戏系统类关联图

java写的坦克大战简易版

MyTankGame2.java package test; import javax.swing.*; import java.awt.*; import java.awt.event.*; //import java.io.*; import java.util.*; class MyTankGame2 extends JFrame implements ActionListener { MyPanel mp=null; //定义一个开始的面板 MyStartPanel msp=null; //做出我需要的菜单 JMenuBar jmb=null; //开始游戏 JMenu jm1=null; JMenuItem jmi1=null; //退出系统 JMenuItem jmi2=null; //存盘退出 JMenuItem jmi3=null; JMenuItem jmi4=null; public static void main(String[] args) { //System.out.println("Hello World!"); MyTankGame2 mtg=new MyTankGame2(); } //构造方法 public MyTankGame2() { //创建菜单及菜单选项 jmb=new JMenuBar(); jm1=new JMenu("游戏(G)"); //设置助记符 jm1.setMnemonic('G'); jmi1=new JMenuItem("开始新游戏(N)"); jmi2=new JMenuItem("退出游戏(E)"); jmi3=new JMenuItem("存盘退出游戏"); jmi4=new JMenuItem("继续上局游戏"); jmi4.addActionListener(this);

坦克大战java源代码

有些图片路径会出错要注意package .tankgame; import java.util.Vector; //坦克类 class Tank { int x=0; int y=0; int color=0; int speed=1; int direct=0; boolean isLive=true; public Tank(int x,int y) { this.x=x; this.y=y; } 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;

} public int getColor() { return color; } public void setColor(int color) { this.color = color; } } //我的坦克 class Hero extends Tank { Shot shot=null; Vector shotm=new V ector(); public Hero(int x,int y) { super(x,y); this.color=5; } //坦克具有一个打击敌人的方法 public void shotenemy(int x,int y,int direct) { switch(direct) { case 0: shot=new Shot(this.x+10,this.y,0); shotm.add(shot); break; case 1: shot=new Shot(this.x+30,this.y+10,1); shotm.add(shot); break; case 2: shot=new Shot(this.x+10,this.y+30,2); shotm.add(shot); break; case 3: shot=new Shot(this.x,this.y+10,3); shotm.add(shot);

相关文档
相关文档 最新文档