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();

}

}

}

效果图:

以上是 java实现Flappy Bird游戏源代码 的全部内容, 来源链接: utcz.com/z/358212.html

回到顶部