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

article/2025/10/6 8:45:24

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() {@Overridepublic void windowClosing(WindowEvent e) {// TODO Auto-generated method stubSystem.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();}@Overridepublic void run() {while(true) {//通过调用repaint.让JVM去执行update方法.进行重新的绘制.repaint();try {Thread.sleep(GAME_INTERVAL);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.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 < count; i++) {g.drawImage(bkImg, imgW*i, FRAME_HEIGHT-imgH, null);}g.setColor(BACK_COLOR);g.fillRect(0,HEIGHT, FRAME_WIDTH,FRAME_HEIGHT-HEIGHT-imgH );}
    }

    GameApp.java

    程序入口

    package game.bird.app;import game.bird.main.GameFrame;public class GameApp {public static void main(String[] args) {GameFrame gFrame = new GameFrame();}
    }

    http://chatgpt.dhexx.cn/article/WR3437qg.shtml

    相关文章

    java游戏开发(java游戏开发教程)

    Java游戏开发绘图器是什么呢&#xff1f; 众所周知&#xff0c;Java GUI以paint进行绘图&#xff0c;以repaint进行图像刷新&#xff0c;而完成repaint及paint这一连贯过程中所用到绘图组件&#xff0c;我将其称为绘图器。就我个人的体会&#xff0c;绘图器的调用时机应始终处于…

    Java编程实现三种等级的扫雷游戏(完整版)

    大家好&#xff0c;我是陈橘又青&#xff0c;今天用Java编程实现图形化界面的扫雷游戏&#xff08;三种难度&#xff09;&#xff0c;以下是完整的开发思路以及代码&#xff0c;供各位讨论交流。 文章目录 一、效果展示初级难度中级难度高级难度测试界面 二、项目介绍项目背景功…

    Java游戏编程初步

    现在流行的游戏似乎都是用C或C来开发的。在java平台上几乎没有很大型及可玩的流行游戏。由于java是个新生语言&#xff0c;他的许多特性还有待大家的发掘,但是我们不能否认Java在游戏编程方面的强大性。本文将带领大家一步一步学习编写Java游戏。最终打造属于自己的Java游戏。 …

    如何用java语言编写小游戏?(一)

    学习java的过程中&#xff0c;如果想找一些小游戏项目来练手的话&#xff0c;我们需要学习哪些技术先呢&#xff1f;&#xff08;适用于java初学者&#xff09; 第一步&#xff1a;了解GUI编程—Swing基础 GUI&#xff08;Graphical User interface&#xff09;&#xff1a; …

    SQL编程篇

    SQL编程篇 这是以前的学习总结&#xff1a; 这一周将SQL编程篇仔细地看了一遍&#xff0c;有不少感触&#xff0c;因为SQL Server 中的T-SQL语言&#xff0c;在某种程度上就类似C等编程语言&#xff0c;其中有基本运算、控制语句及函数还有一个叫存储过程的东东。但目前对他们在…

    SQL语言

    创建数据库 创建table&#xff0c;create table后可以"库名.表名"或者"库名.用户.表名"&#xff0c;也可以用上面工具选择&#xff0c;如果名字中含有特殊关键字&#xff0c;mysql需要交,sql server需要加[] 创建表 CREATE TABLE Student (S# CHAR ( 8 …

    mysql -sql编程

    基础语句 # 创建库 create database dome; # 切换到数据库 use dome; # 创建表 create table z (a int unsigned); # 查看表show create table z; # 查看表结构 desc z; # 插入数据 insert into z value(1);# 修改表字段类型 alter table zz change column a a int auto_incre…

    pl/SQL编程基础

    一、PL/SQL编程基础 1、pl/sql的组成&#xff1a;声明块、执行块、异常处理块 2、编制代码实现12...100的计算 3、编写求u12...100的结果并显示的存储过程 4、编写求12...n的带参数的存储过程 三、函数编程 1、函数的概念 function函数,存储在数据库中的带返回值的命名pl/s…

    PL-SQL编程

    PL/SQL介绍&#xff1a; PL/SQL是ORACLE对标准数据库语言的扩展 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言 PL/SQL 是对 SQL 的扩展 支持多种数据类型&#xff0c;如大对象和集合类型&#xff0c;可使用条件和循环等控制结构 可用于创…

    SQL编程学习01

    在正式开始学习前&#xff0c;我发现之前安装的MySQL忘记了root密码。 所以在这里补充一下找回root密码的方法&#xff1a;MySQL找回root密码 一、问题与解决&#xff1a; 1、在创建表的时候出现了「1046&#xff08;ErrorCode&#xff1a;1046.No database select…&#x…

    SQL编程和高级查询

    一、使用SQL操作表 1、SQL语言简介 2、数据库操纵语言 &#xff08;1&#xff09;INSERT命令 INSERT INTO grade VALUES (5,五年级);--插入每一列 INSERT INTO grade VALUES (6,六年级); INSERT INTO grade VALUES (7,七年级); INSERT INTO student(stuNo,stuName,sex) VAL…

    数据库系统SQL编程-02

    目录 一、查询平均分高于60分的课程&#xff08;MSSQL&#xff09; 表结构: 表样例 输出样例: 编译程序: 二、查询成绩最高的前三名同学(MSSQL) 表结构: 表样例 输出样例: 编译程序: 三、查询所授每门课程平均成绩均在70分以上的教师(MSSQL) 表结构: 表样例 …

    嵌入式SQL编程快速上手教程

    嵌入式SQL编程快速上手教程 声明&#xff1a;我这里标题虽是《嵌入式SQL编程快速上手教程》&#xff0c;但只是嵌入式SQL编程的冰山一角罢了&#xff0c;我会通过举一道简单例题来教小白快速上手嵌入式SQL编程 第一&#xff1a;题目描述 其模式描述分别是&#xff1a; S (s…

    数据库系统SQL编程-01

    目录 一、查询各专业学生的平均成绩(MSSQL&#xff09; 表结构: 表样例 输出样例: 编译代码&#xff1a; 二、查询平均成绩最高的前3名同学 表结构: 表样例 输出样例: 编译代码&#xff1a; 三、 查询同专业的学生&#xff08;MSSQL&#xff09; 表结构: 表样…

    pl/sql编程语言

    –pl/sql编程语言 –pl/sql编程语言是对sql语言的扩展&#xff0c;是的sql语言具有过程化编程的特性 –pl/sql编程语言比一般的过程化编程语言&#xff0c;更加灵活高效 –pl/sql编程语言主要用来编写存储过程和存储函数等。 --声明方法,定义变量 --赋值操作可以用 : 也可以使…

    SQL编程开发

    文章目录 SQL概述SQL分类SQL语言规范 基本查询语句查询全部列查询特定列过滤操作模糊查询排序操作多表查询单行函数组函数group by和having 子查询库和表的操作库的操作表的操作数据类型列的操作 数据处理之增删改事务、约束和分页事务约束分页 安装好MySQL下步就是使用MySQL&a…

    SQL编程

    10-1 查询学生表所有学生记录 (5 分) 本题目要求编写SQL语句&#xff0c; 检索出stu表中所有学生记录。 提示&#xff1a;请使用SELECT语句作答。 表结构: 定义表结构的SQL语句。如&#xff1a; CREATE TABLE stu(sno char(4) NOT NULL,sname char(8) NOT NULL,sex tinyin…

    SQL 编程

    SQL Server中存在两种变量局部变量和成员变量&#xff0c;两种变量的特点和其他语言变量特点一样 全局变量&#xff1a;由系统定义和维护由系统定义和维护 变量名前加“” 例 name 就定义了一个全局变量“name” 局部变量&#xff1a;由用户定义和使用&#xff0c;变量…

    可编程的SQL是什么样的?

    背景 如果你使用传统编程语言&#xff0c;比如Python&#xff0c;那么恭喜你&#xff0c;你可能需要解决大部分你不需要解决的问题&#xff0c;用Python你相当于拿到了零部件&#xff0c;而不是一辆能跑的汽车。你花了大量时间去组装汽车&#xff0c;而不是去操控汽车去抵达自…

    SQL编程语言1

    1 SQL简介 SQL是一门操作关系型数据库的编程语言 SQL通用语法 SQL语句可以以单行或多行书写&#xff0c;以分号结尾。只有在读取到分号后系统才会默认你已经输入执行语句MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写注释 单行注释&#xff1a;-- 注释内…