java课程设计之坦克大战

本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下

环境要求:

  • 操作系统:Windows 10
  • JAVA虚拟机:JDK1.8以上
  • 开发环境:Eclipse(4.5以上)

功能提示:

1.游戏要有图形用户界面,界面能够反映游戏所有的细节。
2.界面中要有坦克,墙,树林,河流。
3.界面中要有一个“家”,“家”被攻击中则输了游戏。
4.坦克分两种,敌方和我方。
5.墙也分为两种,可以穿透的普通墙,不可以穿透的铁墙。
6.树和河流均只有一种,树林坦克可以通过。
7.坦克可以发射子弹,敌我方的子弹属性一样。
8.我方子弹可以杀死敌方坦克,敌方子弹也可以杀死我方坦克,但需要多枪子弹才可以杀死。
9.敌方之间不可以杀死对方。
10.子弹击中坦克要有爆炸,但击中墙不能爆炸。
11.我方可以吃血包增加生命。
12.游戏可以暂停,重新开始,游戏帮助等功能。
13.游戏级别分别为:级别1、级别2、级别3、级别4。

需求分析:

  • 设计一个图形用户界面,将所有游戏的元素都能在此用于界面上表现出来,界面能够接受用户的操作,具有人机交互功能。用户可以选择重新开始游戏,退出游戏,暂停游戏和查找游戏帮助。
  • 界面中包含坦克,树,河流,阻挡墙和游戏用户所要保护的“家”。
  • 坦克:坦克分为两种,敌方坦克和用户控制的坦克。用户方和敌方坦克均可以发射子弹,可以改变路径的行走,且在行走过程中遇到墙等阻碍物和游戏边界时要改变方向,而不能一直顶着障碍物不放。坦克之间不能穿越,碰撞到后自动调换方向。
  • 树:界面中要包括树林,作为遮掩物体和修饰物体,以便增加游戏的元素,使得游戏更加贴切人性化。树的数目不限,以游戏整体界面清晰美观来决定数目。
  • 河流:界面中要包括河流,河流作用与树林相同,同样河流的数目不限,以游戏界面整体美观度来决定数目。
  • 墙:墙体分为两种,普通的墙和铁墙,普通的墙在受到子弹袭击时会损坏,而铁墙可以阻碍子弹的穿越。两方的坦克均不能穿越两种墙体,但都可以摧毁普通墙体。普通墙体的数目配合其他元素合理安排,铁墙则不宜过多,不然游戏难度太低甚至因为坦克不能穿越铁墙而使得游戏无法进行下去。
  • “家”:用户方除了有一辆自己的坦克外还有一个要保护的家,家由普通墙体包围,家受到子弹攻击后游戏立即结束,用户方则输了本局游戏。
  • 子弹:子弹可以由敌方和用户方发射,且发射出去的子弹可以直线移动,直到碰到障碍物就消失,子弹可以穿越树林和河流。敌方坦克受到一颗子弹攻击会爆炸从而导致死亡,死亡后坦克消失。用户方受到子弹攻击后会减少寿命,且受到四次攻击则死亡,此时如还有敌方坦克存在,则用户方输掉本次游戏。
  • 爆炸:当子弹射击到坦克身上时,要产生爆炸效果。
  • 方向:坦克和子弹都有方向,可以选择上下左右四个方向,且子弹的方向从属于坦克的方向。

效果如图所示:

主界面代码如下:

