本篇文章主要介绍了Java版坦克大战游戏源码示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

整理文档,搜刮出一个Java版坦克大战游戏的代码,稍微整理精简一下做下分享。

package tankwar;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.io.File;

import java.io.FileInputStream;

import java.util.ArrayList;

import java.util.Random;

import javax.swing.BorderFactory;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JPanel;

import tankwar.Tank.Direction;

import barrier.EnemyBorn;

import barrier.Gold;

import barrier.Home;

import barrier.Iron;

import barrier.SelfBorn;

import barrier.Wall;

/**

* Java学习交流QQ群:589809992 我们一起学Java!

*/

public class TankWar implements KeyListener {

static boolean TIMEOUT = false;

private JFrame f;

private JPanel gamePanel;

private PanelShow messgePanel;

private myPanel p;

private Tank myTank;

public static final int AREA_WIDTH = 830;

public static final int AREA_HEIGHT = 800;

private ArrayList missles = new ArrayList();

private ArrayList allTanks = new ArrayList();

private ArrayList booms = new ArrayList();

private ArrayList walls = new ArrayList();

private ArrayList irons = new ArrayList();

private ArrayList golds = new ArrayList();

private ArrayList items = new ArrayList();

private ArrayList enemyBorns = new ArrayList();

private SelfBorn selfBorn;

private Home home;

private Tank enemyTank;

private Random r;

private ImageIcon backGround;

private final String map;

private int tankMax;

private boolean over = false;

private static int selfMax = 3;

private boolean win;

private boolean flash = false;

private TankWar tw = this;

static int SCORE = 0;

private final JFrame mainF;

private int style;

public TankWar(String map, int tankMax, JFrame mainF, int style)

throws Exception {

this.map = map;

this.tankMax = tankMax;

this.mainF = mainF;

this.style = style;

init();

}

private void init() {

f = new JFrame("坦克大战 V3.0");

gamePanel = new JPanel(null);

p = new myPanel();

p.setBackground(Color.WHITE);

r = new Random();

messgePanel = new PanelShow();

initMap(new File("map/" + map));

try {

myTank = new Tank(selfBorn.getX(), selfBorn.getY(), true, allTanks,

walls, irons, golds, missles, home, booms, style);

} catch (Exception e1) {

}

myTank.setDir(Direction.U);

allTanks.add(myTank);

addTank();

try {

backGround = new ImageIcon(

TankWar.class.getResource("/pic/whiteback.jpg"));

} catch (Exception e) {

}

p.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.WHITE));

p.setSize(AREA_WIDTH, AREA_HEIGHT);

messgePanel.setBounds(AREA_WIDTH, 0, 200, AREA_HEIGHT);

gamePanel.add(messgePanel);

gamePanel.add(p);

f.add(gamePanel);

f.setBounds(0, 0, AREA_WIDTH + 200, AREA_HEIGHT);

f.setDefaultCloseOperation(3);

f.setResizable(true);

f.setFocusable(true);

f.addKeyListener(this);

f.setVisible(true);

new Thread(new Runnable() {

public void run() {

while (!over) {

if (!myTank.isLive()) {

selfMax--;

if (selfMax < 0) {

f.removeKeyListener(tw);

over = true;

win = false;

break;

} else {

myTank.setLevel(1);

myTank.setX(selfBorn.getX());

myTank.setY(selfBorn.getY());

myTank.setDir(Direction.U);

myTank.setHp(50);

myTank.setLive(true);

}

}

if (tankMax <= 0 && allTanks.size() == 1) {

f.removeKeyListener(tw);

over = true;

win = true;

}

if (!home.isLive()) {

f.removeKeyListener(tw);

over = true;

win = false;

}

p.repaint();

myTank.move();

for (int i = 1; i < allTanks.size(); i++) {

allTanks.get(i).move();

allTanks.get(i).setNoFire(myTank.getNoFire() + 1);

// if(allTanks.get(i).getX()%5==0&&allTanks.get(i).getY()%5==0)

aI(allTanks.get(i));

}

if (allTanks.size() <= enemyBorns.size() + 1)

addTank();

myTank.setNoFire(myTank.getNoFire() + 1);

messgePanel.setEnemyCount(tankMax);

messgePanel.setSelfCount(selfMax);

messgePanel.setScore(SCORE);

if (SCORE % 500 == 0) {

SCORE += 100;

Item item = new Item(allTanks, booms, irons, home);

items.add(item);

item.start();

}

try {

Thread.sleep(30);

} catch (InterruptedException e) {

}

}

over();

}

}).start();

}

