Flappy Bird (Java实现)

时间:2023-01-07 23:26:33

运行效果:

Flappy Bird (Java实现)

代码:

 package bird;

 import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random; import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel; public class Bird extends JPanel {
private final int WIDTH=288;
private int HEIGHT=512+112;
// Image img;
private Image bg,land,pipe_up,pipe_down,bird,score_h,score_t,score_n;
private int y=300,land_x=0,pipe_x=200,current_y=0,time=0,down=0,bg_x=0,t=0,score=0,yt=-1;
private int a = 0, b = 0, c = 0;
private int[] pipe_ys=new int[4];
private Image [] score_number=new Image[10];
private Random random;
Bird(){
getBestScores() ;
Toolkit tool = this.getToolkit();
bg= tool.getImage("images/bg_day.png");
land=tool.getImage("images/land.png");
pipe_up= tool.getImage("images/pipe_up.png");
pipe_down= tool.getImage("images/pipe_down.png");
bird= tool.getImage("images/bird0_01.png");
random = new Random();
for(int i=0;i<=9;i++){
score_number[i]= tool.getImage("images/number_score_0"+i+".png");
}
init();
this.addKeyListener(
new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int c = e.getKeyCode();
//System.out.print(c); switch (c) {
case KeyEvent.VK_LEFT : break;
case KeyEvent.VK_RIGHT : break;
case KeyEvent.VK_UP :
System.exit(0);
break;
case KeyEvent.VK_DOWN : break;
case KeyEvent.VK_SPACE :
down=0;
if(time<=0)time=16;
break; default :
// System.out.print("hey"); }
}
});
this.setFocusable(true);
}
void init(){ y=300;
land_x=0;
pipe_x=200;
current_y=0;
time=0;
down=0;
bg_x=0;
t=0;
score=0;
yt=-1;
for(int i=0;i<=3;i++){
pipe_ys[i]=-1* Math.abs(random.nextInt()) % 150;
}
}
public int get_Height(){return HEIGHT;}
public int get_Width(){return WIDTH;}
private void move(){
while(true){
moveImg();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
moveBird();
repaint();
check();
t++;
}
}
private void moveBird(){
time--;
if(t%1==0){if(time>0){y-=4;}}
if(time<=-5&&y<=512-37){if(t%3==0){down+=1;y+=down;}}
}
private void moveImg(){
bg_x--;
if(bg_x<-288)bg_x+=288;
land_x-=1;
if(land_x<-20)land_x+=23;
pipe_x-=1;
if(pipe_x<=-52){
pipe_x+=200;
int ran = Math.abs(random.nextInt()) % 200;
ran=-ran;
pipe_ys[current_y]=ran;
current_y++;
current_y%=4;
}
}
private void check(){
int temp=current_y;
for(int i=0;i<=3;i++){
if(80+34>=pipe_x&&80<=pipe_x+52){
if(yt!=current_y){score++;yt=current_y;}
if(y<=pipe_ys[temp]+320||y+25>=pipe_ys[temp]+450){
gameOver();
init();
}
}
}
}
private int gameOver() { if (score > a) {
c = b;
b = a;
a = score;
save();
//System.exit(0);
}
else if (score > b) {
c = b;
b = score;
save();
//System.exit(0);
return 0;
}
else if (score > c) {
c = score;
save();
//System.exit(0);
return 0;
}
JOptionPane.showMessageDialog(null, "GAME OVER!\n\nBEST SCORE:\n"+a+"\n"+b+"\n"+c, "你死了(按任意键再来一次)",
JOptionPane.PLAIN_MESSAGE);
//System.exit(0);
return 0;
}
private void getBestScores() { BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("score.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} try {
a = Integer.parseInt(reader.readLine());
b = Integer.parseInt(reader.readLine());
c = Integer.parseInt(reader.readLine());
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
/*String bestS = new String("Best Score: " + new Integer(a).toString()
+ " " + new Integer(b).toString() + " "
+ new Integer(c).toString());*/
return ;
}
private int save() { BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter("score.txt"));
} catch (IOException e) {
e.printStackTrace();
}
String d = new Integer(a).toString(), e = new Integer(b).toString(),
f = new Integer(c).toString();
try {
writer.write(d);
writer.newLine();
writer.write(e);
writer.newLine();
writer.write(f);
writer.flush();
writer.close();
} catch (NumberFormatException ev) {
ev.printStackTrace();
} catch (IOException ev) {
ev.printStackTrace();
}
return 0;
}
private void showScore(Graphics g){
int score_h=score/100,score_t=score%100/10,score_n=score%10;
if(score_h!=0){g.drawImage(score_number[score_h], 80,20,this);}
g.drawImage(score_number[score_t], 80+20,20,this);
g.drawImage(score_number[score_n], 80+20+20,20,this);
}
public void paint(Graphics g) {//Component
super.paintComponent(g);
//g.drawLine(x,y,200,200);
g.drawImage(bg, bg_x,0,this);
g.drawImage(bg, bg_x+288,0,this);
//g.drawImage(land_1, landx_1, HEIGHT-land_1.getHeight(this), WIDTH,WIDTH*land_1.getHeight(this)/land_1.getWidth(this), this); int temp=current_y;
for(int i=0;i<=3;i++){
g.drawImage(pipe_down,pipe_x+i*200,pipe_ys[temp],this);
g.drawImage(pipe_up,pipe_x+i*200,pipe_ys[temp]+450,this);
g.drawImage(bird,80,y,this);
temp++;
temp%=4;
}
g.drawImage(land, land_x,512,this);
showScore(g);
}
public static void main(String[] args) {
JFrame frame = new JFrame("(按UP键退出)");
Bird b=new Bird();
frame.getContentPane()
.add(b);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(b.get_Width(),b.get_Height());
frame.setLocation(200, 100);
frame.setVisible(true);
b.move();
} }

