Java写的第一个小游戏( 三 )

//插入墙体图片的方法public void paint(Graphics g){g.drawImage(wallImageZ,this.x,this.y,this.width,this.height,this.gameClient);}//生成get set 方法public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public int getWidth() {return width;}public void setWidth(int width) {this.width = width;}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 GameClient getGameClient() {return gameClient;}public void setGameClient(GameClient gameClient) {this.gameClient = gameClient;}123456789101112131415161718192021222324252627282930313233343536373839404142434410.2在客户端中实现插入障碍物图// 创建墙体(wall),在参数中定义位置private Wall wall=new Wall(500,200,this);12第一天(完成)效果图如下:第二天(人物以及帽子移动方向)优化代码(数据维护):

  • 基于之前发表的文章详情可见点击查看前文
  • 回顾之前的代码我们可以看到很多的固定常量值或是属性我们都会大量的重复使用,这并不符合我们代码简洁易懂的特点
  • 所以我们可以把重复出现的量或是属性或是方法使用面向对象的思想 , 减少代码的冗余使代码简单明了
1.数据维护1.1在工具包(util)下创建数据维护类(DataPropertiesUtils)1.2在数据维护类中定义我们重复用到的常量属性值: //窗体宽度public static final int CLIENT_WIDTH = 700;//窗体高度public static final int CLIENT_HEIGHT = 500;12341.3将所有涉及到代码冗余的方法、属性、数值、都在数据维护类中定义(此处省略)2.使人物移动2.1在人物类中加入实现思路1.如何分析?第一步:发现类(对象)人物-小丑(敌方-友方)子弹-帽子墙体爆炸物1234第二步:发现属性小丑:宽高 , 位置(x y), 移动速度帽子:宽高 , 位置(x y), 移动速度墙体:宽高 , 位置(x y)爆炸物:宽高 , 位置(x y)1234第三步:发现方法小丑:移动 , 攻击 , 人物撞边界 ,子弹:移动 , 子弹撞墙 , 子弹撞边界 ,墙体:静止不动爆炸物:爆炸物消失12342.难点在哪里?1 如何将图片加载到窗体里
  • 背景图片加载
  • 人物-小丑加载
  • 发射物-帽子加载 Missile
  • 墙体-加载 Wall
  • 爆炸物-加载 Explode
2 如何创建窗体
3 如何发射子弹(如何使用键盘触发事件)
3.二期版本
  • 接入网络,多人作战
第一天的实现1.创建一个项目(ylm)2.导入需要使用到的图片文件到Java3.在项目的src(源代码)中创建游戏包(com.ytzl.ylm)4.在游戏包(com.ytzl.ylm)下创建客户端类GameClient并继承Farme类public class GameClient extends Frame {}1关于Farme类:1.Farme类是Java自带的一个系统类2.Farme类的作用是可以制作出带有标题和边框的顶层窗口
5.实现游戏窗口的显示public void start(){//启动游戏时在控制台输出显示"游戏开始"System.out.println("游戏开始");//窗口的标题设置this.setTitle("原谅帽带战");/**窗体的大小以及位置设置——调用Frame类中的setBounds方法* setBounds方法具体内容:setBounds(int横坐标 , int纵坐标 , int长 , int宽);* 参数中横纵坐标为0 , 表示窗口从计算机屏幕左上角开始铺开显示(窗口中心点)*/this.setBounds(0,0,700,500);//让窗体显示出来this.setVisible(true);//点击窗口x关闭键响应关闭this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent windowEvent) {//退出游戏后在控制台输出显示"游戏结束"System.out.println("游戏结束");//调用System类中的exit方法以实现窗口关闭按钮(X)的生效System.exit(0);}});}//游戏入口public static void main(String[] args) {// 创建本类对象GameClient gameClient = new GameClient();// 使用本类对象调用start方法 , 开始游戏gameClient.start();}123456789101112131415161718192021222324252627282930316.给窗体添加背景图片6.1在com.ytzl.ylm包下创建工具包util并且创建工具类CommonUtils6.2在工具类(CommonUtils)中写读取图片的方法public class CommonUtils {//读取图片方法getImagepublic static Image getImage(String imgPath) {//参数为图片路径地址ImageIcon imageIcon = new ImageIcon(imgPath);return imageIcon.getImage();}}123456786.3在客户端类中完成背景图片的插入// 将背景图片的路径赋值给常量BG_PATHpublic static final String BG_PATH = "images/bg.png";// 定义一个图片的静态变量(用于插入不同图片)private static Image image;// 背景图静态块,调用背景图片路径,所有资源(背景图片,音频,视频)只需要加载一次static {image = CommonUtils.getImage(BG_PATH);}//重写父类Frame类的paint方法以插入各种图片@Overridepublic void paint(Graphics g){//插入背景图定义位置和宽 高g.drawImage(image,0,0,700,500,this);}1234567891011121314