还是采用上学期学习到的设计模式,抽点时间写下这个游戏,游戏逻辑部分先写简单一点的,主要想加深对java设计、模块化等方面的理解。

首先先写Element包下各个元素的类:包括子弹、坦克、树木、河流、家、墙、血包 以及这些元素的基类。

其中基类包含这些类的共同属性和方法:坐标x、y , 一组图片 , 大小width、height , 绘制方法draw() , 获取矩形方法getRec()【用来简单判断是否发生碰撞】等。

树木、河流、墙不用多加属性或者重写什么方法 , 家的话需要重写draw方法,画家的同时顺便把家周围的一圈墙也画进去。

子弹要新加入的属性、方法有:速度、方向、类型(敌人的或者自己的...待确定)、是否存在、以及加入方向与图片的映射集合map等。判断是否出界,移动,绘制等方法。

血包的话要加入移动方法move(),比较简便的做法是可以选定几个坐标,然后在这几个坐标中随机移动。

坦克类:待完成中......

其实移动方法应该写成接口......

代码:

package element;import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;public class BasicElement {public static int width;public static int height;int x,y;public static Image[] images = null;public BasicElement(int x,int y,Image[] images) {this.x = x;this.y = y;this.images  = images;}public void draw(Graphics g) {g.drawImage(images[0],x,y,null);}public Rectangle getRect() {return new Rectangle(x,y,width,height);}public static int getWidth() {return width;}public static void setWidth(int width) {BasicElement.width = width;}public static int getHeight() {return height;}public static void setHeight(int height) {BasicElement.height = height;}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 static Image[] getImages() {return images;}public static void setImages(Image[] images) {BasicElement.images = images;}}
package element;import java.awt.Graphics;
import java.awt.Image;
import java.util.Random;public class BloodBag extends BasicElement {public BloodBag(int x, int y, Image[] images) {super(x, y, images);// TODO Auto-generated constructor stub}public int step = 0;public boolean isExist = false;public static Random r;public int[][] position = { { 155, 196 }, { 500, 58 }, { 80, 340 },{ 99, 199 }, { 345, 456 }, { 123, 321 }, { 258, 413 } };@Overridepublic void draw(Graphics g) {// TODO Auto-generated method stubif(r.nextInt(100) > 98) {isExist = true;move();}if(!isExist) {return ;}g.drawImage(this.images[0], x, y, null);}private void move() {// TODO Auto-generated method stubstep++;if(step==position.length) {step = 0;}this.x = position[step][0];this.y = position[step][1];}public boolean isExist() {return isExist;}public void setExist(boolean isExist) {this.isExist = isExist;}}
package element;import java.awt.Graphics;
import java.awt.Image;
import java.util.HashMap;
import java.util.Map;public class Bullet extends BasicElement{public String dir;public static int speed;public boolean isExist = false;public String type;private static Map<String, Image> map = new HashMap<String, Image>();static {map.put("L", images[0]);map.put("U", images[1]);map.put("R", images[2]);map.put("D", images[3]);}public Bullet(int x, int y, Image[] images, String dir,String type) {super(x, y, images);// TODO Auto-generated constructor stubthis.dir = dir;this.type = type;}public void move() {switch(dir) {case "L":x-=speed;break;case "U":y-=speed;break;case "R":x+=speed;break;case "D":y+=speed;break;default:break;}}@Overridepublic void draw(Graphics g) {// TODO Auto-generated method stubg.drawImage(map.get(dir),x,y,null);move();}public String getDir() {return dir;}public void setDir(String dir) {this.dir = dir;}public static int getSpeed() {return speed;}public static void setSpeed(int speed) {Bullet.speed = speed;}public boolean isExist() {return isExist;}public void setExist(boolean isExist) {this.isExist = isExist;}public String getType() {return type;}public void setType(String type) {this.type = type;}public boolean outOfBounds() {if(x<0 || y<0 || x>FrameWidth || y>FrameHeight)return true;return false;}}
package element;import java.awt.Image;public class CommonWall extends BasicElement {public CommonWall(int x, int y, Image[] images) {super(x, y, images);// TODO Auto-generated constructor stub}}
package element;import java.awt.Graphics;
import java.awt.Image;public class Home extends BasicElement {public Home(int x, int y, Image[] images) {super(x, y, images);// TODO Auto-generated constructor stub}public boolean isExist = false;@Overridepublic void draw(Graphics g) {// TODO Auto-generated method stubg.drawImage(this.images[0],x,y,null);for(int i = 0;i<homeWall.size;i++) {CommonWall w = homeWall.get(i);w.draw(g);}}}
package element;import java.awt.Image;public class MetalWall extends BasicElement {public MetalWall(int x, int y, Image[] images) {super(x, y, images);// TODO Auto-generated constructor stub}}
package element;import java.awt.Image;public class River extends BasicElement{public River(int x, int y, Image[] images) {super(x, y, images);// TODO Auto-generated constructor stub}}
package element;import java.awt.Image;public class Tree extends BasicElement{public Tree(int x, int y, Image[] images) {super(x, y, images);// TODO Auto-generated constructor stub}}

基于Java坦克大战小游戏设计(1)相关推荐

  1. 基于Java坦克大战小游戏设计 (2)

    接下来继续完善element下物体类,以及添加有关整体游戏进程.配置.绘画相关的类. game包:GameRunThread线程用来开始并处理游戏运行中出现的各种事件,继承thread类. publi ...

  2. 一小时制作java坦克大战小游戏

    <坦克大战>是由日本南梦宫Namco游戏公司开发的一款平面射击游戏,于1985年发售.游戏以坦克战斗及保卫基地为主题,属于策略型联机类. 同时也是FC平台上少有的内建关卡编辑器的几个游戏之 ...

  3. 基于java的俄罗斯方块小游戏设计(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 题 目          小游戏开发 摘    要     俄罗斯方块是我们最常见的游戏之一,该 ...

  4. python小游戏毕设 坦克大战小游戏设计与实现 (源码)

    文章目录 0 项目简介 1 游戏介绍 2 实现效果 3 开发工具 3.1 环境配置 3.2 Pygame介绍 4 具体实现 4.1 实现游戏主循环 4.2 制作游戏开始和结束界面 5 最后 0 项目简 ...

  5. 【JAVA程序设计】基于JAVA的坦克大战小游戏--入门级小游戏

    基于JAVA的坦克大战小游戏--入门级小游戏 零.项目获取 一.项目简介 二.开发环境 三.游戏玩法 四.运行截图 零.项目获取 获取方式(点击下载):是云猿实战 项目经过多人测试运行,可以确保100 ...

  6. Java实现的经典坦克大战小游戏

    Java实现的经典坦克大战小游戏 先看一下游戏结构: 有点多,没有耐心的可以不用看,这里先给出链接吧! 云链接:经典坦克大战 提取码:s9ai 这里就不介绍功能了,贴了一张游戏运行的截图,具体的功能自 ...

  7. java毕业设计——基于java+J2ME的堡垒游戏设计与实现(毕业论文+程序源码)——堡垒游戏

    基于java+J2ME的堡垒游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2ME的堡垒游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. 文章目录: 基于ja ...

  8. 基于c语言的小游戏,--基于C语言的小游戏设计.doc

    --基于C语言的小游戏设计.doc 级丌 密公 本科生毕业(学位)论文 基于c语言的爪游软设计 李俊佶 (2009061322) TOC \o "1-5" \h \z 指导教师姓名 ...

  9. html实现经典坦克大战小游戏

    文章目录 1.设计来源 1.1 游戏主界面 1.2 游戏界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/w ...

最新文章

  1. mysql page_一文理解MySQL中的page页
  2. java简述垃圾回收原理及算法_Java垃圾回收原理和算法
  3. 基于深度卷积神经网络的目标检测研究综述
  4. AndroidStudio 3.4更新了啥?(转载)
  5. 一题多解(二)—— 循环队列为空(满)的判断
  6. 25. 自定义Git
  7. 利用VBB仿真——实现摇杆控制流水灯
  8. Docker 从入门到实战视频教程(15 个视频)
  9. Android实现多国语言适配:app名称随系统的语言而更换
  10. android 计时器工具类,Android实现计时器功能
  11. impala的优化策略:广播,hash与straight_join
  12. [c#]使用Fleck实现简单的WebSocket含兼容低版本IE
  13. 博士申请 | 新加坡南洋理工大学尹旬元老师招收机器学习方向全奖博士/博后
  14. C/C++基础 isfinite()函数
  15. 通过 InnoSetup 美化安装界面
  16. vscode 使用ES6调试js
  17. Python爬虫爬取某小说网的教程(含全代码)#大佬勿喷
  18. 搜索引擎免费登录入口
  19. 高温超导体的平均场理论(t-j模型的slave波色平均场处理)
  20. 为什么是国际标准化组织是ISO而不是IOS

热门文章

  1. 2-vulnhub靶场,Earth
  2. 30岁html5,盘点适合30岁改行的5个职业,简单易上手!
  3. 打开键盘遮住View的问题解决方法-IOS开发
  4. 数据库系统课程设计——酒店房间预订系统
  5. 常用计算机存储器类型,计算机常用的辅存储器有哪些
  6. HNUCM 2020年湖南省大学生计算机程序设计竞赛第2场选拔赛
  7. 西邮Linux兴趣小组2022年纳新面试题解析
  8. 鸢尾花完整的python代码knn_knn实现鸢尾花分类
  9. 最讨厌的下属就是他不把领导放在眼里
  10. 不懂讨好领导,不会人情事故,也是种错吗?