素材:

bg_day.png

Flappy Bird (Java实现)

bird0_01.png

Flappy Bird (Java实现)

land.png

Flappy Bird (Java实现)

pipe_up.png

Flappy Bird (Java实现)

pipe_down.png

Flappy Bird (Java实现)

number_score_00.png~number_score_09.png    (数字均为白色,图片背景为透明。为能够在博客中显示出来,特设置为灰色背景)

Flappy Bird (Java实现)

Flappy Bird (Java实现)

Flappy Bird (Java实现)

Flappy Bird (Java实现)

Flappy Bird (Java实现)

Flappy Bird (Java实现)

Flappy Bird (Java实现)

Flappy Bird (Java实现)

Flappy Bird (Java实现)

Flappy Bird (Java实现)

程序写于大三上学期。

2016.4.12更新博客。

END

Flappy Bird (Java实现)的更多相关文章

  1. 程序员带你一步步分析AI如何玩Flappy&&num;160&semi;Bird

    以下内容来源于一次部门内部的分享,主要针对AI初学者,介绍包括CNN.Deep Q Network以及TensorFlow平台等内容.由于笔者并非深度学习算法研究者,因此以下更多从应用的角度对整个系统 ...

  2. 教你从头到尾利用DQN自动玩flappy bird(全程命令提示,GPU&plus;CPU版)【转】

    转自:http://blog.csdn.net/v_JULY_v/article/details/52810219?locationNum=3&fps=1 目录(?)[-] 教你从头到尾利用D ...

  3. canvas 制作flappy bird(像素小鸟)全流程

    flappy bird制作全流程: 一.前言 像素小鸟这个简单的游戏于2014年在网络上爆红,游戏上线一段时间内appleStore上的下载量一度达到5000万次,风靡一时, 近年来移动web的普及为 ...

  4. 自己动手写游戏:Flappy Bird

    START:最近闲来无事,看了看一下<C#开发Flappy Bird游戏>的教程,自己也试着做了一下,实现了一个超级简单版(十分简陋)的Flappy Bird,使用的语言是C#,技术采用了 ...

  5. C语言版flappy bird黑白框游戏

    在此记录下本人在大一暑假,2014.6~8这段时间复习C语言,随手编的一个模仿之前很火热的小游戏----flappy bird.代码bug基本被我找光了,如果有哪位兄弟找到其他的就帮我留言下吧,谢谢了 ...

  6. 闲扯游戏编程之html5篇--山寨版《flappy bird》源码

    新年新气象,最近事情不多,继续闲暇学习记点随笔,欢迎拍砖.之前的〈简单游戏学编程语言python篇〉写的比较幼稚和粗糙,且告一段落.开启新的一篇关于javascript+html5的从零开始的学习.仍 ...

  7. 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...

  8. 65行 JavaScript 代码实现 Flappy Bird 游戏

    飞扬的小鸟(Flappy Bird)无疑是2014年全世界最受关注的一款游戏.这款游戏是一位来自越南河内的独立游戏开发者阮哈东开发,形式简易但难度极高的休闲游戏,很容易让人上瘾. 这里给大家分享一篇这 ...

  9. 用Phaser来制作一个html5游戏——flappy bird (二)

    在上一篇教程中我们完成了boot.preload.menu这三个state的制作,下面我们就要进入本游戏最核心的一个state的制作了.play这个state的代码比较多,我不会一一进行说明,只会把一 ...

  10. 用Phaser来制作一个html5游戏——flappy bird (一)

    Phaser是一个简单易用且功能强大的html5游戏框架,利用它可以很轻松的开发出一个html5游戏.在这篇文章中我就教大家如何用Phaser来制作一个前段时间很火爆的游戏:Flappy Bird,希 ...

