Java原谅帽需求分析

如何分析

  1. 第一步 发现类(对象)
    - 人物-小丑(友方,敌方)
    - 子弹-帽子
    - 墙体
    - 爆炸物
  2. 第二步 发现属性
    - 小丑:宽 高 ,位置(x , y),移动速度
    - 帽子:宽 高 ,位置(x , y),移动速度
    - 墙体:宽 高 ,位置(x , y)
    - 爆炸物:宽 高 ,位置(x , y)
  3. 第三步 发现方法
    - 小丑(buffoon):
    移动
    攻击(发子弹)
    - 子弹(missile):
    移动
    - 子弹撞墙
    - 子弹撞边界
    - 墙体(wall):无行为
    - 爆炸物(explode):
    爆炸物消失
    注意:在java里万物皆对象
    ##. 难点

    1. 如何将图片加载到窗体里面
      第一步 背景图片加载 已完成
      人物–小丑加载 已完成
      发射物–帽子加载 已完成
      墙体加载 已完成
      爆炸物加载 已完成
    2. 窗体如何创建 已完成
    3. 子弹如何发射??键盘如何触发事件.
    4. 相关单词
      entity 实体
      util 工具

Java原谅帽大战源代码

设置背景图片路径,只加载一次,
Frame:构建框架

一. GameClient(游戏客户端)代码

1.设置只加载一次图片的路径

public class GameClient extends Frame {/常量定义背景图片的路径public static  final String Bg_Path="背景图片路径";//定义一个图片的静态变量private static Image image;//静态块只需要加载一次static{image= CommonUtils.getImage(Bg_Path);}}

2.设置main入口运行游戏

public class GameClient extends Frame {public static void main(String[] args) {GameClient gameClient=new GameClient();// 开始游戏gameClient.start();}}

3.添加开始游戏方法,独立显示窗体及标题

public class GameClient extends Frame {public void start(){System.out.println("游戏马上开始,请玩家做好准备");// TODO 游戏业务/**  设置标题* */this.setTitle("原谅帽大战");//让窗体显示出来this.setVisible(true);//设置窗体大小以及位置this.setBounds(200,200,1000,700);System.out.println("GAME OVER!");}}

4.需要图片在窗体上显示,所有需要画笔画出来,添加画笔方法

