ps:虽然是看着教程写出来的,但是这是第一次实现一个项目还是挺开心的,还是自己以前玩过的游戏
飞翔的小鸟相信大家也都玩过,就是不停点击屏幕既要保证小鸟不落地,也要保证小鸟要穿过柱子
先来看一下效果图吧:

接下来就是重点了:我们需要把游戏中用到的场景先要实现出来

制作流程

  • **1.定义小鸟类**
  • **2.定义地面类**
  • **3.定义柱子类**
  • **4.进行游戏初始化和开始游戏**
  • **游戏中的图片资源:**

1.定义小鸟类

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
/*** 小鸟*/
public 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;}}

2.定义地面类

import java.awt.image.BufferedImage;import javax.imageio.ImageIO;/***地面*/
public class Ground {//图片BufferedImage image;//位置int x,y;//宽高int width,height;//初始化地面public Ground() throws Exception{image=ImageIO.read(getClass().getResource("/resources/ground.png"));width=image.getWidth();height=image.getHeight();x=0;y=500;}//向左移动一步public void step() {x--;if(x==-109) {x=0;}}
}

3.定义柱子类

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.util.Random;
public class Column {//图片BufferedImage image;//位置int x,y;//宽高int width,height;//柱子之间的缝隙int gap;//柱子之间的距离int distance;//随机数工具Random random=new Random();/*** 初始化第N个柱子*/public Column(int n) throws Exception{image=ImageIO.read(getClass().getResource("/resources/column.png"));width=image.getWidth();height=image.getHeight();gap=144;distance=245;x=550+(n-1)*distance;y=random.nextInt(218)+123;}//向左移动一步public void step() {x--;if(x==-width/2) {y=distance*2-width/2;y=random.nextInt(218)+132;x=550;}}
}

4.进行游戏初始化和开始游戏

package game;/*** 游戏界面*/
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;public class BirdGame extends JPanel {// 背景图片BufferedImage background;// 开始图片BufferedImage startImage;// 结束图片BufferedImage gameOverImage;// 地面Ground ground;// 柱子Column column1, column2;// 小鸟Bird bird;// 游戏分数int score;// 游戏状态int state;// 状态常量public static final int START = 0;// 开始public static final int RUNNING = 1;// 运行public static final int GAME_OVER = 2;// 结束/*** 初始化游戏*/public BirdGame() throws Exception {// 初始化背景图片background = ImageIO.read(getClass().getResource("/resources/bg.png"));// 初始化开始、结束图片startImage = ImageIO.read(getClass().getResource("/resources/start.png"));gameOverImage = ImageIO.read(getClass().getResource("/resources/gameover.png"));// 初始化地面、柱子、小鸟ground = new Ground();column1 = new Column(1);column2 = new Column(2);bird = new Bird();// 初始化分数score = 0;// 初始化状态state = START;}/*** 绘制界面*/public void paint(Graphics g) {// 绘制背景g.drawImage(background, 0, 0, null);// 绘制地面g.drawImage(ground.image, ground.x, ground.y, null);// 绘制柱子g.drawImage(column1.image, column1.x - column1.width / 2, column1.y - column1.height / 2, null);g.drawImage(column2.image, column2.x - column2.width / 2, column2.y - column2.height / 2, null);// 绘制小鸟(旋转坐标系)Graphics2D g2 = (Graphics2D) g;g2.rotate(-bird.alpha, bird.x, bird.y);g.drawImage(bird.image, bird.x - bird.width / 2, bird.y - bird.height / 2, null);g2.rotate(bird.alpha, bird.x, bird.y);// 绘制分数Font f = new Font(Font.SANS_SERIF, Font.BOLD, 40);g.setFont(f);g.drawString("" + score, 40, 60);g.setColor(Color.WHITE);g.drawString("" + score, 40 - 3, 60 - 3);// 绘制开始与结束界面switch (state) {case START:g.drawImage(startImage, 0, 0, null);break;case GAME_OVER:g.drawImage(gameOverImage, 0, 0, null);break;}}// 开始游戏public void action() throws Exception {MouseListener l = new MouseAdapter() {// 鼠标按下事件public void mousePressed(MouseEvent e) {try {switch (state) {case START:// 在开始状态,按下鼠标则转为运行状态。state = RUNNING;break;case RUNNING:// 在运行状态,按下鼠标则小鸟向上飞行。bird.flappy();break;case GAME_OVER:// 在结束状态,按下鼠标则重置数据,再次转为开始态。column1 = new Column(1);column2 = new Column(2);bird = new Bird();score = 0;state = START;break;}} catch (Exception ex) {ex.printStackTrace();}}};// 将***添加到当前的面板上addMouseListener(l);// 不断的移动与重绘while (true) {switch (state) {case START:// 小鸟做出飞行动作bird.fly();// 地面向左移动一步ground.step();break;case RUNNING:// 地面向左移动一步ground.step();// 柱子向左移动一步column1.step();column2.step();// 小鸟做出飞行动作bird.fly();// 小鸟上下移动一步bird.step();// 计算分数if (bird.x == column1.x || bird.x == column2.x) {score++;}// 检测是否发生碰撞if (bird.hit(ground) || bird.hit(column1) || bird.hit(column2)) {state = GAME_OVER;}break;}// 重新绘制界面repaint();// 休眠 1000/60 毫秒Thread.sleep(1000 / 60);}}/*** 启动方法*/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();}
}

