java实现Flappy Bird游戏源代码

本文实例为大家分享了java实现Flappy Bird游戏的具体代码,供大家参考,具体内容如下

/*
2017/7/23
*/

import java.awt.Graphics;
//import java.util.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.Rectangle;
import java.awt.*;

import java.util.*;

import javax.swing.JFrame;
import javax.swing.Timer;
import javax.swing.*;

import javax.swing.JPanel;

class Renderer extends JPanel
{

 private static final long serialVersionUID = 1L;

 protected void paintComponent(Graphics g)
 {
 super.paintComponent(g);

 FlappyBird.flappyBird.repaint(g);
 }

}
public class FlappyBird implements ActionListener, MouseListener, KeyListener
{
 public static FlappyBird flappyBird;

 public final int WIDTH = 900, HEIGHT = 800;

 public Renderer renderer;

 public Rectangle bird;

 public ArrayList<Rectangle> columns; 

 public int ticks, yMotion, score;

 public boolean gameOver, started;

 public Random rand;

 public FlappyBird()
 {
 JFrame jframe = new JFrame();
 Timer timer = new Timer(20,this);

 renderer = new Renderer();
 rand = new Random();

 jframe.add(renderer);
 jframe.setTitle("Flappy Bird");
 jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 jframe.setSize(WIDTH,HEIGHT);
 jframe.addMouseListener(this);
 jframe.addKeyListener(this);
 jframe.setResizable(false);
 jframe.setVisible(true);

 bird = new Rectangle(WIDTH / 2 - 10, HEIGHT / 2 - 10, 20, 20);

 columns = new ArrayList<Rectangle>();

 addColumn(true);
 addColumn(true);
 addColumn(true);
 addColumn(true);

 timer.start();
 }

 public void addColumn(boolean start)
 {
 int space = 300;
 int width = 100;
 int height = 50 + rand.nextInt(300);

 if(start)
 {
 columns.add(new Rectangle(WIDTH + width + columns.size() * 300, HEIGHT - height - 120, width, height));
 columns.add(new Rectangle(WIDTH + width + (columns.size()-1)*300, 0, width, HEIGHT - height - space));
 }
 else
 {
 columns.add(new Rectangle(columns.get(columns.size() - 1).x + 600, HEIGHT - height - 120, width, height));
 columns.add(new Rectangle(columns.get(columns.size() - 1).x , 0, width, HEIGHT - height - space));
 }

 }

 public void paintColumn(Graphics g, Rectangle column)
 {
 g.setColor(Color.green.darker());
 g.fillRect(column.x, column.y, column.width, column.height);
 }

 public void jump()
 {
 if (gameOver)
 {
 bird = new Rectangle(WIDTH / 2 - 10, HEIGHT / 2 - 10, 20, 20);

 columns.clear();

 yMotion = 0;
 score = 0;

 addColumn(true);
 addColumn(true);
 addColumn(true);
 addColumn(true);

 gameOver = false;
 }

 if(!started)
 {
 started = true;
 }
 else if(!gameOver)
 {
 if(yMotion > 0)
 {
 yMotion = 0;
 }

 yMotion -= 10;
 }
 }

 public void actionPerformed(ActionEvent e)
 {

 int speed = 10;

 ticks++;

 if(started )
 {
 for( int i = 0; i < columns.size(); i++)
 {
 Rectangle column = columns.get(i);

 column.x -= speed;
 }

 if(ticks % 2 ==0 && yMotion < 15)
 {
 yMotion += 2;
 }

 for (int i = 0; i < columns.size(); i++)
 {
 Rectangle column = columns.get(i);

 if (column.x + column.width < 0)
 {
  columns.remove(column);
  if(column.y ==0)
  {
  addColumn(false);
  }
 }
 }

 bird.y += yMotion;

 for(Rectangle column : columns)
 {
 if(bird.x + bird.width / 2 > column.x + column.width / 2 - 5
 && bird.x + bird.width / 2 < column.x + column.width / 2 + 5
 && column.y == 0)
 {
  score++;
 } 

 if(column.intersects(bird))
 {
  gameOver = true;

  if(bird.x <= column.x)
  {
  bird.x = column.x - bird.width;
  }
  else
  {
  if(column.y != 0)
  {
  bird.y = column.y - bird.height;
  }
  else if(bird.y < column.height)
  {
  bird.y = column.height;
  }
  }
 }
 }

 if(bird.y > HEIGHT - 120 || bird.y < 0 )
 {
 gameOver = true;
 }

 if(bird.y + yMotion >= HEIGHT -120)//(gameOver)
 {
 bird.y = HEIGHT -120 - bird.height;
 }
 }
 renderer.repaint();
 }

 public void repaint(Graphics g)
 {
 //System.out.println("hello");
 g.setColor(Color.cyan);
 g.fillRect(0,0,WIDTH,HEIGHT);

 g.setColor(Color.orange);
 g.fillRect(0, HEIGHT - 120, WIDTH, 150);

 g.setColor(Color.green);
 g.fillRect(0, HEIGHT - 120, WIDTH, 20);

 g.setColor(Color.red);
 g.fillRect(bird.x, bird.y, bird.width, bird.height);

 for ( Rectangle column : columns )
 {
 paintColumn(g,column);
 }

 g.setColor(Color.white);
 g.setFont(new Font("Arial",1,70));

 if(!started)
 {
 g.drawString("Click to start!",90,HEIGHT / 2-50);
 }

 if(gameOver)
 {
 g.drawString("Game Over! You suck!",40,HEIGHT / 2-50);
 }

 if(!gameOver && started)
 {
 g.drawString(String.valueOf(score), WIDTH / 2, 100);
 }
 }

