Answered step by step
Verified Expert Solution
Link Copied!
Question
1 Approved Answer

package flappybird; 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

package flappybird;

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 rect_column;

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

rect_column = new ArrayList();

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)

{

rect_column.add(new Rectangle(WIDTH + width + rect_column.size() * 300, HEIGHT - height - 120, width, height));

rect_column.add(new Rectangle(WIDTH + width + (rect_column.size() - 1) * 300, 0, width, HEIGHT - height - space));

}

else

{

rect_column.add(new Rectangle(rect_column.get(rect_column.size() - 1).x + 600, HEIGHT - height - 120, width, height));

rect_column.add(new Rectangle(rect_column.get(rect_column.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);

rect_column.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 < rect_column.size(); i++)

{

Rectangle column = rect_column.get(i);

column.x -= speed;

}

if (ticks % 2 == 0 && yMotion < 15)

{

yMotion += 2;

}

for (int i = 0; i < rect_column.size(); i++)

{

Rectangle column = rect_column.get(i);

if (column.x + column.width < 0)

{

rect_column.remove(column);

if (column.y == 0)

{

addColumn(false);

}

}

}

bird.y += yMotion;

for (Rectangle column : rect_column)

{

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(new Color(153,204,255));

g.fillRect(0, 0, WIDTH, HEIGHT);

g.setColor(new Color(255,255,255));

g.fillOval(50, 50, 100, 100);

g.setColor(new Color(156,93,82));

g.fillRect(0, HEIGHT - 120, WIDTH, 120);

g.setColor(new Color(128,255,0));

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

g.setColor(Color.red);

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

for (Rectangle column : rect_column)

{

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

}

}

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)

{

}

}

and 2nd class

package flappybird;

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

}

}

please add a milisecond timer and display it in the game left corner

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image
Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Inductive Databases And Constraint Based Data Mining

Authors: Saso Dzeroski ,Bart Goethals ,Pance Panov

2010th Edition

1489982175, 978-1489982179

More Books

Students explore these related Databases questions