原谅帽大作战

制作人:崔帅宽

时间:2020.11.10

一、如何创建原谅帽大作战的窗体:

(1)先创建一个原谅帽的类包,然后创建:游戏客户端GameClinet类。

/*
游戏客户端
*/
public class GameClinet extends Frame {// 常量 定义背景图片的路径public static final String BG_PATH = "Javaylm/images/bg.png";//定义一个图片的静态变量private static Image image;//静态块,所有资源(图片、音频,视频)只需要加载一次static{image = CommonUtils.getImage(BG_PATH);}/*** 游戏入口* @param args*/public static void main(String[] args) {GameClinet gameClinet = new GameClinet();// 开始游戏gameClinet.start();}/** 开始游戏* */public void start(){System.out.println("游戏马上开始,请玩家做好准备");//TODO 游戏业务// 设置标题this.setTitle("原谅帽大战");//设置窗体的大小以及位置this.setBounds(0,0,1100,700);// 让窗体显示出来this.setVisible(true);System.out.println("Game Over!!!");}/** 画画,重写父类的paint方法* Graphics 画笔类* @param g 画笔* */@Overridepublic void paint(Graphics g) {// 画背景图g.drawImage(image,0,0,1100,700,this);

(2)其次在原谅帽的类包下,在创建一个Util包,在Util类包下创建:常用工具类CommonUtils类。

package ylm.Util;import javax.swing.*;
import java.awt.*;/*
* 常用工具类
* */
public class CommonUtils {/*** 读取图片资源, 转变为Java对象 Image* @param imgPath  图片路径* @return Image对象*/public static Image getImage(String imgPath) {ImageIcon imageIcon = new ImageIcon(imgPath);return imageIcon.getImage();}}

(3)在原谅帽的类包下,在创建一个thread包,在thread类包下创建:常用工具类RepaintThread类。

/*
定义一个重新绘制画面的线程 相当于 在招一个工人去车间工作
*/
public class RepaintThread implements Runnable{// 游戏窗体private GameClinet gameClinet;// 通过构造器赋值public RepaintThread(GameClinet gameClinet) {this.gameClinet = gameClinet;}@Overridepublic void run() {while (true){// 每50毫秒 执行一次try {Thread.sleep(40);// 重新绘制图像gameClinet.repaint();} catch (InterruptedException e) {e.printStackTrace();}}}
}

二、如何将图片加载到窗体里:

第一步:发现类(对象)

          在做游戏的同时,先找到它有那些对象:1、人物-小丑(友方、敌方):Buffon2、发射物-帽子:           Missile3、墙体                   Wall4、爆炸物                 Explode

第二步:发现属性

           小丑:宽、高,位置(x、y),移动速度帽子:宽、高,位置(x、y),移动速度墙体:宽、高,位置(x、y)爆炸物:宽、高,位置(x、y)

第三步:发现方法