 public static void main(String[]args)
 {
 flappyBird = new FlappyBird();
 }

 public void mouseClicked(MouseEvent e)
 {
 jump();
 }
 public void mousePressed(MouseEvent e){}
 public void mouseReleased(MouseEvent e){}
 public void mouseEntered(MouseEvent e){}
 public void mouseExited(MouseEvent e){}

 public void keyPressed(KeyEvent e){}
 public void keyTyped(KeyEvent e){}
 public void keyReleased(KeyEvent e)
 {
 if(e.getKeyCode() == KeyEvent.VK_SPACE)
 {
 jump();
 }
 }

}

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现Flappy Bird小游戏

    本文实例为大家分享了C语言实现Flappy Bird小游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<time.h> #include<Windows.h> /********函数变量声明********/ #define PR_Box printf("■") #define PR_Gold printf(

  • C++版本简易Flappy bird

    大一,上学期学完了C,写了几个控制台游戏 这学期自学C++,由于学校课程第七周才有C++ 边学边写了这个小游戏,SDL 图形库完成的图形绘画 时间匆忙,BUG也有,代码效率比较低 和原作品还是很大的差别, 源代码在附件游戏文件夹中 演示图 #include <stdlib.h> #include<windows.h> #include <time.h> #include<conio.h> #include <iostream> #include

  • Unity实现Flappy Bird游戏开发实战

    本文实例为大家分享了Unity实现Flappy Bird游戏的具体代码,供大家参考,具体内容如下 参考:腾讯课程(零基础制作像素鸟) 环境:Unity2017.2.0f3 主界面(Main)的制作 没有什么技巧性 注意点: 1.写好Button的点击效果,并在UI上添加效果 2.切换界面的实现不需要通过load,直接设置SetActive()true or false 来的更快更效率 // 比如:当点击打开解释说明的按钮时候 public void clickOpenExplainScene()

  • Java实现Flappy Bird游戏源码

    本文实例为大家分享了Java实现Flappy Bird游戏的具体代码,供大家参考,具体内容如下 1.首先在mainActivity.xml中放置一个View,ID为viewDraw 2.开始编程,程序中自定义一个View类的子类,与viewDraw关联,程序除了放置如一个view控件,没有其他控件,程序上面的所有图片都是通过控制canvas画图实现 3.游戏是依据flappybird的游戏过程重新写的算法,功能与原版游戏相似,可能有些地方不足,完全是学习练习编程而已,做的不好见谅 4.原图片大小

  • C语言简易版flappy bird小游戏

    假期在家无聊,想随便码点东西,故有此简陋的小游戏诞生.觉着可能对初学C语言的小伙伴练习有点帮助,故写此博客.游戏界面如下: 首先,先画出整个小游戏实现的流程图,如下: 思路很简单,整个游戏界面是由一个大的char类型数组构成,更新数组的值然后不停的打印出来就形成了动态效果. 由上图看,大循环是保证游戏一直不断的进行下去,小循环是让小鸟的速度大于游戏界面里背景(由#构成的柱子)的速度(小鸟动四下柱子才动一下). 下面是具体代码(水平有限大家多多见谅,但是效果还是有的!) Bird.c文件 #inc

  • java实现flappy Bird小游戏

    本文实例为大家分享了java实现flappy Bird游戏的具体代码,供大家参考,具体内容如下 整个游戏由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

  • Qt实现Flappy Bird游戏

    简述 最近浏览网站的时候,忘记在哪里看的这个FlappyBird了,这个小游戏在之前小火了一段时间.今天用QT简单的实现了一把,然后在网上找了一些相关的切图,便进行了制作.难度不是很大,只是通过写这篇博客,能有点启发以及大家共同学习. 效果图 代码 主界面控制 MainWindow::MainWindow(QWidget *parent) : BasicWindow(parent) , m_startGame(false) { ui.setupUi(this); setAttribute(Qt:

  • C语言实现flappy bird游戏

    本文实例为大家分享了C语言实现flappy bird的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<conio.h> #include<windows.h> //定义全局变量 int high,width; //边界 int bird_x,bird_y; //小鸟坐标 int bar_y; //挡板坐标 int bar_xTop,bar_xDown; //挡板开口上下坐标 int score; //得分 void HideCu

  • python实现flappy bird游戏

    flappy bird最近火遍大江南北,教你用python写游戏的第一课就向它开刀了. 这个课程的基础是假定你有比较不错的编程功底,对python有一点点的基础. 一.准备工作 1.用python写游戏需要什么呢? 1)当然是python本身了,我用的是python2.7,不同版本大同小异. 2)pygame,这个非常重要,所有的核心都是基于这个lib的. 2.分析游戏 flappy bird这个游戏很简单,大致可以分为4个部分: 1)背景.背景分为两个,一个是bg,一个是land.bg就是那张

  • 纯JavaScript 实现flappy bird小游戏实例代码

    前言: <flappy bird>是一款由来自越南的独立游戏开发者Dong Nguyen所开发的作品,游戏于2013年5月24日上线,并在2014年2月突然暴红.2014年2月,<Flappy Bird>被开发者本人从苹果及谷歌应用商店撤下.2014年8月份正式回归APP STORE,正式加入Flappy迷们期待已久的多人对战模式.游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍. 正文: 接下来就是一步一步来实现它 步骤1:页面布局,这儿就不多说了,页面内容如下:

随机推荐