Flappy Bird Game In Java




How to make Flappy Bird game in java?

Create two new class and name it "FlappyBird" and "Renderer" as shown below


Source Code For "FlappyBird" class is given below:

import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.util.ArrayList;import java.util.Random;
import javax.swing.JFrame;import javax.swing.Timer;
public class FlappyBird implements ActionListener, MouseListener, KeyListener
{

    public static FlappyBird flappyBird;
    public final int WIDTH = 800, 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;        }
    }

    @Override    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 (column.y == 0 && bird.x + bird.width / 2 > column.x + column.width / 2 - 10 && bird.x + bird.width / 2 < column.x + column.width / 2 + 10)
                {
                    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)
            {
                bird.y = HEIGHT - 120 - bird.height;                gameOver = true;            }
        }

        renderer.repaint();    }

    public void repaint(Graphics g)
    {
        g.setColor(Color.cyan);        g.fillRect(0, 0, WIDTH, HEIGHT);
        g.setColor(Color.orange);        g.fillRect(0, HEIGHT - 120, WIDTH, 120);
        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, 100));
        if (!started)
        {
            g.drawString("Click to start!", 75, HEIGHT / 2 - 50);        }

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

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

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

    @Override    public void mouseClicked(MouseEvent e)
    {
        jump();    }

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

    @Override    public void mousePressed(MouseEvent e)
    {
    }

    @Override    public void mouseReleased(MouseEvent e)
    {
    }

    @Override    public void mouseEntered(MouseEvent e)
    {
    }

    @Override    public void mouseExited(MouseEvent e)
    {
    }

    @Override    public void keyTyped(KeyEvent e)
    {

    }

    @Override    public void keyPressed(KeyEvent e)
    {

    }

}


Source code for class "Renderer" is given below:

import java.awt.Graphics;
import javax.swing.JPanel;
public class Renderer extends JPanel
{

    private static final long serialVersionUID = 1L;
    @Override    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        FlappyBird.flappyBird.repaint(g);    }

}

Run the program & Enjoy!!

If you have any queries regarding the project please comment below and comment your suggestion also.

Thanks





Comments

Popular posts from this blog

Brick Breaker Game in JAVA

How to make C program to convert Fahrenheit into Celsius