        小丑:移动  move'Left向左':  x = x - this.speed;'Right向右': x = x + this.speed;'Down向下':  y = y + this.speed;'Up向上':    y = y - this.speed;'UR东北方向':x = x + this.speed;y = y - this.speed;'DR东南方向':x = x + this.speed;y = y + this.speed;'LD西南方向':X = x — this.speed;y = y + this.speed;'LU西北方向':x = x - this.speed;y = y - this.speed;攻击(发子弹)人物撞边界子弹:移动   move子弹撞墙子弹撞边界墙体:爆炸物:爆炸物消失

(1)人物–小丑:
创建一个实体类包:entity,包里放入实体类小丑类:Buffon。
小丑有自己的图片属性:宽、高,位置(x、y),移动速度等。

import ylm.Util.CommonUtils;
import java.awt.*;
/*
* 人物--小丑类
* */
public class Buffoon {// 人物图片属性public static Image buffoonImage = CommonUtils.getImage("Javaylm/images/body/s-left.png");//人物--横坐标private int x;//人物--纵坐标private int y;// 图片--宽度private int width;// 图片--高度private int height;// 人物--速度private int speed;
}

(2)发射物-帽子:
在实体类包entity:放入发射物-帽子类:Missile

package ylm.entity;
import ylm.Util.CommonUtils;
import java.awt.*;
/*
* 发射物--帽子
*/
public class Missile {// 发射物图片属性public static Image missileImage = CommonUtils.getImage("Javaylm/images/missile.png");// 发射物--横坐标private int x;// 发射物--纵坐标private int y;// 图片--宽度private int width;// 图片--高度private int height;// 发射物--速度private int speed;
}

(3)墙体:
在实体类包entity:放入墙体类:Wall
墙体有自己的图片属性:宽、高,位置(x、y)等。

package ylm.entity;
import ylm.Util.CommonUtils;
import java.awt.*;
/*
* 墙体
* */
public class Wall {// 墙体图片属性// 横向墙体public static Image wallImage = CommonUtils.getImage("Javaylm/images/wall-h.png");// 竖向墙体public static Image wallImage1 = CommonUtils.getImage("Javaylm/images/wall-v.png");// 墙体横坐标private int x;// 墙体纵坐标private int y;// 图片宽度private int width;// 图片高度private int height;
}

(4)爆炸物:
在实体类包entity:放入爆炸物类:Explode
爆炸物同样也有自己的图片属性:宽、高,位置(x、y)等。

package ylm.entity;
import ylm.Util.CommonUtils;
import java.awt.*;
/*
* 爆炸物
* */
public class Explode {// 爆炸物图片属性public static Image explodeImage = CommonUtils.getImage("Javaylm/images/explode.png");// 爆炸物横坐标private int x;// 爆炸物纵坐标private int y;// 爆炸物宽度private int width;// 爆炸物高度private int height;
}

创建无参、带参构造、get、set方法操作:

// 无参构造public Buffoon(){}// 带参构造public Buffoon(int x,int y,GameClinet gameClinet){this.x = x;this.y = y;this.width = 50;this.height = 50;this.speed = 5;this.gameClinet = gameClinet;}// 生成get set方法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 int getWidth() {return width;}public void setWidth(int width) {this.width = width;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public int getSpeed() {return speed;}public void setSpeed(int speed) {this.speed = speed;}

人物移动:move

