Java游戏开发之坦克大战代码

Java游戏开发之坦克大战代码
Java游戏开发之坦克大战代码

Java游戏开发之坦克大战代码

标题:Java游戏开发之坦克大战代码

关键词:Java坦克大战,坦克大战Java代码

这是一个Java坦克大战的源码,实现了大部分功能,是学习Java绘图技术的好例子主类:

package com.qq.TankGame;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Paint;

import java.awt.Panel;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

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;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

import javax.swing.JTextArea;

//

///**

// * 功能:java绘图

// * @author Administrator

// *

// */

public class TankGame extends JFrame implements ActionListener{

MyPanel mp = null;

myStartPanel msp = null;

EnemyTask em = null;

JMenuBar jmb = null;

JMenu jm = null;

JMenuItem jmi1 = null;

JMenuItem jmi2 = null;

JMenuItem jmi3 = null;

public static void main(String[] args) {

TankGame tankGame = new TankGame();

}

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();

}else if(arg0.getActionCommand()== "exit"){

//Recoder.KeepRecording();

Recoder.KeepExit();

//KeepExit();

System.exit(0);

}

}

}

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 ets = new Vector();

int enSize = 3; //敌人坦克初始数量

int enSizes = 5; //敌人坦克画面总数量

int hintEnemyTanks = 0;//击中敌人坦克数量

public void showInfo(Graphics g ){//画提示信息

//画出提出坦克

this.drawTank(80, 330, g, 0, 1);

this.drawTank(160, 330, g, 0, 0);

g.setColor(Color.BLACK);

g.drawString(Recoder.getEnNum() + "", 105, 350);

g.drawString(Recoder.getMyLife() + "", 185, 350);

//画出成绩

g.setColor(Color.BLACK);

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

g.setFont(f);

g.drawString("你的总成绩:", 400, 20);

this.drawTank(410, 30, g, 0, 1);

g.drawString((20 - Recoder.getEnNum()) + "", 435, 50);

}

public void paint(Graphics g){

super.paint(g);

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

this.showInfo(g);//画出提示信息

//自己坦克

if(hero.isLive == true){

this.drawTank(hero.getX(), hero.getY(), g, hero.direct, hero.type); }else{

if(Recoder.getMyLife() > 0){

hero = new Hero(30, 270 ,0,0,10 , true);

hero.isLive = true;

}

}

//画出敌人坦克

for(int i = 0; i

EnemyTask et = ets.get(i);

if(!et.isLive){

ets.remove(i);

if(Recoder.getEnNum() >0){

this.drawTank(50, 0, g, 1, 1);

ets.add(et);

//et.isLive = true;

Thread t = new Thread(et);

t.start();

}

// if(Recoder.getEnNum() > 0){

// et.isLive = true;

// }

}

if(et.isLive){

this.drawTank(et.getX(), et.getY(),

g, et.direct, et.type);

System.out.println("et.ss.size()"+et.ss.size());

for(int j = 0; j < et.ss.size(); j++){//敌人坦克子弹

s = et.ss.get(j);

if(s.isLive){

if(isPaintShot){

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

}

}else{

et.ss.remove(j);

}

}

}

// if(!et.isLive){

// ets.remove(i);

// }

}

//画出子弹

for(int i = 0; i< hero.ss.size(); i++){

if(hero.ss.get(i)!= null && hero.ss.get(i).isLive == true){ g.fill3DRect(hero.ss.get(i).x, hero.ss.get(i).y, 5, 10, false); }

if(hero.ss.get(i).isLive == false){

hero.ss.remove(hero.ss.get(i));

}

}

}

// public void hintTank2(shot s , Hero et){

// switch (et.direct) {

// case 0:

// case 1:

// if(s.x < et.x + 20 && s.x > et.x

// && s.y < et.y + 30 && s.y > et.y){

// s.isLive = false;

// et.isLive = false;

// }

// //break;

// case 2:

// case 3:

// if(s.x < et.x + 30 && s.x > et.x

// && s.y < et.y + 20 && s.y > et.y){

// s.isLive = false;

// et.isLive = false;

// }

// //break;

//

