Flappy Bird java源代码

  • 更新时间:2020-03-13 12:12:56
  • 编辑:池玲然

本文实例为大家分享了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();
 }
 }
 
}

效果图:

java实现Flappy Bird游戏源代码

java实现Flappy Bird游戏源代码

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

相关教程

  • 济宁市Java培训课程都在学哪些技术

    济宁市Java培训课程都在学哪些技术,根据目前市场上互联网企业的需求,码农之家Java培训通过以下三个阶段,让学员由浅入深逐步学习。

    发布时间:2021-06-06

  • java开发中遇到的异常汇总详解

    这篇文章主要介绍了java开发中遇到的异常汇总详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    发布时间:2019-09-10

  • 码出高效:Java开发手册

    码出高效:Java开发手册

    引爆技术圈,全球瞩目的中国计算机民族图书,中国人自己原创的Java编程规范,希望未来社会发展的每一行代码都规范、合理、高效,马云、行癫、鲁肃亲笔推荐!

    大小:207.9 MBJava编程电子书

  • Java经典实例

    Java经典实例

    Java经典实例(第三版) 从lambda表达式、JavaFX 8,到网络编程和支持移动设备等方面,Java 8都有许多更新。包含了数百个经过实践验证的技巧,内容涵盖了广泛的Java主题,可帮助你快速进入编程

    大小:167.8 MBJava电子书

  • JavaScript前端开发案例教程

    JavaScript前端开发案例教程

    JavaScript是这种运用于Web前端开发的开发语言,具备简易、易懂、实用的特性,用JavaScript开发设计网页页面能够提高网页页面的参与性,为客户出示即时的、动态性的互动感受。 《 JavaScript前端

    大小:75.1 MBJS前端电子书

  • 深度解析Java游戏服务器开发

    深度解析Java游戏服务器开发

    以便协助想掌握新手入门服务器开发设计的从业者或式从业者快速把握Java服务器开发设计的技术性,这书从手机游戏的行业现状、Java技术性、手机游戏逻辑性、数据库系统、网络理论、服务器

    大小:314.4 MBJava开发电子书

  • Java 8基础应用与开发

    Java 8基础应用与开发

    《 Java8基础应用与开发 》包含Java8特点,知识结构图从入门到精通逐层加强,Q-DMS数据挖掘项目围绕本书,重视內容和实践活动,说道关键点和方式。结合实际成才全书的特性: 基础理论基础

    大小:188 MBJava8电子书

  • Java程序员面试宝典

    Java程序员面试宝典

    Java程序员面试宝典(第4版) 是《Java程序员面试宝典》的第4版。第4版在保留前三版数据结构、字符串处理、Java程序设计等主干内容的基础上,更新了部分程序员面试题目,内容主要取材于

    大小:78.6 MBJava面试电子书

  • Java学习指南

    Java学习指南

    《Java学习指南(第4版)(上、下册)》 是畅销Java学习指南的最新版,详细介绍了Java 6和Java 7的语言特性和API。本书全面介绍了Java的基础知识,力图通过完备地介绍Java语言、其类库、编程技术以及

    大小:179.5 MBJava电子书

  • Java JDK 9学习笔记

    Java JDK 9学习笔记

    本书全新改版升级至Java JDK 9,汇集了学员在学习Java 或认证考试时遇到的概念、操 作、应用等问题及解决方案,适合Java 的初、中级读者以及广大Java 应用开发人员阅读

    大小:325.3 MBJava电子书

用户留言