private class myPanel extends JPanel {

/**

*

*/

private static final long serialVersionUID = 4408440723797225328L;

@Override

public void paintComponent(Graphics g) {

super.paintComponent(g);

g.drawImage(backGround.getImage(), 0, 0, null);

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

walls.get(j).draw(g);

}

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

irons.get(j).draw(g);

}

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

golds.get(j).draw(g);

}

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

enemyBorns.get(j).draw(g);

}

home.draw(g);

selfBorn.draw(g);

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

allTanks.get(j).drawTank(g);

}

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

irons.get(j).draw(g);

}

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

missles.get(i).drawMissle(g);

if (!missles.get(i).isLive())

missles.remove(i);

}

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

if (booms.get(i).isLive())

booms.get(i).drawBoom(g);

else

booms.remove(i);

}

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

if (!items.get(j).isLive()) {

items.remove(j);

continue;

}

items.get(j).draw(g);

}

if (over)

drawOver(g);

messgePanel.repaint();

}

}

@Override

public void keyTyped(KeyEvent e) {

// TODO Auto-generated method stub

}

@Override

public void keyPressed(KeyEvent e) {

if (over) {

if (e.getKeyCode() == KeyEvent.VK_F1) {

over = false;

missles.clear();

allTanks.clear();

booms.clear();

walls.clear();

irons.clear();

golds.clear();

enemyBorns.clear();

try {

init();

} catch (Exception e1) {

}

} else {

f.setVisible(false);

mainF.setSize(800, 800);

mainF.setVisible(true);

}

} else if (e.getKeyCode() == KeyEvent.VK_SPACE) {

myTank.fire();

} else {

myTank.keyPress(e);

}

}

@Override

public void keyReleased(KeyEvent e) {

myTank.keyReleased(e);

}

public void aI(Tank tank) {

if (TIMEOUT) {

tank.setUp(false);

tank.setLeft(false);

tank.setDown(false);

tank.setRight(false);

return;

}

if (r.nextInt(40) == 0)

tank.fire();

if (r.nextInt(10) == 0) {

if (tank.getX() >= myTank.getX()

&& tank.getX() <= myTank.getX() + Tank.SIZE

&& tank.getY() > myTank.getY()) {

tank.setUp(true);

tank.setLeft(false);

tank.setDown(false);

tank.setRight(false);

tank.setDir(Direction.U);

return;

} else if (tank.getX() >= myTank.getX()

&& tank.getX() <= myTank.getX() + Tank.SIZE

&& tank.getY() < myTank.getY()) {

tank.setUp(false);

tank.setLeft(false);

tank.setDown(true);

tank.setRight(false);

tank.setDir(Direction.D);

return;

}

else if (tank.getX() > myTank.getX()

&& tank.getY() >= myTank.getY()

&& tank.getY() <= myTank.getY() + Tank.SIZE) {

tank.setUp(false);

tank.setLeft(true);

tank.setDown(false);

tank.setRight(false);

tank.setDir(Direction.L);

return;

} else if (tank.getX() < myTank.getX()

&& tank.getY() >= myTank.getY()

&& tank.getY() <= myTank.getY() + Tank.SIZE) {

tank.setUp(false);

tank.setLeft(false);

tank.setDown(false);

tank.setRight(true);

tank.setDir(Direction.R);

return;

}

}

if (tank.getX() <= 0) {

tank.setUp(false);

tank.setLeft(false);

tank.setDown(false);

tank.setRight(true);

tank.setDir(Direction.R);

}

if (tank.getY() <= 0) {

tank.setUp(false);

tank.setLeft(false);

tank.setDown(true);

tank.setRight(false);

tank.setDir(Direction.D);

}

if (tank.getX() >= AREA_WIDTH - Tank.SIZE) {

tank.setUp(false);

tank.setLeft(true);

tank.setDown(false);

tank.setRight(false);

tank.setDir(Direction.L);

}

if (tank.getY() >= AREA_HEIGHT - Tank.SIZE) {

tank.setUp(true);

tank.setLeft(false);

tank.setDown(false);

tank.setRight(false);

tank.setDir(Direction.U);

} else if (r.nextInt(300) == 1) {

tank.setUp(true);

tank.setLeft(false);

tank.setDown(false);

tank.setRight(false);

tank.setDir(Direction.U);

}

else if (r.nextInt(300) == 2) {

tank.setUp(false);

tank.setLeft(true);

tank.setDown(false);

tank.setRight(false);

tank.setDir(Direction.L);

} else if (r.nextInt(300) == 3) {

tank.setUp(false);

tank.setLeft(false);

tank.setDown(true);

tank.setRight(false);

tank.setDir(Direction.D);

} else if (r.nextInt(300) == 4) {

tank.setUp(false);

tank.setLeft(false);

tank.setDown(false);

tank.setRight(true);

tank.setDir(Direction.R);

}

}