//// default:

//// break;

// }

//

// }

public boolean hintTank(shot s , Tank et){

boolean b = false;

switch (et.direct) {

case 0:

case 1:

if(s.x < et.x + 20 && s.x > et.x

&& s.y < et.y + 30 && s.y > et.y){

s.isLive = false;

et.isLive = false;

b = true;

}

break;

case 2:

case 3:

if(s.x < et.x + 30 && s.x > et.x

&& s.y < et.y + 20 && s.y > et.y){

s.isLive = false;

et.isLive = false;

b = true;

}

break;

// default:

// break;

}

return b;

}

public void drawTank (int x , int y , Graphics g , int direct , int type){ switch(type){//坦克类型

case 0:

g.setColor(Color.RED);

break;

case 1:

g.setColor(Color.BLUE);

break;

}

switch (direct) {

case 0://向上

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

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

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

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

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

break;

case 1://向下

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

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

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

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

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

case 2://向左

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 , y + 10,x + 15,y + 10 );

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 + 30 , y + 10); break;

default:

break;

}

}

public MyPanel (){

hero = new Hero(30, 270 ,0,0,10 , true);

//tanks = new tank(100,100, 2 ,1);

//初始化敌人坦克

Recoder.setHero(hero);

for(int i = 0; i < enSize; i++){

//创建敌人坦克的对象

Recoder.getRecording();

EnemyTask et = new EnemyTask((i + 1)*50, 0, 1, 1, 5 ,true); et.setEts(ets);

Recoder.setEtss(ets);//传ets到Recoder

Thread t = new Thread(et);

t.start();

shot s = new shot(et.x + 10 , et.y + 30, et.direct);

et.ss.add(s);

Thread t2 = new Thread(s);

t2.start();

ets.add(et);//加入到集合中

//et.setColor(1);

}

Recoder.setEnSize(enSize);

}

@Override

public void keyPressed(KeyEvent arg0) {

// TODO Auto-generated method stub

if(arg0.getKeyCode() == KeyEvent.VK_S){

//hero.setX(hero.getX() ++ 1);

// int i= hero.getY();

// i += hero.speed;

// hero.setY(i);

this.hero.MoveDown();

hero.setD(1);

}

if(arg0.getKeyCode() == KeyEvent.VK_W){

//hero.setX(hero.getX() ++ 1);

// int i= hero.getY();

// i -= hero.speed;

// hero.setY(i);

hero.MoveUp();

hero.setD(0);

}

if(arg0.getKeyCode() == KeyEvent.VK_D){

//hero.setX(hero.getX() ++ 1);

// int i= hero.getX();

// i += hero.speed;

// hero.setX(i);

hero.MoveRight();

hero.setD(3);

}

if(arg0.getKeyCode() == KeyEvent.VK_A){

//hero.setX(hero.getX() ++ 1);

// int i= hero.getX();

// i -= hero.speed;

// hero.setX(i);

hero.MoveLeft();

hero.setD(2);

}

//判断是否按下J

if(arg0.getKeyCode() == KeyEvent.VK_J){

if(hero.ss.size() <= 4){

this.hero.shotEnemy();

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

}

}

if(arg0.getKeyCode() == KeyEvent.VK_SPACE){//空格暂停 if(hero.speed != 0){

a = hero.speed ;

hero.speed = 0;

for(int i = 0; i < ets.size(); i ++){

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

EnemyTask et = ets.get(i);

//System.out.println("speed" + et.speed);

b = et.speed;

et.speed = 0;

directs[i] = et.direct;

//System.out.println(et.direct);

//System.out.println(directs[i]);

//et.direct = 0;

et.isdirects = false;

for(int j = 0 ; j < et.ss.size(); j ++){

shot s = et.ss.get(j);

c = s.speed;

s.speed = 0;

System.out.println("aa");

}

}//System.out.println("b1 =" + b);

isPaintShot = false;

}

else{

hero.speed = a;

//System.out.println("a2 =" + a);

for(int i = 0; i < ets.size(); i ++){

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

EnemyTask et = ets.get(i);

et.isdirects = true;

et.speed = b;

et.direct = directs[i];

for(int j = 0 ; j < et.ss.size(); j ++){

shot s = et.ss.get(j);

s.speed = c;

isPaintShot = true;

}

}s.isShot = true;

}

}