public TankClient() {
 // printable = false;
 // 创建菜单及菜单选项
 jmb = new MenuBar();
 jm1 = new Menu("游戏");
 jm2 = new Menu("暂停/继续");
 jm3 = new Menu("帮助");
 jm4 = new Menu("游戏级别");
 jm1.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体
 jm2.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体
 jm3.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体
 jm4.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体

 jmi1 = new MenuItem("开始新游戏");
 jmi2 = new MenuItem("退出");
 jmi3 = new MenuItem("暂停");
 jmi4 = new MenuItem("继续");
 jmi5 = new MenuItem("游戏说明");
 jmi6 = new MenuItem("级别1");
 jmi7 = new MenuItem("级别2");
 jmi8 = new MenuItem("级别3");
 jmi9 = new MenuItem("级别4");
 jmi1.setFont(new Font("TimesRoman", Font.BOLD, 15));
 jmi2.setFont(new Font("TimesRoman", Font.BOLD, 15));
 jmi3.setFont(new Font("TimesRoman", Font.BOLD, 15));
 jmi4.setFont(new Font("TimesRoman", Font.BOLD, 15));
 jmi5.setFont(new Font("TimesRoman", Font.BOLD, 15));

 jm1.add(jmi1);
 jm1.add(jmi2);
 jm2.add(jmi3);
 jm2.add(jmi4);
 jm3.add(jmi5);
 jm4.add(jmi6);
 jm4.add(jmi7);
 jm4.add(jmi8);
 jm4.add(jmi9);

 jmb.add(jm1);
 jmb.add(jm2);

 jmb.add(jm4);
 jmb.add(jm3);

 jmi1.addActionListener(this);
 jmi1.setActionCommand("NewGame");
 jmi2.addActionListener(this);
 jmi2.setActionCommand("Exit");
 jmi3.addActionListener(this);
 jmi3.setActionCommand("Stop");
 jmi4.addActionListener(this);
 jmi4.setActionCommand("Continue");
 jmi5.addActionListener(this);
 jmi5.setActionCommand("help");
 jmi6.addActionListener(this);
 jmi6.setActionCommand("level1");
 jmi7.addActionListener(this);
 jmi7.setActionCommand("level2");
 jmi8.addActionListener(this);
 jmi8.setActionCommand("level3");
 jmi9.addActionListener(this);
 jmi9.setActionCommand("level4");

 this.setMenuBar(jmb);// 菜单Bar放到JFrame上
 this.setVisible(true);

 for (int i = 0; i < 10; i++) { // 家的格局
  if (i < 4)
  homeWall.add(new CommonWall(350, 580 - 21 * i, this));
  else if (i < 7)
  homeWall.add(new CommonWall(372 + 22 * (i - 4), 517, this));
  else
  homeWall.add(new CommonWall(416, 538 + (i - 7) * 21, this));

 }

 for (int i = 0; i < 32; i++) {
  if (i < 16) {
  otherWall.add(new CommonWall(220 + 20 * i, 300, this)); // 普通墙布局
  otherWall.add(new CommonWall(500 + 20 * i, 180, this));
  otherWall.add(new CommonWall(200, 400 + 20 * i, this));
  otherWall.add(new CommonWall(500, 400 + 20 * i, this));
  } else if (i < 32) {
  otherWall.add(new CommonWall(220 + 20 * (i - 16), 320, this));
  otherWall.add(new CommonWall(500 + 20 * (i - 16), 220, this));
  otherWall.add(new CommonWall(220, 400 + 20 * (i - 16), this));
  otherWall.add(new CommonWall(520, 400 + 20 * (i - 16), this));
  }
 }

 for (int i = 0; i < 20; i++) { // 金属墙布局
  if (i < 10) {
  metalWall.add(new MetalWall(140 + 30 * i, 150, this));
  metalWall.add(new MetalWall(600, 400 + 20 * (i), this));
  } else if (i < 20)
  metalWall.add(new MetalWall(140 + 30 * (i - 10), 180, this));
  else
  metalWall.add(new MetalWall(500 + 30 * (i - 10), 160, this));
 }

 for (int i = 0; i < 4; i++) { // 树的布局
  if (i < 4) {
  trees.add(new Tree(0 + 30 * i, 360, this));
  trees.add(new Tree(220 + 30 * i, 360, this));
  trees.add(new Tree(440 + 30 * i, 360, this));
  trees.add(new Tree(660 + 30 * i, 360, this));
  }

 }

 theRiver.add(new River(85, 100, this));

 for (int i = 0; i < 20; i++) { // 初始化20辆坦克
  if (i < 9) // 设置坦克出现的位置
  tanks.add(new Tank(150 + 70 * i, 40, false, Direction.D, this));
  else if (i < 15)
  tanks.add(new Tank(700, 140 + 50 * (i - 6), false, Direction.D,
   this));
  else
  tanks
   .add(new Tank(10, 50 * (i - 12), false, Direction.D,
    this));
 }

 this.setSize(Fram_width, Fram_length); // 设置界面大小
 this.setLocation(280, 50); // 设置界面出现的位置
 this
  .setTitle("坦克大战——(重新开始:R键 开火:F键)");

 this.addWindowListener(new WindowAdapter() { // 窗口监听关闭
   public void windowClosing(WindowEvent e) {
   System.exit(0);
   }
  });
 this.setResizable(false);
 this.setBackground(Color.GREEN);
 this.setVisible(true);

 this.addKeyListener(new KeyMonitor());// 键盘监听
 new Thread(new PaintThread()).start(); // 线程启动
 }

 public static void main(String[] args) {
 new TankClient(); // 实例化
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 经典再现 基于JAVA平台开发坦克大战游戏

    一.需求描述  1.功能性需求 在功能需求分析阶段,我们的主要任务是指定系统必须提供哪些服务,定义软件完成哪些功能,提供给那些人使用,功能需求是软件开发的一项基本需求,是需求分析必不可少的一部分.坦克大战是一款经典游戏了,本游戏学习了一些前辈们的经验,整体来说讲,游戏分为敌我双方,主要参与战斗的坦克有玩家控制,敌人坦克可以智能随机出现在屏幕上,并且移动,发射一定数量的子弹:玩家可以在规定的区域内随意移动坦克,当有子弹击中玩家时,玩家死亡,游戏结束:敌人坦克智能运行,敌方坦克由于需要具有一定智能性

  • 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; imp

  • java制作简单的坦克大战

    详情请参照注释,这里就不多废话了,实现一下儿时的经典而已. Blood.java package com.hkm.TankWar; import java.awt.*; /** * 血块类,我方坦克吃了可回血: * @author Hekangmin * */ public class Blood { private int x,y,w,h;//血块的位置和宽度高度: private TankWarClient tc; private int step=0;//纪录血块移动的步数: privat

  • java简单坦克大战制作代码

    利用Java语言中的集合.Swing.线程等知识点编写一个坦克大战游戏. (1) 画出敌我坦克的原理: 在坦克类里面有一个布尔类型变量good.用于判断坦克的阵营,在创建坦克对象时在Tank类的构造方法中传入good的值.在画坦克的时候判断good的值,区分敌我坦克的颜色: (2) 坦克运动的原理: 在坦克类里写入了监听键盘摁键的响应事件,对监听到的上下左右键进行记录,并合成坦克移动的八个方向的变量.之后对应每个方向的不同对坦克坐标x,y的值做响应的更改实现我方坦克的移动.而敌方坦克则自动移动,

  • java课程设计之坦克大战

    本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示: 1.游戏要有图形用户界面,界面能够反映游戏所有的细节. 2.界面中要有坦克,墙,树林,河流. 3.界面中要有一个"家","家"被攻击中则输了游戏. 4.坦克分两种,敌方和我方. 5.墙也分为两种,可以穿透的普通墙,不可以穿透的铁墙. 6.树和河流均只有一种,树林坦克

  • JAVA实现经典游戏坦克大战的示例代码

    目录 前言 主要设计 功能截图 代码实现 总结 前言 小时候大家都玩过坦克大战吧,熟悉的旋律和丰富的关卡陪伴了我们一整个寒暑假,还记得传说中的经典坦克大战 吗?那些怀旧的记忆,伴随着我们一起走过来的经典坦克大战,刚开始那战战兢兢,屡屡被敌人坦克击毁的情景历历在目.现在好了,再也不用担心敌人坦克了,可 以横冲直撞,横扫敌人坦克了.快哉!!! <坦克大战>游戏以坦克战斗为主题,用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对象思想. 主要需求 可以生成不同的地图,消灭地

  • java课程设计做一个多人聊天室(socket+多线程)

    目录 课设要求 相关知识点 1.服务端能够看到所有在线用户 2.服务端能够强制用户下线 3.客户端能够看到所有在线用户 4.客户端要求能够向某个用户发送消息 5.运用JDBC实现持久化存储用户信息 6.使用JSONObject对象封装数据 7.使用Maven构建管理项目 类图 项目框架 核心代码 1.maven配置文件pom.xml 2.服务器端Server.java 4.客户端注册界面Register.java 5.客户端聊天界面Chat.java 6.用户实体User.java 7.JDBC

  • java音乐播放器课程设计

    一.课程设计目的 1.编程设计音乐播放软件,使之实现音乐播放的功能. 2.培养学生用程序解决实际问题的能力和兴趣. 3.加深java中对多媒体编程的应用. 二.课程设计的要求 利用学到的编程知识和编程技巧,要求学生: 1.系统设计要能完成题目所要求的功能,设计的软件可以进行简单的播放及其他基本功能. 2.编程简练,可用,尽可能的使系统的功能更加完善和全面 3.说明书.流程图要清楚. 三.课程设计内容 1.课程设计的题目及简介 音乐播放软件要求: 有图形界面,能播放MP3歌曲,有播放列表,前一首.

  • Java图书管理系统课程设计

    本文实例为大家分享了Java图书管理系统的具体代码,供大家参考,具体内容如下 大二上学期做的一个Java课程设计,总分为四个Java文件,AllBook,AllBorrow,AllStudent,Tushu. 本系统是一个面向图书馆的管理系统,具有一定的实用性.它主要完成了图书的基本操作功能,全校学生信息的相关基本操作,以及对图书的借阅归还管理.本系统采用当前流行的面向对象的JAVA语言开发工具eclipse来完成整个系统的设计.系统在设计过程中不可避免地遇到了各种各样的问题,由于整个系统完全都

  • JavaSwing坦克大战游戏的设计和实现

    目录 需求分析: 功能设计: 具体设计: 图形用户界面 界面中的元素 游戏截图: 还记得传说中的经典90坦克大战吗?那些怀旧的记忆,伴随着我们一起走过来的经典坦克大战,刚开始那战战兢兢,屡屡被敌人坦克击毁的情景历历在目.现在好了,再也不用担心敌人坦克了,可以横冲直撞,横扫敌人坦克了.作为程序员的我刚好可以利用所学的Java相关知识来完成一个坦克大战游戏.一起来看看是如何设计完成的吧. 需求分析: 首先游戏要有图形用户界面,界面能够反映游戏所有的细节. 界面中要有坦克,墙,树林,河流. 界面中要有

  • Java编写实现坦克大战小游戏

    本文实例为大家分享了Java实现坦克大战小游戏的具体代码,供大家参考,具体内容如下 创作背景:n年前的学期末课题设计,从b站上学的,一个代码一个代码敲出来的. 小游戏介绍: 红色坦克是我们的操纵坦克,黑色是敌人坦克.上下左右键控制坦克移动方向按ctrl键发射炮弹红色坦克可以穿墙,黑色不可以 具体页面如下: 奉上全部源代码: Tank.java import java.awt.*; import java.awt.event.*; import java.util.*; public class

随机推荐