您的位置:首页 > 移动开发

java实现Flappy Bird游戏源代码

2019-01-15 00:03 826 查看

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

}

效果图:

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

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: