当前位置: 首页 > news >正文

使用Java Swing制作一个飞翔的小鸟游戏

文章目录

  • 一、需求分析
  • 二、技术介绍
    • 2.1相关技术
    • 2.2开发环境
  • 三、功能实现
    • 1、开始
    • 2、运动
    • 3、死亡
  • 四、部分代码实现
  • 获取源码

文章最下方获取源码!!!
文章最下方获取源码!!!
文章最下方获取源码!!!

一、需求分析

1、实现界面设计
2、实现小鸟的运动以及动态展示
3、实现障碍物背景图的变化
4、绕过障碍物加分,触碰到障碍物时死亡

二、技术介绍

2.1相关技术

  • Java + Swing

2.2开发环境

idea

三、功能实现

1、开始

在这里插入图片描述

2、运动

在这里插入图片描述

3、死亡

在这里插入图片描述

四、部分代码实现

Bird.java

package game;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;/*** 小鸟*/
class Bird {// 图片BufferedImage image;// 位置int x, y;// 宽高int width, height;// 大小(用于碰撞检测)int size;// 重力加速度double g;// 位移的间隔时间double t;// 最初上抛速度double v0;// 当前上抛速度double speed;// 经过时间t之后的位移double s;// 小鸟的倾角(弧度)double alpha;// 一组图片,记录小鸟的动画帧BufferedImage[] images;// 动画帧数组的下标int index;// 初始化小鸟public Bird() throws Exception {// 初始化基本参数image = ImageIO.read(getClass().getResource("/resources/0.png"));width = image.getWidth();height = image.getHeight();x = 132;y = 280;size = 40;// 初始化位移参数g = 4;v0 = 20;t = 0.25;speed = v0;s = 0;alpha = 0;// 初始化动画帧参数images = new BufferedImage[8];for (int i = 0; i < 8; i++) {images[i] = ImageIO.read(getClass().getResource("/resources/" + i + ".png"));}index = 0;}// 飞行动作(变化一帧)public void fly() {index++;image = images[(index / 12) % 8];}// 移动一步public void step() {double v0 = speed;// 计算上抛运动位移s = v0 * t + g * t * t / 2;// 计算鸟的坐标位置y = y - (int) s;// 计算下次移动速度double v = v0 - g * t;speed = v;// 计算倾角(反正切函数)alpha = Math.atan(s / 8);}// 向上飞行public void flappy() {// 重置速度speed = v0;}// 检测小鸟是否碰撞到地面public boolean hit(Ground ground) {boolean hit = y + size / 2 > ground.y;if (hit) {y = ground.y - size / 2;alpha = -3.14159265358979323 / 2;}return hit;}// 检测小鸟是否撞到柱子public boolean hit(Column column) {// 先检测是否在柱子的范围内if (x > column.x - column.width / 2 - size / 2&& x < column.x + column.width / 2 + size / 2) {// 再检测是否在柱子的缝隙中if (y > column.y - column.gap / 2 + size / 2&& y < column.y + column.gap / 2 - size / 2) {return false;}return true;}return false;}
}

main

/*** 启动方法*/public static void main(String[] args) throws Exception {JFrame frame = new JFrame();BirdGame game = new BirdGame();frame.add(game);frame.setSize(440, 670);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);game.action();}

获取源码

  • 我的微信
  • 欢迎添加微信互相交流学习哦!
http://www.lryc.cn/news/357446.html

相关文章:

  • leetcode 684.冗余连接
  • RestTemplet 自定义消息转换器总结
  • 贝叶斯算法:机器学习中的“黄金法则”与性能提升之道
  • element-ui 实现输入框下拉树组件(2024-05-23)
  • Nginx 相关使用
  • 基于Python实现 HR 分析(逻辑回归和基于树的机器学习)【500010104】
  • 5月岚庭工人大会“安全就是效率、形象即是品质”
  • Flutter 中的 MouseRegion 小部件:全面指南
  • C++笔试强训day36
  • 网络通信过程的技术分析
  • 一篇文章搞懂二叉树
  • python——__future__模块
  • 开源一个工厂常用的LIMS系统
  • SpringBoot项目中redis序列化和反序列化LocalDateTime失败
  • linux怎么查询远程管理卡型号
  • 西储大学数据集学习
  • 《web应用技术》第九次作业
  • dockerfile关键字
  • MATLAB分类与判别模型算法: 快速近邻法(FastNN)分类程序【含Matlab源码 MX_005期】
  • css卡片翻转 父元素翻转子元素不翻转效果
  • 解决文件传输难题:如何绕过Gitee的100MB上传限制
  • 零基础学Java第二十三天之网络编程Ⅱ
  • 【HarmonyOS尝鲜课】- 前言
  • phpstudy配置网站伪静态
  • 浅谈traceroute网络诊断工具
  • Java数据结构与算法(红黑树)
  • SpringBoot RPM制作
  • 专转本上岸别太老实做这三件事
  • Cisco网络工程师和网络安全视频教程(完整版)
  • 如何在一个 JavaScript 文件中引入另一个 JavaScript 文件