public void initMap(File file) {

try {

FileInputStream read = new FileInputStream(file);

for (int i = 0; i < AREA_HEIGHT / 50; i++) {

for (int j = 0; j < AREA_WIDTH / 50; j++) {

switch (read.read()) {

case 1:

walls.add(new Wall(j * 50, i * 50));

break;

case 2:

irons.add(new Iron(j * 50, i * 50));

break;

case 3:

golds.add(new Gold(j * 50, i * 50));

break;

case 4:

selfBorn = new SelfBorn(j * 50, i * 50);

break;

case 5:

enemyBorns.add(new EnemyBorn(j * 50, i * 50));

break;

case 6:

home = new Home(j * 50, i * 50);

break;

}

}

}

read.close();

} catch (Exception e) {

}

;

}

public void addTank() {

if (tankMax <= 0)

return;

for (int i = allTanks.size(); i < enemyBorns.size() + 1; i++) {

try {

int temp = r.nextInt(enemyBorns.size());

enemyTank = new Tank(enemyBorns.get(temp).getX(), enemyBorns

.get(temp).getY(), false, allTanks, walls, irons,

golds, missles, home, booms, r.nextInt(3) + 1);

} catch (Exception e) {

e.printStackTrace();

}

enemyTank.setDir(Direction.D);

enemyTank.setDown(true);

allTanks.add(enemyTank);

tankMax--;

if (tankMax <= 0)

return;

}

}

public static void addMyTankLives() {

selfMax++;

}

private void over() {

for (int i = 0; i < AREA_HEIGHT / 50; i++) {

for (int j = 0; j < AREA_WIDTH / 50; j++) {

irons.add(new Iron(j * 50, i * 50));

p.repaint();

try {

Thread.sleep(5);

} catch (InterruptedException e) {

}

}

}

while (true) {

flash = !flash;

p.repaint();

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

}

f.addKeyListener(this);

}

}

private void drawOver(Graphics g) {

p.repaint();

g.setColor(Color.red);

g.setFont(new Font("Arial", 1, 100));

g.drawString("GAME OVER", 100, 200);

g.setFont(new Font("Arial", 2, 50));

if (win)

g.drawString("Congratulation! You Win!", 100, 400);

else

g.drawString("So Sorry, You Lose!", 100, 400);

if (flash) {

g.setFont(new Font("Arial", 2, 30));

g.setColor(Color.BLACK);

g.drawString("Press F1 to try again...,", 150, 500);

g.drawString("Press the other Key to Return the Title...,", 150,

600);

}

}

}

代码运行效果截图