随机推荐

  1. 把域名绑定到某个项目,以nginx服务器为例

    一:登陆域名服务器平台,把域名解析到项目对应的IP上面. 二:配置nginx服务器 1./etc/nginx/conf.d/ 在服务器该目录下,添加.conf文件,如命名为:www.demo.com. ...

  2. &lbrack;vim&rsqb;的关键字补全

    除了complete关键字补全,所有补全相关命令都以CTRL-X开始,然后再接与补全类型相关的命令.CTRL-N与CTRL-P在找的的内容中选择的通用的命令,上下选择用的,CTRL-E则是取消选择.( ...

  3. 什么是PHP Guzzle&quest;

    Guzzle是一个使得利用PHP实现发送HTTP 请求,方便和web service集成的PHP 客户端模拟组件.一句话,它就像一个PHP写的浏览器.当你的服务端程序需要作为客户端来访问其他的serv ...

  4. 【Hadoop学习】HDFS中的集中化缓存管理

    Hadoop版本:2.6.0 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4146398.html 概述 ...

  5. Linux安装Tomcat外部不能访问

    Linux安装Tomcat后本地可以正常访问,可是这时Tomcat还不能被外界访问需要在Linux默认防护墙上打开8080端口 打开 /etc/sysconfig/iptables [root@loc ...

  6. LineRenderer实现一个画线组件

    using System; using UnityEngine; class UILine { GameObject targetObj; LineRenderer lineRenderer; //L ...

  7. C&num;&period;NET 大型通用信息化系统集成快速开发平台 4&period;1 版本 - 严格的用户账户审核功能

    整个集团有几万个用户,一个个用户添加是不现实的,只有每个公司的系统管理员添加.或者用户申请帐户,然后有相应的管理员审核,才会更准确一些. 每个公司.分公司.部门的账户情况只有所在公司的管理员是最清楚的 ...

  8. &lbrack;DPI&rsqb;&lbrack;suricata&rsqb; suricata-4&period;0&period;3 安装部署

    suricata 很值得借鉴.但是首先还是要安装使用,作为第一步的熟悉. 安装文档:https://redmine.openinfosecfoundation.org/projects/suricat ...

  9. nginx缓存功能的设置

    首先用的缓存是proxy_cache. 在http段里加入下列几句: [plain] view plain copy   proxy_connect_timeout 5; proxy_read_tim ...

  10. alibaba&sol;canal 阿里巴巴 mysql 数据库 binlog 增量订阅&amp&semi;消费组件

    基于日志增量订阅&消费支持的业务: 数据库镜像 数据库实时备份 多级索引 (卖家和买家各自分库索引) search build 业务cache刷新 价格变化等重要业务消息 项目介绍 名称:ca ...