Java游戏编程

您所在的位置:网站首页 愤怒的小鸟图片猪头图大全 Java游戏编程

Java游戏编程

2023-06-29 22:40| 来源: 网络整理| 查看: 265

Java游戏编程——愤怒的小鸟(一)

前言:最近在b站up主尚学堂杨老师(b站链接)学习了我做的第一个游戏项目,所以在csdn进行总结,便于今后查看。

本部分主要是将游戏的背景绘制出来 先上一张效果图:

在这里插入图片描述

资源

图片资源 在这里插入图片描述 颜色资源 0x4bc4cf

准备工作完成,开始书写代码啦 类图

在这里插入图片描述 对game.bird.util文件夹下说明:在开发过程中我们尽量不书写单独的常量,而是将其放在一个public的类中专门存储,便于日后的开发和修改;同时工具方法,也应该放在一个单独的类public类中便于调用。

Constant.java

代码中所有的常量

package game.bird.util; import java.awt.Color; public class Constant { //窗口的长、宽 public static final int FRAME_WIDTH = 800; public static final int FRAME_HEIGHT = 550; //窗口的名字 public static final String FRAME_NAME = "愤怒的小鸟"; //图片资源的位置 //1.背景资源 public static final String BK_IMG_PATH = "img/bird_bk.png"; //2.小鸟资源 public static final String[] BIRDS_IMG_PATH = {"img/bird_1.png", "img/bird_up.png","img/bird_down.png"}; //线程休眠时间 public static final int GAME_INTERVAL = 33; //背景颜色 public static final Color BACK_COLOR =new Color(0x4bc4cf); //窗口顶部宽度 public static final int HEIGHT = 15; //小鸟飞行的速度 public static final int SPEED = 5; //小鸟飞行的最大加速度 public static final int UP_SPEED_MAX = 10; public static final int DOWN_SPEED_MAX = 15; } GameUtil.java

游戏的工具类  loadBufferedImages()得到图片路径,并初始化图片资源

package game.bird.util; import java.awt.image.BufferedImage; import java.io.FileInputStream; import java.io.IOException; import javax.imageio.ImageIO; /* *游戏工具类,游戏中用到的方法均在此 * */ public class GameUtil { private GameUtil() {} /** * 装载图片 * @param imgName 图片路径名 * @return */ public static BufferedImage loadBufferedImage(String imgPath){ try { return ImageIO.read(new FileInputStream(imgPath)); } catch (IOException e) { e.printStackTrace(); } return null; } } GameFrame.java

游戏的窗口类,是本项目的“擎天柱” 注:做游戏界面不同于做普通软件界面,需要尽量做到每个像素点都可控,故尽量少使用已封装好的类(而且也有点儿丑) 在这里插入图片描述

代码思路:

1、窗口初始化:  - 大小  - 显示可见  - 退出按键点击响应事件 2、游戏初始化:  - 显示底部背景图片:

根据Frame宽度和图片宽度,得到所需的图片数量通过paint(Graphic g)绘制背景,再用update刷新界面 (注意:update是在启动刷新窗口的线程后由系统JVM自行调用的,不需要我们显示调用) 3、 给屏幕上方添加与底色相同的背景色 package game.bird.main; import java.awt.Frame; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.io.FileInputStream; import java.io.IOException; import javax.imageio.ImageIO; import static game.bird.util.Constant.*; public class GameFrame extends Frame implements Runnable{ GameBackGround backGround; Bird bird; public void initFrame() { setVisible(true); setSize(FRAME_WIDTH,FRAME_HEIGHT); setTitle(FRAME_NAME); //窗口大小设为不可调节 setResizable(false); //给窗口添加关闭功能 addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub System.exit(0); } }); } //对游戏中的对象进行初始化 public void initGame() { backGround = new GameBackGround(); //启动用于刷新窗口的线程 new Thread(this).start(); } /** * 所有的我们需要绘制的内容,都要在此方法中进行调用绘制. * update 方式是JVM调用的,怒要主动调用该方法 * */ public void update(Graphics g) { backGround.draw(g); } public GameFrame() { initFrame(); initGame(); } @Override public void run() { while(true) { //通过调用repaint.让JVM去执行update方法.进行重新的绘制. repaint(); try { Thread.sleep(GAME_INTERVAL); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } GameBackGround.java

这段代码就没啥好说的了,有不懂的在下方留言即可

package game.bird.main; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import static game.bird.util.Constant.*; import game.bird.util.Constant; import game.bird.util.GameUtil; public class GameBackGround { //背景需要的资源 private Image bkImg; //在构造方法中对资源进行初始化 public GameBackGround() { bkImg = GameUtil.loadBufferedImage(BK_IMG_PATH); } //自定义一个绘制的方法,用系统提供的画笔将图片绘制到指定的位置 public void draw(Graphics g) { //得到图片的宽度 int imgW = bkImg.getWidth(null); int imgH = bkImg.getHeight(null); //绘制的循环次数 int count = FRAME_WIDTH/imgW + 1; for (int i = 0; i public static void main(String[] args) { GameFrame gFrame = new GameFrame(); } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3