坦克大战游戏java代码_Java实现坦克大战游戏的源码示例相关推荐

  1. 贪吃蛇游戏java代码_Java实现贪吃蛇游戏

    最近JAVA和JSwing上手练习了一下贪吃蛇,供大家参考,具体内容如下 欢迎交流和加入新的内容 用到了JSwing,下面是一些具体的思路 实现 * 蛇: 采用单链表记录首尾,整个蛇被分为lattic ...

  2. 扑克牌游戏java代码_java实现简易扑克牌游戏

    本文实例为大家分享了java实现扑克牌游戏的具体代码,供大家参考,具体内容如下 游戏功能描述 1.创建一副扑克牌: 包括四种花色:黑桃,红桃,梅花,方片 包括十三种点数:2-10,J,Q,K,A 2. ...

  3. 拼图游戏java代码_java设计:拼图游戏 完整源码

    //July/设计. //我对有的老师,很无语./06.04/. //Puzzle.java ----------------------------------------------------- ...

  4. java学生管理系统代码_java学生信息管理系统(附源码)

    一:   介绍 1:实现登录界面 2:实现主界面 有两种操作 一种是按钮操作  另外一种是SQL语句. 3:连接SQL server 2008 数据库 用到的软件及环境SQLserver2008,ec ...

  5. 2048 java代码_java实现的2048游戏完整实例

    本文实例讲述了java实现的2048游戏.分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: package awtDemo; import javax.swing.*; impor ...

  6. 蜘蛛纸牌 java代码_java实现蜘蛛纸牌游戏

    [实例简介] 用java技术实现windows自带的蜘蛛纸牌游戏 [实例截图] [核心代码] CardsGame └── CardsGame ├── bin │   └── com │   └── g ...

  7. 小学数学闯关游戏 java代码_Java语言实现小学数学练习

    package per.java.shejiti; import java.io.*; import java.util.ArrayList; import java.util.Collections ...

  8. 拼图java代码_Java制作智能拼图游戏原理及代码

    今天突发奇想,想做一个智能拼图游戏来给哄女友. 需要实现这些功能 第一图片自定义 第二宫格自定义,当然我一开始就想的是3*3 4*4 5*5,没有使用3*5这样的宫格. 第三要实现自动拼图的功能,相信 ...

  9. 弹球小游戏java代码_java实现简单的弹球游戏

    弹球游戏实现原理: 隔一定时间(小于1秒)重新绘制图像,因为Graphics类是一个抽象类,创建子类的时候需要把所有涉及的方法都得重写,所以这里使用的是创建Canvas的子类,只需要重写它的paint ...

  10. 弹球小游戏java代码_android 发射弹球小游戏 附完整源码下载

    [实例简介]android 弹球游戏制作 [实例截图]  [核心代码] package wyf.ytl; //声明包语句 public class BallGoThread extends Threa ...

最新文章

  1. 关于div的outline-offset属性和focus事件的接收
  2. AutoCAD VBA天圆地方的放样展开图
  3. java基础面试题之:String 类的常用方法都有那些?
  4. 在 ASP.NET 2.0 中创建 Web 应用程序主题(一)
  5. python selenium自动化框架_一文讲透!实现一个Python+Selenium的自动化测试框架如此简单!...
  6. Oracle ADF开发实战指南pdf
  7. PC-hosts 的使用 [可使电脑无法正常上网]
  8. Mac新手用户需要了解的14个Spotlight搜索技巧
  9. 智能优化算法:鹰栖息算法-附代码
  10. 科学计算机要用的电池是几号,科学的使用笔记本电池操作指南_硬件教程
  11. 计算机在资产管理中的应用,浅析计算机在学校固定资产管理中的应用
  12. win7快捷键_如何设置win7系统自带截图功能的快捷键?
  13. jupyter notebook代码无法运行
  14. rabbitmq 存入mysql_将RabbitMQ使用者数据保存到数据库中
  15. 【U8+】用友U8+16.1不自动删除历史的自动备份文件
  16. 【uniapp微信小程序组件】大转盘抽奖组件
  17. CF Buns (01背包问题)
  18. RAW,RGB,YUV简单理解
  19. 在WORD中批量修改图片大小
  20. 万字长文带你玩转2020全国大学生计算机技能应用大赛—C语言模考整理解析

热门文章

  1. 考研:无穷小微积分的不适症
  2. 蓝桥杯官网 试题 PREV-94 历届真题 矩阵计数【第十届】【决赛】【研究生组】【C++】解法
  3. Webtrends的跨域访客跟踪机制
  4. python开发grasshopper插件_Rhino_Grasshopper_Python 开发的正确姿势
  5. eclipse 如何查看Java源码
  6. VS2013 密钥 – 所有版本
  7. 实用小工具-动软代码生成器
  8. 虚化4独立游戏开发第一章:策划案
  9. 【Java】JavaSocket编程开发聊天室-总览与部分客户端界面
  10. 磁测仪高斯计与特斯拉计、磁通计的区别