坦克大战游戏java代码_Java实现坦克大战游戏的源码示例
本篇文章主要介绍了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实现坦克大战游戏的源码示例相关推荐
- 贪吃蛇游戏java代码_Java实现贪吃蛇游戏
最近JAVA和JSwing上手练习了一下贪吃蛇,供大家参考,具体内容如下 欢迎交流和加入新的内容 用到了JSwing,下面是一些具体的思路 实现 * 蛇: 采用单链表记录首尾,整个蛇被分为lattic ...
- 扑克牌游戏java代码_java实现简易扑克牌游戏
本文实例为大家分享了java实现扑克牌游戏的具体代码,供大家参考,具体内容如下 游戏功能描述 1.创建一副扑克牌: 包括四种花色:黑桃,红桃,梅花,方片 包括十三种点数:2-10,J,Q,K,A 2. ...
- 拼图游戏java代码_java设计:拼图游戏 完整源码
//July/设计. //我对有的老师,很无语./06.04/. //Puzzle.java ----------------------------------------------------- ...
- java学生管理系统代码_java学生信息管理系统(附源码)
一: 介绍 1:实现登录界面 2:实现主界面 有两种操作 一种是按钮操作 另外一种是SQL语句. 3:连接SQL server 2008 数据库 用到的软件及环境SQLserver2008,ec ...
- 2048 java代码_java实现的2048游戏完整实例
本文实例讲述了java实现的2048游戏.分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: package awtDemo; import javax.swing.*; impor ...
- 蜘蛛纸牌 java代码_java实现蜘蛛纸牌游戏
[实例简介] 用java技术实现windows自带的蜘蛛纸牌游戏 [实例截图] [核心代码] CardsGame └── CardsGame ├── bin │ └── com │ └── g ...
- 小学数学闯关游戏 java代码_Java语言实现小学数学练习
package per.java.shejiti; import java.io.*; import java.util.ArrayList; import java.util.Collections ...
- 拼图java代码_Java制作智能拼图游戏原理及代码
今天突发奇想,想做一个智能拼图游戏来给哄女友. 需要实现这些功能 第一图片自定义 第二宫格自定义,当然我一开始就想的是3*3 4*4 5*5,没有使用3*5这样的宫格. 第三要实现自动拼图的功能,相信 ...
- 弹球小游戏java代码_java实现简单的弹球游戏
弹球游戏实现原理: 隔一定时间(小于1秒)重新绘制图像,因为Graphics类是一个抽象类,创建子类的时候需要把所有涉及的方法都得重写,所以这里使用的是创建Canvas的子类,只需要重写它的paint ...
- 弹球小游戏java代码_android 发射弹球小游戏 附完整源码下载
[实例简介]android 弹球游戏制作 [实例截图] [核心代码] package wyf.ytl; //声明包语句 public class BallGoThread extends Threa ...
最新文章
- 关于div的outline-offset属性和focus事件的接收
- AutoCAD VBA天圆地方的放样展开图
- java基础面试题之:String 类的常用方法都有那些?
- 在 ASP.NET 2.0 中创建 Web 应用程序主题(一)
- python selenium自动化框架_一文讲透!实现一个Python+Selenium的自动化测试框架如此简单!...
- Oracle ADF开发实战指南pdf
- PC-hosts 的使用 [可使电脑无法正常上网]
- Mac新手用户需要了解的14个Spotlight搜索技巧
- 智能优化算法:鹰栖息算法-附代码
- 科学计算机要用的电池是几号,科学的使用笔记本电池操作指南_硬件教程
- 计算机在资产管理中的应用,浅析计算机在学校固定资产管理中的应用
- win7快捷键_如何设置win7系统自带截图功能的快捷键?
- jupyter notebook代码无法运行
- rabbitmq 存入mysql_将RabbitMQ使用者数据保存到数据库中
- 【U8+】用友U8+16.1不自动删除历史的自动备份文件
- 【uniapp微信小程序组件】大转盘抽奖组件
- CF Buns (01背包问题)
- RAW,RGB,YUV简单理解
- 在WORD中批量修改图片大小
- 万字长文带你玩转2020全国大学生计算机技能应用大赛—C语言模考整理解析