FlappyBird_Java代码.doc_第1页
FlappyBird_Java代码.doc_第2页
FlappyBird_Java代码.doc_第3页
FlappyBird_Java代码.doc_第4页
FlappyBird_Java代码.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

FlappyBird全Java代码实现及全详细注释效果截图全部文档结构截图:第一个java文件:package game;import java.awt.image.BufferedImage;import java.io.IOException;import javax.imageio.ImageIO;public class Bird public int x;public int y;/图片数组,用来存放组成鸟飞行动画的图片public BufferedImage imgs =new BufferedImage8;public BufferedImage img;/鸟的图片public int width;public int height;public int size;public int g;/重力加速度public double s;/竖直移动位移public double speed;/初始速度public double t;/时间间隔public double alpha;/鸟倾斜的角度public Bird()/加载鸟的图片try for(int i=0;iimgs.length;i+)/将图片存入数组中imgsi = ImageIO.read(this.getClass().getResource(/img/+i+.png);/设置默认显示图片(初始显示的图片)img = imgs0;/获取图片的宽度width = img.getWidth();/获取图片的高度height = img.getHeight();/设置鸟的横纵坐标x = 152;y = 280;size = 40;g=4;/如果想让鸟下落的快,增加t=0.25;speed=20; catch (IOException e) e.printStackTrace();int index;/表示显示第几张图片public void setup() index +;img = imgs(index/10)%8;/竖直上抛运动/s=V0*t-1/2*g*t*t/v=V0-g*t;public void fly() / TODO Auto-generated method stubdouble v0=speed;/计算t秒后的速度double v=v0-g*t;/作为下次移动初始速度speed =v;/计算垂直位移s=v0*t-0.5*g*t*t;/让鸟移动位移y=y-(int)s;/鸟飞行的时候给他一个角度alpha=Math.atan(s/20);/x显示鸟飞行时的动画index +;img = imgs(index/10)%8;public void flappy() / TODO Auto-generated method stubspeed=20;/是否撞击了竹子public boolean hit(Colum c1) / TODO Auto-generated method stubint x1=c1.x-c1.width/2-size/2;int x2=c1.x+c1.width/2+size/2;int y1=c1.y-c1.gap/2+size/2;int y2=c1.y+c1.gap/2-size/2;if(xx1xx2)if(yy1yy2)return false;return true;return false;/是否撞击了地面public boolean hit(Ground ground) / TODO Auto-generated method stubreturn (y+height/2)ground.y;第二个java文件package game;import javax.swing.JFrame;/* * 窗体 * java中的窗体类:JFrame * author Administrator * */public class BirdFrame extends JFrame/定义游戏面板BirdPanel panel ;/构造方法,初始化窗体属性public BirdFrame()/创建面板对象panel = new BirdPanel();/添加面板add(panel);/设置标题setTitle(飞扬的小鸟);/设置大小setSize(432,674);/设置位置(据中)setLocationRelativeTo(null);/设置不允许改变窗体大小setResizable(false);/设置关闭窗口时退出程序setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/设置显示界面setVisible(true);/程序入口public static void main(String args) /创建窗体对象BirdFrame frame = new BirdFrame();frame.panel.action();第三个java文件package game;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JPanel;/* * 面板类:游戏界面 * author Administrator * */public class BirdPanel extends JPanel/定义第一根柱子Colum c1;Colum c2;/定义背景图片BufferedImage background;/定义开始图片BufferedImage startImage;/定义结束图片BufferedImage overImage;/定义地板Ground ground ;/定义鸟Bird bird ;/定义分数int score;/判断游戏是否结束boolean gameover;/判断游戏是否开始boolean start;/构造函数,初始化界面属性public BirdPanel()try /创建第一根主子对象c1=new Colum(1);/第二根柱子c2=new Colum(2);/创建地板对象ground = new Ground();/创建鸟对象bird = new Bird();/加载图片background = ImageIO.read(this.getClass().getResource(/img/bg.png);startImage = ImageIO.read(this.getClass().getResource(/img/start.png);overImage=ImageIO.read(this.getClass().getResource(/img/gameover.png); catch (IOException e) e.printStackTrace();Overridepublic void paint(Graphics g) super.paint(g);/g.drawString(sss,0,0);/画图片(图片,横坐标,纵坐标,null)g.drawImage(background, 0, 0, null);if(!start)/游戏没开始的话就画开始图片g.drawImage(startImage,0,0,null);/先画哪个哪个就在下面/画柱子g.drawImage(c1.img,c1.x-c1.width/2,c1.y-c1.height/2,null);g.drawImage(c2.img,c2.x-c2.width/2,c2.y-c2.height/2,null);/获得2D画笔Graphics2D g2=(Graphics2D)g;/旋转鸟的坐标g2.rotate(-bird.alpha,bird.x,bird.y);/画鸟g.drawImage(bird.img,bird.x-bird.width/2,bird.y-bird.height/2, null);/换回来g2.rotate(bird.alpha,bird.x,bird.y);/画地板g.drawImage(ground.img, ground.x,ground.y, null);/设置大小Font font=new Font(楷体,Font.BOLD,30);g.setFont(font);g.setColor(Color.white);/划分数表g.drawString(分数:+score,10 , 30);if(gameover)/游戏结束,画结束图片g.drawImage(overImage,0,0,null);/启动,控制游戏public void action()/创建鼠标监听器MouseListener listener = new MouseAdapter() /鼠标按下去会调用的方法Overridepublic void mousePressed(MouseEvent e) if(gameover)/如果游戏结束/重新启动游戏reStart();else/游戏没结束/游戏开始start = true;bird.flappy();/将监听器添加到面板中addMouseListener(listener);/一直刷新界面while(true)if(!gameover)if(start)/如果游戏没有结束,并且游戏开始了/让地板移动ground.setup();/让鸟飞bird.setup();bird.fly();/让主子移动c1.setup();c2.setup();/增加难度,让第二根柱子上下移动/c2.setupY();/穿过一个柱子得一分if(bird.x=c1.x|bird.x=c2.x)score+;/如果鸟撞击柱子或者地面,游戏结束if(bird.hit(c1)|bird.hit(c2)|bird.hit(ground)gameover=true;/游戏结束repaint();try Thread.sleep(10); catch (InterruptedException e1) e1.printStackTrace();/重新启动游戏protected void reStart() / TODO Auto-generated method stub/创建第一根主子对象c1=new Colum(1);/第二根柱子c2=new Colum(2);/创建地板对象ground = new Ground();/创建鸟对象bird = new Bird();/将start重新设置为falsestart=false;/将gameover设置为falsegameover=false;/将分数清零score=0;第四个java文件package game;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;/* * 柱子类 * */public class Colum public int x;public int y;public BufferedImage img;public int width;public int height;public int distance;/柱子间的间距public int gap;/柱子的缝隙/随机数生成器public Random rd=new Random();/index表示屏幕上第几根柱子/增加游戏难度可以增加柱子数,同时缩小柱子之间的间距public Colum(int index)/加载图片try img=ImageIO.read(this.getClass().getResource(/img/column.png);width=img.getWidth();height=img.getHeight();distance=245;gap=144;/让主子的初始位置处在屏幕的最右端以外/index=1huo2;x=(index-1)*distance+(432+width/2);/随机柱子的纵坐标y= rd.nextInt(250)+132; catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();/让主子移动public void setup() / TODO Auto-generated method stub/一次移动4,柱子的移动速度和地板的不一样/x-=4;/和地板一样的移动速度x-;if(x=-width)x=2*distance-width/2;y=rd.nextInt(250)+132;/第二根柱子上下移动的方法public void setupY() / TODO Auto-generated method stubx-;y-;if(x=-width)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论