整个游戏由3个类构成。Bird类,Pipe类,stage类
第一步:首先写一个Bird类
//鸟类
public class Bird {
private int flyHeight;//飞行高度
private int xpos;//距离y轴(窗口左边缘)的位置,
public static int Up=1;//向上飞
public static int Down=-1;//向下飞
public Bird()
{
flyHeight=200;
xpos=30;
}
public void fly(int direction)
{
if(direction==Bird.Up)
flyHeight-=20;//每次向上飞20m
if(direction==Bird.Down)
flyHeight+=20;//每次向下飞20m
}
public int getFlyHeight()//获得当前飞行高度
{
return flyHeight;
}
public int getXpos()//获得当前鸟的水平位置
{
return xpos;
}
public Boolean hit(Pipe pipe[])//检测是否碰到管道。只有在鸟经过管道的过程才有可能相撞
{
for(int i=0;i<pipe.length;i++)//遍历管道进行检测,是否相撞
{
if(getXpos()+20>=pipe[i].getXpos()&&getXpos()<=pipe[i].getXpos()+20)//鸟经过管道
if(flyHeight<pipe[i].getUpHeight()||flyHeight>pipe[i].getDownHeight())//鸟与管道相撞
return true;
}
return false;
}
}
第二步:写一个Pipe类,Pipe类 里有3个成员,upHeight表示顶管道端的高度,downHeight表示底端管道段的高度,同样要记录管道的水平位置。
public class Pipe {
private int upHeight;//表示顶管道端的高度
private int downHeight;//表示底端管道段的高度
private int xpos;
public Pipe()
{
upHeight=0;
downHeight=0;
xpos=0;
}
public Pipe(int maxHeight,int xpos)//给管道一个最大总长度(maxHeight)=upHeight+downHeight。还有管道的水平位置
{
double num;
num=Math.random();
while(num==0)
num=Math.random();
upHeight=(int) (maxHeight*num);//随机产生一个顶端管道段高度(<maxHeight)
downHeight=maxHeight-upHeight;//用总长度减去upHeight
this.xpos=xpos;
}
public void setXpos(int xpos)
{
this.xpos=xpos;
}
public int getXpos()
{
return xpos;
}
public int getUpHeight()
{
return upHeight;
}
public int getDownHeight()
{
return downHeight;
}
public String toSting()
{
return "("+upHeight+","+downHeight+")";
}
}
最后一步,写好舞台类,即操作游戏的类
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.lang.reflect.Array;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class stage extends JPanel{
private Pipe pipe[];//管道数组
private Bird bird;//鸟
private int space;//上下管道之间的间隔
public JLabel scoreBoard;//计分面板
private int score;//计分
public stage()
{
space=150;//<span style="font-family: Arial, Helvetica, sans-serif;">上下管道之间的间隔为150</span>
score=0;
scoreBoard=new JLabel("得分:"+score);
pipe=new Pipe[5];//总共5跟根
for(int i=0;i<pipe.length;i++)
{
pipe[i]=new Pipe(400-space,i*130+110);//柱子每隔110m放一根
//System.out.println(pipe[i].toSting());
}
bird=new Bird();
}
public void play()
{
Timer timer=new Timer();//定时任务,即使不操作也能动
timer.schedule(new TimerTask()
{
public void run()
{
if(bird.hit(pipe))//碰到,重置所有数据成员
{
//System.out.println("碰到了");
score=0;
scoreBoard.setText("得分:"+score);
pipe=new Pipe[10];
for(int x=0;x<pipe.length;x++)
pipe[x]=new Pipe(400-space,x*130+110);
bird=new Bird();
}
else{//没碰到
//System.out.println("没碰到");
bird.fly(Bird.Down);//鸟默认向下飞
for(int x=0;x<pipe.length;x++)//管道每次往前移动10m,造成鸟向右移动的效果
{
pipe[x].setXpos(pipe[x].getXpos()-10);
}
score=score+10;
scoreBoard.setText("得分:"+score);
}
repaint();
}
}, 0, 1000);//在不操作的情况下,每一秒飞一次
this.requestFocus();//获取”输入“焦点
this.addKeyListener(new KeyAdapter() {//加入键盘时间
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==38)
<span style="white-space:pre"> </span>action(Bird.Up);
else if(e.getKeyCode()==40)
action(Bird.Down);
});
}
public void action(int direction)//按下上下方向键后执行的函数
{
if(bird.hit(pipe))
{
//System.out.println("碰到了");
score=0;
scoreBoard.setText("得分:"+score);
pipe=new Pipe[10];
for(int x=0;x<pipe.length;x++)
pipe[x]=new Pipe(400-space,x*130+110);
bird=new Bird();
}
else{
//System.out.println("没碰到");
if(direction==Bird.Up)
{
bird.fly(Bird.Up);
}
else if(direction==Bird.Down)
{
bird.fly(Bird.Down);
}
for(int x=0;x<pipe.length;x++)//管道每次往前移动10m,造成鸟向右移动的效果
{
pipe[x].setXpos(pipe[x].getXpos()-10);
}
score=score+10;
scoreBoard.setText("得分:"+score);
}
repaint();
}
public void paint(Graphics g)
{
g.setColor(g.getColor());
g.fillRect(0, 0, getWidth(), getHeight());//用默认颜色清屏
g.setColor(Color.red);
g.fill3DRect(bird.getXpos(), bird.getFlyHeight(), 20, 20, true);//红色画鸟
g.setColor(Color.green);
for(int i=0;i<pipe.length;i++)//绿色画管道
{
g.fill3DRect(pipe[i].getXpos(), 0, 20, pipe[i].getUpHeight(), true);
g.fill3DRect(pipe[i].getXpos(),pipe[i].getUpHeight()+space, 20, pipe[i].getDownHeight(), true);
}
if(pipe[0].getXpos()+20<=0)//如果第一根管道出界,就删掉第一根管道,把后面的往前挪,再新创建一根管道
{
for(int i=1;i<pipe.length;i++)
pipe[i-1]=pipe[i];
pipe[pipe.length-1]=new Pipe(400-space,(pipe.length-1)*130+110);
//System.out.println(pipe[pipe.length-1].toSting());
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jf=new JFrame("flappyBird");
stage app=new stage();
jf.setLayout(null);
app.setBounds(0,20,600,400);
app.scoreBoard.setBounds(0, 0, 100, 20);
jf.add(app);
jf.add(app.scoreBoard);
jf.setSize(610, 460);
jf.setVisible(true);
app.play();//游戏开始
}
}
程序截图:
分享到:
相关推荐
总的来说,用Java实现Flappy Bird小游戏涉及到Java基础语法、图形用户界面设计、物理模拟、事件处理、动画制作、碰撞检测、计分系统以及音频处理等多个方面的知识。这个项目不仅能够锻炼编程技能,还能让你对游戏...
1. **Java GUI编程**:Flappy Bird游戏的界面通常是使用Java的Swing或JavaFX库构建的。这些库提供了创建窗口、按钮、图像和动画的工具。开发者需要了解如何使用这些组件来创建游戏的主视图,并处理用户交互,如点击...
项目:Java版Flappy Bird游戏及源代码 Flappy Bird游戏是一款简单的街机游戏。这整个游戏或项目使用Java和一些Swing组件来使其看起来惊人。你必须让游戏的主角回到家中。这是使用Swing组件的完美示例。 关于项目 ...
FlappyBird小游戏的Java版.zipFlappyBird小游戏的Java版.zip FlappyBird小游戏的Java版.zipFlappyBird小游戏的Java版.zip FlappyBird小游戏的Java版.zipFlappyBird小游戏的Java版.zip FlappyBird小游戏的Java版....
《Flappy Bird游戏源码解析——Java编程篇》 Flappy Bird是一款在2013年由越南开发者Dong Nguyen推出的简单却又极具挑战性的手机游戏。它以其独特的像素艺术风格和令人上瘾的游戏机制赢得了全球玩家的喜爱。本篇将...
Java飞扬的小鸟(Flappy Bird Redux)是一款基于Java编程语言开发的2D游戏,是对经典游戏Flappy Bird的重新实现。这个游戏源码提供了一个学习Java游戏开发的实践平台,可以帮助开发者深入了解Java图形用户界面(GUI...
《用JAVA编写的FlappyBird游戏》是一款基于Java编程语言开发的小型休闲游戏,它复刻了经典手机游戏Flappy Bird的玩法。游戏的核心在于控制小鸟在不断出现的管子间穿梭,通过点击屏幕使小鸟上升,松开则下落,玩家的...
"java实现Flappy Bird游戏源代码" 本文主要讲解了使用Java语言实现Flappy Bird游戏的源代码,提供了一个完整的游戏示例代码,供有兴趣的读者参考。下面是相关知识点的总结: 1. Java基础知识:在这个示例代码中,...
FlappyBird游戏中的主角(小鸟)、环境(管道)和游戏状态(分数、游戏结束)都可以抽象为不同的类。 其次,游戏循环是FlappyBird的核心,通常采用主循环(Main Loop)模式,包括更新游戏状态、渲染画面、处理用户...
以下是对实现Flappy Bird游戏的关键知识点的详细说明: 1. **自定义View类**: 在Android开发中,为了实现游戏界面,通常需要创建一个自定义的View子类。在这个项目中,我们创建了一个名为`MyView`的自定义View,...
《基于Java Swing实现的FlappyBird游戏:深入解析与学习指南》 在计算机科学的世界里,游戏开发是一项既富有挑战性又充满乐趣的任务。对于学习Java编程的学生来说,使用Java Swing构建小型游戏如FlappyBird,是提升...
《Flappy Bird游戏素材与源码解析》 Flappy Bird是一款简单却极具挑战性的移动平台游戏,由越南开发者Dong Nguyen开发。它以其独特的游戏机制和极高的难度在全球范围内引起了热潮。在这里,我们拥有的是自己制作的...
而“FlappyBird游戏cocos2dx版.rar”和“flappyBird游戏 Unity版.zip”则是用不同游戏引擎(Cocos2d-x和Unity)开发的版本,这为我们提供了对比不同引擎开发同一游戏的实例,有助于学习各种开发工具的特点和适用场景...
【作品名称】:基于Java基础类库实现的Flappy Bird游戏 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:通过 java -...
【作品名称】:基于Java基础类库实现的Flappy Bird游戏 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 通过 java -...
《Java实现Flappy Bird游戏详解》 Flappy Bird是一款风靡全球的休闲游戏,以其简单却又极具挑战性的玩法吸引了无数玩家。本篇文章将深入探讨如何使用Java编程语言来实现这款经典游戏,帮助开发者理解游戏逻辑并掌握...
《Java Swing实现的Flappy Bird游戏详解》 Flappy Bird是一款在2013年由越南开发者Dong Nguyen推出的简单却极具挑战性的手机游戏,因其独特的玩法和极高的难度在全球范围内引发了热潮。本项目以Java的Swing库为开发...
《FlappyBird注释版_java.rar》是一款基于Java编程语言的高仿FlappyBird小游戏,其特点是包含了详尽的代码注释,对于学习Java游戏开发的初学者来说是一份宝贵的资源。FlappyBird是一款广受欢迎的像素风格休闲游戏,...
《FlappyBird_byJava》是一款基于Java编程语言开发的小游戏,专为初学者设计,旨在帮助他们提升编程技能,特别是Java编程技术。本项目的核心目标是实现一款与流行游戏Flappy Bird类似的简单版游戏,玩家通过控制小鸟...