 /** 人物移动*/public void move(String dir){// 向上 北if ("UP".equals(dir)){this.y = this.y - this.speed;}// 向右 东if ("RIGHT".equals(dir)){this.x = this.x + this.speed;}// 向下 南if ("DOWN".equals(dir)){this.y = this.y + this.speed;}// 向左 西if ("LEFT".equals(dir)){this.x = this.x - this.speed;}// 东南方向if ("DR".equals(dir)){this.x += this.speed;this.y += this.speed;}// 东北方向if ("UR".equals(dir)){this.x += this.speed;this.y -= this.speed;}// 西南方向if ("LD".equals(dir)){this.x -= this.speed;this.y += this.speed;}// 西北方向if ("UL".equals(dir)){this.x -= this.speed;this.y -= this.speed;}

三、将实体类里的人物依次调用到游戏客户端类中:GameClinet

/*
游戏客户端
*/
public class GameClinet extends Frame {// 常量 定义背景图片的路径public static final String BG_PATH = "Javaylm/images/bg.png";//定义一个图片的静态变量private static Image image;// 创建人物--小丑private Buffoon buffoonImage = new Buffoon();// 创建发射物--帽子private Missile missileImage = new Missile();// 创建墙体private Wall wallImage = new Wall();private Wall wallImage1 = new Wall();// 创建爆炸物private Explode explodeImage = new Explode();

四、再游戏客户端:GameClinet画所有人物

/*
* 画画,重写父类的paint方法
* Graphics 画笔类
* @param g 画笔
* */
*

@Overridepublic void paint(Graphics g) {// 画背景图g.drawImage(image,0,0,1100,700,this);// 画人物--小丑g.drawImage(Buffoon.buffoonImage,350,300,50,50,this);g.drawImage(Buffoon.buffoonImage,600,350,50,50,this);g.drawImage(Buffoon.buffoonImage,700,150,50,50,this);g.drawImage(Buffoon.buffoonImage,500,100,50,50,this);g.drawImage(Buffoon.buffoonImage,450,200,50,50,this);//画发射物--帽子g.drawImage(Missile.missileImage,200,200,35,25,this);g.drawImage(Missile.missileImage,250,350,35,25,this);g.drawImage(Missile.missileImage,500,280,35,25,this);g.drawImage(Missile.missileImage,800,260,35,25,this);g.drawImage(Missile.missileImage,700,450,35,25,this);g.drawImage(Missile.missileImage,600,200,35,25,this);//画墙体// 横向墙体g.drawImage(Wall.wallImage,400,150,130,20,this);g.drawImage(Wall.wallImage,400,250,130,20,this);g.drawImage(Wall.wallImage,600,100,130,20,this);g.drawImage(Wall.wallImage,600,400,130,20,this);g.drawImage(Wall.wallImage,400,350,130,20,this);// 竖向墙体g.drawImage(Wall.wallImage1,300,300,20,130,this);g.drawImage(Wall.wallImage1,800,300,20,130,this);g.drawImage(Wall.wallImage1,300,100,20,130,this);g.drawImage(Wall.wallImage1,800,100,20,130,this);g.drawImage(Wall.wallImage1,650,200,20,130,this);// 画爆炸物g.drawImage(Explode.explodeImage,850,350,50,50,this);}}

关闭游戏、退出游戏

// 关闭游戏,退出游戏this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.out.println("Game Over!!!");// 退出游戏System.exit(0);}});

五:在游戏客户端:GameClinet增添键盘事件(按下触发、松开触发)

// 监听键盘事件this.addKeyListener(new KeyAdapter() {// 键盘按下触发@Overridepublic void keyPressed(KeyEvent e) {// 获取被按下的键对应的数值 如:a:67,b:68int keyCode = e.getKeyCode();switch (keyCode){case KeyEvent.VK_UP:System.out.println("向上走!!!");// 按向上箭头,给人物的方向设置为上buffoons.setDir("UP");break;case KeyEvent.VK_DOWN:System.out.println("向下走!!!");// 按向下箭头,给人物的方向设置为上buffoons.setDir("DOWN");break;case KeyEvent.VK_LEFT:System.out.println("向左走!!!");// 按向左箭头,给人物的方向设置为上buffoons.setDir("LEFT");break;case KeyEvent.VK_RIGHT:System.out.println("向右走!!!");// 按向右箭头,给人物的方向设置为上buffoons.setDir("RIGHT");break;}// 人物移动buffoons.move(buffoons.getDir());}// 键盘松开触发@Overridepublic void keyReleased(KeyEvent e) {buffoons.setDir("STOP");}});// 开启重新绘制线程RepaintThread repaintThread = new RepaintThread(this);// 创建车间工人Thread thread = new Thread(repaintThread);// 工人听后调度thread.start();

效果图如下:

原谅帽大作战游戏程序相关推荐

  1. 原谅帽大作战网页版服务器连接失败,原谅帽大作战网页PC版

    当你在生活中遇到不如意,不妨来这款游戏中发泄一下,<原谅帽大作战网页版>又称绿帽大作战,十分生动形象的表现了最近网上火爆的这个梗,与其选择原谅她,给别人丢绿帽子当然爽的起飞了,游戏在线即玩 ...

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

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

  3. html5小游戏 typescript,使用TypeScript和Canvas编写移动端贪吃蛇大作战游戏

    基本介绍 一款移动端贪吃蛇大作战游戏.(只支持移动端) 这是一个临近 deadline 的课设项目,为了方便地使用TS,我直接使用angular-cli生成了TypeScript的项目结构.如果你有好 ...

  4. 【项目实战】轻松实现C/C++大作业:贪吃蛇大作战游戏!

    这是一个贪吃蛇大作战类游戏,修改特性为 AI 不互杀: 该程序有四个类:蛇基类 SnakeBase,玩家类 Player,AI 类,Game 类:SnakeBase 和 AI 均继承自 SnakeBa ...

  5. 面向对象版贪吃蛇大作战游戏创作

    贪吃蛇大作战 创作思路: 1.创建蛇头蛇身-----2.让蛇动起来-----3.随机投放食物-----4.吃掉创建的食物------5.判断游戏开始结束 前期准备工作: 创建一个宽1200 高800的 ...

  6. Python—飞机大作战游戏(附源代码及素材)

    目录 过程说明: 主函数 键盘控制 创建类 01.飞机基类 02.子弹基类 03. Hero飞机类 04.enemy飞机类 源代码及素材 过程说明: 应用到的库:         import pyg ...

  7. 黑洞大作战游戏架构设计与实现

    版权申明: 本文为"优梦创客"原创文章,您可以自由转载,但必须加入完整的版权声明 更多学习资源请加QQ:1517069595获取(企业级性能优化/热更新/Shader特效/服务器/ ...

  8. java写潜艇大作战游戏_基于Java实现的潜艇大战游戏

    一.需求分析 本次游戏课程设计小组成员团队合作的方式,通过游戏总体分析设计,场景画面的绘制,游戏事件的处理,游戏核心算法的分析实现,游戏的碰撞检测,游戏的反复测试,游戏的打包运行等一个完整的游戏设计编 ...

  9. 前端作品-球球大作战游戏

    点此查看 所有教程.项目.源码导航 文章目录 1. 作者简介 2. 效果展示 3. 源码下载 1. 作者简介 本网站作者田迅,是我的20级软件技术专业学生,爱好前端.擅长使用HTML.CSS.JS.j ...

最新文章

  1. Activiti+Oracle,在数据量大的时候报错:无法支持1000列以上
  2. WebRTC之noise suppression算法
  3. 【Protocol Buffer】Protocol Buffer入门教程(三):proto3与proto2的区别
  4. Codeforces Round #528 (Div. 2) - D. Minimum Diameter Tree
  5. python列表遍历 空列表_Python list列表执行reversed()后执行pop()返回迭代对象遍历为空问题...
  6. 基于MLlib的机器学习--协同过滤与推荐
  7. 它是真实的“盗梦空间”?在这里,一切都可能是数据
  8. python 读取合并单元格 视频_Python如何使用xlrd实现读取合并单元格
  9. golang mysql scan_golang 实现 mysql 数据库备份
  10. jquery 图片切换插件(初版)
  11. Scrum Meeting---Ten(2015-11-5)
  12. 巴克码信号处理的计算机仿真,单码道绝对编码信号处理建模与仿真
  13. WPS永久关闭热点、云服务、初始登陆界面
  14. 国际物流、快递、空运、海运、FBA头程、专线分别都有什么不同
  15. maker win10有movie_手把手解决win10系统出现windows MovieMaker故障的方法
  16. Android 8.0 打开wifi热点
  17. 基于MAC地址划分VLAN
  18. 安卓GB28181跨网段语音对讲
  19. 爱代挂php源码,爱代挂外包,爱准挂外包,代挂系统218元秒搭建
  20. python3刷新监控网页_python - 如何不刷新网页而监控网页变化?

热门文章

  1. Kafka消息积压案例分析
  2. 79g道闸雷达_79GHz道闸雷达调试软件
  3. 综评计算机相关课题,综评系统中的典型事例/自我介绍/课题,怎么写可以让大学教授眼前一亮?...
  4. PHP获取唯一标识UUID
  5. 数据库查询之条件排序
  6. 独角推荐,只需一个邮箱号就可以注册购买阿里云国际版
  7. 反射望远镜的发展历程(3)
  8. C语言--Union类型的使用方法
  9. OpenCV Gabor滤波器实现纹理提取与缺陷分析
  10. Android四大组件和启动模式(面试总结)