游戏中的图片资源:

百度云盘链接
提取码:bhab

JAVA400行代码实现飞翔的小鸟相关推荐

  1. 从大专生到蚂蚁金服CTO,他写下“支付宝”第一行代码:逆风的方向,更适合飞翔!...

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨Mr.K   整理丨Emma 来源丨技术领导力 ...

  2. C语言跳过障碍物小游戏,html5飞翔的小鸟越过障碍物小游戏代码

    一款简单好玩的html5 canvas飞翔的小鸟越过障碍物小游戏代码,玩法:点击鼠标控制小鸟飞行. 查看演示 下载资源: 11 次 下载资源 下载积分: 30 积分 js代码 var cvs = do ...

  3. java小游戏——飞翔的小鸟(java初学作品)

    注:学习了java基础后,做出来的一个小作品,可以用来巩固学习 概述: 飞翔的小鸟能够作为Java基础的收官之作,包涵了Java很多的基础知识,在学习完Java基础后,尝试编写一些东西,能够起到很好的 ...

  4. Unity3d制作2D游戏飞翔的小鸟(FlappyBird)

    目录 一.学习方向 二.制作步骤 1.新建项目 3.设置为精灵模式 4.精灵图像分割 5.场景布局设置 6.录制小鸟飞翔动画 7.构建飞翔的小鸟让其响应 8.构建UI对象并让其响应 9.构建游戏背景并 ...

  5. python带你成功复刻热门手机游戏——飞翔的小鸟

    前言 大家早好.午好.晚好吖 ❤ ~欢迎光临本文章 飞翔的小鸟(游戏英文名:Flappy Bird) 一款由越南独立开发者开发的手机游戏,是之前非常流行的一款手机游戏 小游戏目标:让小鸟穿过管子,不要 ...

  6. 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目

    课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...

  7. GameBuilder开发游戏应用系列之60行代码实现FlappyBird

    在线演示:http://osgames.duapp.com/apprun.html?appid=osgames1-911422256817006 在线编辑:http://osgames.duapp.c ...

  8. java小游戏------Flappy Bird(飞翔的小鸟含源码)

    前言:本小游戏可作为java入门阶段收尾创作. 需:掌握面向对象的使用,了解多线程和异常处理等知识. 如上图所示:我们需要绘制背景,小鸟,障碍物,当然也包括游戏开始界面以及死亡界面. 一:思路解析: ...

  9. 飞翔的小鸟--easyx版

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 今天我们来尝试一下用easyx窗口创建飞翔的小鸟游戏 (相关游戏图片我已在末尾给出,欢迎大家保存收藏) 首先 ...

  10. 飞翔的小鸟 c++ 2.0版

    飞翔的小鸟 c++ 2.0版 大家好,我是小哼007 在进入正文之前,让我由衷感谢此文章的作者提供了<飞翔的小鸟>c语言版,本文章暂且称它为<飞翔的小鸟 1.0版> 大家也都知 ...

最新文章

  1. zcu102 hdmi example(一)
  2. C++ with STL(二)map
  3. JS动态添加多个事件
  4. python更新数据库表的时间字段_python更新数据库中某个字段的数据(方法详解)
  5. 链表的翻转(java)
  6. 这些都是当年在C/C++上折的地儿…
  7. 负margin应用案例几则(转载+总结)
  8. 高并发下线程安全的单例模式(最全最经典,值得收藏)
  9. 用python 画炫酷的图并讲解-Python绘制六种可视化图表详解,三维图最炫酷!你觉得呢?...
  10. Druid 在有赞的实践
  11. mysql二进制包安装mysql_基于linux使用mysql二进制包安装mysql
  12. Wireshark实战分析之DHCP协议(一)
  13. 全网找不到jpeg2000的代码范例和图片,怎么可能流行开来?
  14. 热启动计算机的快捷键,电脑快捷键的用法
  15. flv格式php怎么播放不了,FLV格式视频不能在网页播放的解决办法
  16. html页脚版权声明,版权声明与免责声明的区别
  17. ASP.NET程序读取二代身份证(附源码)
  18. uniapp 自定义showToast样式
  19. python汇率兑换双向_汇率兑换—python第一课
  20. eNSP:静态路由的负载分担

热门文章

  1. 达内CEO受邀出席搜狐“2011职业教育高峰论坛”
  2. 软件设计师之朴素的模式匹配算法
  3. 洛谷P1067-多项式输出(模拟好题!)
  4. 9 个将改变一切的物联网应用
  5. 让 Directory Opus 支持 Windows 10 的暗色主题
  6. 上海安陆FPGA程序下载
  7. 神经网络中的filter(滤波器)和kernel(内核)的概念
  8. 柳絮飘,往事忆:前言
  9. qq企业邮箱怎么删除邮件服务器,腾讯企业邮箱如何删除邮件,有什么要注意的呢?...
  10. python注释快捷_python注释快捷键