if(arg0.getKeyCode() == KeyEvent.VK_K){

this.KeepExit();

System.exit(0);

}

if(arg0.getKeyCode() == KeyEvent.VK_L){

this.GetKeeper();

}

this.repaint();

}

@Override

public void keyReleased(KeyEvent arg0) {

// TODO Auto-generated method stub

}

@Override

public void keyTyped(KeyEvent arg0) {

// TODO Auto-generated method stub

}

@Override

public void run() {

//每隔100ms

while(true){

try {

Thread.sleep(100);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

this.hintEnemyTank();

this.hintMyTank();

// for(int i = 0; i < et.ss.size(); i ++){

// shot myshot = et.ss.get(i);

// if(et.isLive == true){

//

// if(hero.isLive = true){

// this.hintTank2(myshot, hero);

// }

//

// }

// }

this.repaint();

}

}

private void hintMyTank() {

for(int i = 0; i < ets.size(); i++){

EnemyTask et = ets.get(i);

for(int j = 0; j < et.ss.size(); j++ ){

shot s = et.ss.get(j);

if(s != null){

if(hero.isLive){

this.hintTank(s, hero);

if(this.hintTank(s, hero)){//判断是否击中,返回true则hero数量减一Recoder.setMyLife(Recoder.getMyLife() - 1 );

}

}

}

}

}

}

private void hintEnemyTank() {

for(int i = 0; i < hero.ss.size(); i ++){

shot myshot = hero.ss.get(i);

if(myshot.isLive == true){

for(int j = 0; j < ets.size(); j ++){

EnemyTask et = ets.get(j);

if(et.isLive = true){

this.hintTank(myshot, et);

if(this.hintTank(myshot, et)){

hintEnemyTanks ++;

Recoder.setEnNum(Recoder.getEnNum() - 1);

}

}

}

}

}

}

private void KeepExit(){

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;

for(int j = 1 ; j < et.ss.size(); j++){

shot s = et.ss.get(j);

ShotsX[j] = s.x;

ShotsY[j] = s.y;

}

}

for(int i = 0 ; i < hero.ss.size(); i++ ){

shot s = hero.ss.get(i);

HeroShotsX[i] = s.x ;

HeroShotsY[i] = s.y;

}

BufferedWriter bw = null;

try {

bw = new BufferedWriter(new FileWriter("d:\\aa\\TanksX.txt")); for(int i = 0 ; i < enSize ; i ++){

bw.write(TanksX[i] + "\r\n");

bw.write(TanksY[i] + "\r\n");

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally {

try {

bw.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

public void GetKeeper (){//继续游戏时还原数据

BufferedReader br = null ;

try {

br = new BufferedReader(new FileReader("d:\\aa\\TanksX.txt")); for(int i = 0; i < enSize*2 ; i ++){

if(i % 2 !=0){

TanksY[i] = Integer.parseInt(br.readLine());

System.out.println("TanksY" + TanksY[i]);

}else{

TanksX[i] = Integer.parseInt(br.readLine());

System.out.println("TanksX" + TanksX[i]);

}

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally {

try {

br.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

//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 ets = new Vector(); public static Vector getEts() {

return ets;

}

public static void setEtss(Vector 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;

for(int j = 1 ; j < et.ss.size(); j++){

shot s = et.ss.get(j);

ShotsX[j] = s.x;

ShotsY[j] = s.y;

}

}

for(int i = 0 ; i < hero.ss.size(); i++ ){ shot s = hero.ss.get(i);

HeroShotsX[i] = s.x ;

HeroShotsY[i] = s.y;

}

BufferedWriter bw = null;

BufferedWriter bw1 = null ;

try {

bw = new BufferedWriter(new FileWriter("d:\\aa\\TanksX.txt"));

for(int i = 0 ; i < enSize ; i ++){

bw.write(TanksX[i] + "\r\n");

bw.write(TanksY[i] + "\r\n");

}

bw1 = new BufferedWriter(new FileWriter("d:\\aa\\KeepRecoding.txt")); bw1.write((20 - getEnNum()) + "\r\n" );

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally {

try {

bw1.close();

bw.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

private static int enNum = 5;

public static int getEnNum() {

return enNum;

}

public static void setEnNum(int enNum) {

Recoder.enNum = enNum;

}

public static int getMyLife() {

return myLife;

}

public static void setMyLife(int myLife) {

Recoder.myLife = myLife;

}

private static int myLife = 3;

private static BufferedReader br = null;

public static void getRecording(){

try {

br = new BufferedReader(new FileReader("d:\\aa\\KeepRecoding.txt")); String n ;

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

String a = n;

enNum = 20 - Integer.parseInt(n);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally {

try {

br.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

private static BufferedWriter bw = null;

public static void KeepRecording (){

try {

bw = new BufferedWriter(new FileWriter("d:\\aa\\KeepRecoding.txt")); bw.write((20 - getEnNum()) + "\r\n" );

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

try {

bw.close();//先开后关

//new FileWriter("d:\\aa\\KeepRecoding.txt").close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

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 ss = new Vector();

Vector ets = new Vector();

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;

}

}

if(et.direct == 2 || et.direct == 3){//左或右

if((this.x>=et.x && this.x <= et.x + 30//第一个点x在内

&& this.y>=et.y && this.y <= et.y + 20)//第一个点y在内

||(this.x + 20>=et.x && this.x+ 20 <= et.x + 30//第二个点x在内&& this.y >=et.y && this.y <= et.y + 20)//第二个点y在内

韩顺平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 ;

坦克大战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

坦克大战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);

毕业设计论文 基于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写的坦克大战简易版

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程序开发实训》综合实训报告

《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的网络版坦克大战游戏设计_毕业设计

伊犁师范学院 本科生毕业论文(设计) 论文题目:基于Java的网络版坦克大战游戏设计

基于Java的网络版坦克大战游戏设计 (伊犁师范学院计算机科学系06-2班,新疆伊宁市 835000) 摘要:本设计采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。运行程序后允许用户选择执行选项菜单。在开始游戏后,启动服务器和客户端,对背景的所有物体进行绘图。在主程序运行的线程中,画面刷新将以一定的频率采用双缓冲技术对屏幕重绘,实时反映整个游戏的进行状态。用户控制的坦克运行在主线程中,随屏幕刷新的频率而移动。坦克将在游戏开始时进行初始化,然后将坦克绘制在地图的上层。本设计主要实现的功能是让坦克移动并能够智能的打出炮弹,躲避子弹,炸毁对方坦克。能够支持网络对战和单机对战两种模式。 关键词:面向对象;坦克大战;网络游戏;Java;Socket 类 中图分类号:TP311.1 目录

摘要 ......................................................................... 第1章前言.. (1) 1.1游戏设计的需求分析 (1) 1.1.1国内外电子网络游戏的现状 (1) 1.1.2本系统的现实意义 (1) 1.1.3本系统和其他开发游戏区别 (2) 1.2开发技术概述 (2) 1.2.1J AVA、C语言、C++三种主流编程技术比较 (2) 1.3本章小结 (2) 第2章相关技术理论 (3) 2.1系统运行环境 (3) 2.1.1系统运行的软件环境 (3) 2.1.2系统运行的硬件环境 (3) 2.2相关理论 (3) 2.2.1关于E CLIPSE的介绍 (3) 2.2.2J2SE框架 (3) 2.2.3联机通信机制 (4) 2.2.4J AVA图形编程 (5) 2.3本章小结 (5) 第3章系统设计 (5) 3.1系统可行性分析 (6) 3.1.1技术可行性 (6) 3.1.2经济可行性 (6) 3.1.3操作可行性 (6) 3.2系统需求分析 (6) 3.2.1在人机对战模式下实现的功能 (6) 3.2.2在网络对战模式下实现的功能 (6) 3.3系统功能设计 (6) 3.3.1坦克大战总体功能设计 (7)

坦克大战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);

相关文档
最新文档