  • 方法一:在游戏客户端建立对象画笔
/*** 重写父类paint方法** Graphics 画笔类* @param g 画笔*/@Overridepublic class GameClient extends Frame {public void paint(Graphics g) {//画背景图g.drawImage(image,x,y,width,height,this);//画帽子g.drawImage(Missile.missileImage,310,80,30,30,this);//画横墙g.drawImage(Wall.wallHImage,300,100,100,20,this);g.drawImage(Wall.wallHImage,600,100,100,20,this);g.drawImage(Wall.wallHImage,300,400,100,20,this);g.drawImage(Wall.wallHImage,600,400,100,20,this);//竖墙g.drawImage(Wall.wallVImage,400,200,20,100,this);g.drawImage(Wall.wallVImage,600,200,20,100,this);//画人物g.drawImage(Buffoon.buffoonImage,300,100,50,50,this);//画爆炸物g.drawImage(Explode.explodeImage,200,100,50,50,this);}}
  • 方法二:在对象本类里面建立画笔方法
  • 首先在相关类里面定义游戏客户端以及无参和带参,然后定义自己的画画方法
  • 以小丑为例
 //游戏窗体属性 因为小丑要在窗体中画画private GameClient gameClient;//无参构造public Buffoon() {}//代参构造public Buffoon(int x, int y, GameClient gameClient) {this.x = y;this.y = y;this.width = 50;this.height = 50;this.speed = 5;this.gameClient=gameClient;}/** 小丑里有自己的画画方法*/public void paint(Graphics g){g.drawImage(buffoonImage,this.x,this.y,this.width,this.height,this.gameClient);}
  • 其次在游戏客户端创建小丑对象添加相关的参数
 //创建小丑private Buffoon buffoon=new Buffoon(400,400,this);
  • 最后在游戏客户端的paint()方法调用小丑画笔方法
@Overridepublic void paint(Graphics g) {//画人物buffoon.paint(g);}

二. CommonUtils(工具类)代码

public class CommonUtils {/*** 读取图片资源, 转变为Java对象 Image* @param imgPath  图片路径* @return Image对象*/public static Image getImage(String imgPath) {ImageIcon imageIcon = new ImageIcon(imgPath);return imageIcon.getImage();}
}

三. Entity(实体)代码

插入单个对象图片

public class Buffoon {//人物图片属性public static Image buffoonImage= CommonUtils.getImage("images/body/s-left.png");}

四. 移动方法

-以小丑为例

  • x为小丑横坐标位置,y为小丑纵坐标位置
  • ‘Left向左移动’ : x=x-this.speed;
  • 'Right向右’移动 : x=x+this.speed;
  • ‘Up向上移动’ : y=y-this.speed;
  • ‘Down向下移动’ : y=y+this.speed;
  • ‘UR东北方向移动’ : x=x+this.speed; y=y-this.speed;
  • ‘DR东南方向移动’ : x=x+this.speed; y=y+this.speed;
  • ‘UL西北方向移动’ : x=x-this.speed; y=y-this.speed;
  • ‘DL西南方向移动’ : x=x-this.speed; y=y+this.speed;
    五.效果图如下

    六. 人物动起来

    • 首先确定人物移动的方向位置
    • 再根据按键设置进行相应的移动
/** 人物移动* */public void move(String dir) {switch (dir){case "UP"://上this.y -= this.speed;break;case "RIGHT"://右this.x += this.speed;break;case "DOWN"://下this.y += this.speed;break;case "LEFT"://左this.x -= this.speed;break;case "RU"://右上this.x += this.speed;this.y -= this.speed;break;case "RD"://右下this.x +=  this.speed;this.y +=  this.speed;break;case "LU"://左上this.x-= this.speed;this.y-= this.speed;break;case "LD"://左下this.x-= this.speed;this.y+= this.speed;break;}}//键盘按下确定人物移动方向public void okDirPressed(int keyCode){//TODO 确定方向switch(keyCode){case KeyEvent.VK_UP:System.out.println("向上走");String dir="UP";//按向上方向赋值给小丑人物this.setDir(dir);buffoonImage=CommonUtils.getImage("images/body/s-left-up.png");up=true;break;case KeyEvent.VK_DOWN:System.out.println("向下走");dir="DOWN";//按向下方向赋值给小丑人物this.setDir(dir);buffoonImage=CommonUtils.getImage("images/body/s-left-down.png");down=true;break;case KeyEvent.VK_LEFT:System.out.println("向左走");dir="LEFT";//按向左方向赋值给小丑人物this.setDir(dir);buffoonImage=CommonUtils.getImage("images/body/s-left.png");left=true;break;case KeyEvent.VK_RIGHT:System.out.println("向右走");dir="RIGHT";//按向右方向赋值给小丑人物this.setDir(dir);buffoonImage=CommonUtils.getImage("images/body/s-right.png");right=true;break;case KeyEvent.VK_SPACE://打桩System.out.println("发子弹");Missile missile = this.fire();//将子弹放到子弹容器中this.missileList.add(missile);//看一看容器中有多少子弹System.out.println("this.missileList.size()" + this.missileList.size());}//判断用户拿到哪些键if (up&&right){System.out.println("右上走");this.setDir("RU");buffoonImage=CommonUtils.getImage("images/body/s-right-up.png");}if (right&&down){System.out.println("右下走");this.setDir("RD");buffoonImage=CommonUtils.getImage("images/body/s-right-down.png");}if (left&&up){System.out.println("左上走");this.setDir("LU");buffoonImage=CommonUtils.getImage("images/body/s-left-up.png");}if (left&&down){System.out.println("左下走");this.setDir("LD");buffoonImage=CommonUtils.getImage("images/body/s-left-down.png");}//人物移动 拿到人物移动的方向this.move(this.getDir());}

六.子弹运动起来

  • 与人物运动方向一致
  • 子弹发射的位置与人物的位置一致.所以方法返回值是子弹类型
public Missile fire(){return new Missile(this.x,this.y,this.dir,this.gameClient);}

七.消除人物边界
-子弹或者人物碰到背景边界停止运动

public void checkArea(){if (x<0){x=0;}if (y<0){y=0;}if (x>800){x=800;}if (y>450){y=450;}}

Java面向对象原谅帽相关推荐

  1. Java面向对象---原谅帽游戏

    作品展示 第一天:类(游戏端)继承Frame: 首先要创建一个方法去让游戏开始和结束 使用text执行这个游戏的方法(需要有游戏标题和游戏的界面) 创建一个背景图片变量(创建静态值static,只出现 ...

  2. java面向对象思想编写原谅帽小游戏 原谅帽游戏思路解析

    java面向对象思想编写原谅帽小游戏 原谅帽游戏思路解析: 面向对象思想 作品展示 类(游戏端)继承Frame: 首先要创建一个方法去让游戏开始和结束 使用text执行这个游戏的方法(需要有游戏标题和 ...

  3. 使用IDEA制作Java面向对象小游戏《原谅帽大作战》

    成果展示 制作思路 第1步:发现类(对象) 人物-小丑: Buffoon 子弹-帽子:Missile 墙体:Wall 爆炸物:Explode 第2步:发现属性 小丑:宽和高,位置(x,y),移动速度 ...

  4. 原谅帽大作战游戏程序

    原谅帽大作战 制作人:崔帅宽 时间:2020.11.10 一.如何创建原谅帽大作战的窗体: (1)先创建一个原谅帽的类包,然后创建:游戏客户端GameClinet类. /* 游戏客户端 */ publ ...

  5. java面向对象-------静态初始化块

    1.构造方法用于对象的初始化!静态初始化块,用于类的初始化操作,在静态初始化块中不能直接访问非static成员. package java面向对象; /** * 测试静态初始化块 */public c ...

  6. JAVA面向对象-----final关键字

    JAVA面向对象-–final关键字 1:定义静态方法求圆的面积 2:定义静态方法求圆的周长 3:发现方法中有重复的代码,就是PI,圆周率.1:如果需要提高计算精度,就需要修改每个方法中圆周率. 4: ...

  7. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  8. 12 Java面向对象之多态

    JavaSE 基础之十二 12 Java面向对象之多态 ① 多态的概念及分类 多态的概念:对象的多种表现形式和能力 多态的分类 1. 静态多态:在编译期间,程序就能决定调用哪个方法.方法的重载就表现出 ...

  9. 猫抓老鼠-Java面向对象特点梳理

    我们先设计一个猫抓老鼠的小游戏: ⊙猫和老鼠都有名字和体重两种属性,猫有抓老鼠的方法,对应的老鼠则有逃跑的方法. ⊙首先游戏的结果是猫抓住了老鼠或者老鼠逃跑了,对于这两种情况,我们用体重来区分,若猫的 ...

最新文章

  1. mac攻略(1) -- 简单配置php开发环境
  2. 微信翻译生日快乐的代码_微信「隐藏彩蛋」,你发现了没?
  3. NYOJ 115 城市平乱(图论Dijkstra)
  4. wps出现安装installer_判断本机是否安装Microsoft Office或者wps
  5. boost::hash_combine模块实现json哈希值的测试程序
  6. Django —— 模型层 —— QuerySet —— QuerySet方法参考
  7. 基于 Kong 和 Kubernetes 的 WebApi 多版本解决方案
  8. VS2005 ASP.NET2.0安装项目的制作(包括数据库创建、站点创建、IIS属性修改、Web.Config文件修改)
  9. mysql 安装、建库、导入导出数据
  10. MySQL8新增管理端口
  11. 3. jQuery 选择器
  12. python速学_【Python杂货铺】速学python基础
  13. vm虚拟服务器控制端,使用VMware虚拟机实现单主机双屏两人同时使用独立控制
  14. 走一波 程序员必备精品软件大全
  15. Python tkinter Canvas画布完全攻略
  16. Excel宏编程,给出2列进行去重合并
  17. SAP那些事-生产订单结算规则修改
  18. Python开发《外星人入侵》游戏项目,付详细代码和注释
  19. 个人免签码支付源码|服务监控模块强大后台功能全面
  20. DOM4J解析XML文档

热门文章

  1. Scrapy 2.6 Items 数据项定义、加载、传输使用指南
  2. repmat()函数用法
  3. 【研一小白的白话理解】pytorch-CycleGAN-and-pix2pix
  4. Vue之点击收藏与取消收藏
  5. Mysql中自定义函数的创建和执行
  6. 域名通过ipv6解析SSL协议无法访问
  7. Unloaded branch node detected. “loadOptions“ prop is required to load its children
  8. 100多年前人们心中的2018年:部分预测已成现实
  9. 使用adb 命令时提示“adb”既不是内部或外部命令,也不是可运行的程序
  10. 爱了!京东新产算法宝典在Github上爆火,成功激起了老夫的少女心!