
In this article, we will create the famous Chrome Dino Game in Java with Swing. We all have played the Dino game in the browser when the internet goes off. It’s a simple game where the player must keep the dinosaur safe from hitting obstacles by jumping over them.
Features
- The dinosaur can jump by pressing the Enter key.
- When the game is over, the player can restart it by pressing the Space bar key.
Code for Dino Game in Java
Create a folder for the project with a name of your choice. Create a file within this folder with the name dino.java. Please copy and paste the below code and run it.
import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.Frame;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.ArrayList;import java.util.List;import java.util.Random;import javax.swing.AbstractAction;import javax.swing.ActionMap;import javax.swing.InputMap;import javax.swing.JPanel;import javax.swing.KeyStroke;import javax.swing.Timer;import java.awt.event.KeyListener;class Game extends Frame implements KeyListener{final int D_W = 1200;final int D_H = 550;static int unit = 10;Color colorDinosaur = Color.GRAY;Color colorGameOver1 = Color.black;Color colorGameOver2 = Color.yellow;Color colorCactus1 = Color.gray;Color colorCactus2 = Color.gray;int jump = 0;int jumpY = 0;int y = 0;boolean onEnterPresses = false;boolean down = false;List<MyGraph> myGraphs = new ArrayList<>();int currentDinosaurX = 0;int currentDinosaurY = 0;boolean gameOver = false;DrawPanel drawPanel = new DrawPanel();public static void main(String args[]) {new Game();}public Game() {super("Run Dino Run");setSize(1200, 550); // set the size of the windowsetVisible(true);addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {dispose();System.exit(0);}});addKeyListener(this);initCactusG();ActionListener listener = new ActionListener() {public void actionPerformed(ActionEvent e) {if (!gameOver) {if (jump >= D_W) {jump = 0;initCactusG();drawPanel.repaint();} else {jump += 10;drawPanel.repaint();}}}};Timer timer = new javax.swing.Timer(40, listener);timer.start();ActionListener listenerD = new ActionListener() {public void actionPerformed(ActionEvent e) {if (!gameOver) {if (onEnterPresses) {if (down) {jumpY -= 20;} else {jumpY += 20;}}if (jumpY >= 280) {down = true;}if (jumpY <= 0) {onEnterPresses = false;down = false;jumpY = 0;}}}};Timer timerD = new javax.swing.Timer(80, listenerD);timerD.start();add(drawPanel);pack();// setDefaultCloseOperation(EXIT_ON_CLOSE);setLocationRelativeTo(null);setVisible(true);}// create the cactus on random positionsprivate void initCactusG() {Random rr = new Random();int nbr = 2;// rr.nextInt(2)+1 ;;int x_ = 10;int y_ = 100;int h_ = 60;int p_ = 10;myGraphs = new ArrayList<Game.MyGraph>();for (int it = 0; it < nbr; it++) {Random r = new Random();int step = r.nextInt(10) + 1;MyGraph myGraph = new MyGraph();myGraph.x_ = x_ * 30 + step * 10 + 600;myGraph.h_ = 10 + (6 * step) + 2;myGraph.y_ = 300 - h_;myGraph.p_ = 8 + step / 2;myGraphs.add(myGraph);}}// draw the cactusprivate void drawCactus(Graphics g) {int x = 0;int y = 0;int h = 0;int p = 0;for (MyGraph myGraph : myGraphs) {x = myGraph.x_;h = myGraph.h_;y = myGraph.y_;p = myGraph.p_;int maxH = 180;int i = p * 2 + 40;int j = p * 2 + 40;int y1 = y + 40;int y2 = y + 60;if (x + j - jump < 0) {jump = 0;}draw(g, x - i - jump, y1, h, p);draw(g, x - jump, y, maxH, p * 2);draw(g, x + j - jump, y2, h, p);drow2(g, x - jump, h, p, i, j, y1, y2);}}// on game over draw the game over textprivate void gameOver(Graphics g) {Graphics2D graph = (Graphics2D) g;graph.setPaint(colorGameOver1);graph.setFont(new Font("MV Boli", 20, 50));graph.drawString("Game Over", 550, 150);//restartGraphics2D graph1 = (Graphics2D) g;graph1.setPaint(colorGameOver1);graph1.setFont(new Font("MV Boli", 20, 50));graph1.drawString("Press Space key to restart!!", 350, 250);}// restart the gameprivate void restartGame(Graphics g) {new Game();}// draw the sun on the skyprivate void drawSun(Graphics g) {Graphics2D sun1 = (Graphics2D) g;sun1.setPaint(new Color(255, 255, 0));sun1.fillArc(900, 70, 80, 80, 90, 180);Graphics2D sun2 = (Graphics2D) g;sun2.setPaint(new Color(255, 255, 153));sun2.fillArc(900, 70, 80, 80, 270, 180);}// draw the cactusprivate void drow2(Graphics g, int x, int h, int p, int i, int j, int y1, int y2) {Graphics2D gsds = (Graphics2D) g;gsds.setPaint(colorCactus1);gsds.fillRect(x - i + p, y1 + h, i, p);Graphics2D gsdds = (Graphics2D) g;gsdds.setPaint(colorCactus2);gsdds.fillRect(x - i + 2 * p, y1 + h - p, i - 2 * p, p);Graphics2D gsd2 = (Graphics2D) g;gsd2.setPaint(colorCactus2);gsd2.fillRect(x + p * 2, y2 + h, j - p, p);Graphics2D gsd3 = (Graphics2D) g;gsd3.setPaint(colorCactus1);gsd3.fillRect(x + p * 4, y2 + h - p, j - 4 * p, p);}// draw the surfaceprivate void drawSol(Graphics g, int x, int y, int maxH) {Graphics2D sol = (Graphics2D) g;sol.setPaint(Color.orange);sol.fillRect(0, y + maxH - 20, 1700, 100);}// draw the dinausorprivate void drawDinausor(Graphics g, int y) {int xDinausor = 180;int step = 1;g.setColor(colorDinosaur);currentDinosaurX = xDinausor;currentDinosaurY = y;drawRaw(g, xDinausor, y, 2, 1);drawRaw(g, xDinausor + 4 * unit, y, 2, 1);drawRaw(g, xDinausor, y - step * unit, 1, 1);drawRaw(g, xDinausor + 4 * unit, y - step * unit, 1, 1);step++;drawRaw(g, xDinausor, y - step * unit, 2, 1);drawRaw(g, xDinausor + 3 * unit, y - step * unit, 2, 1);step++;drawRaw(g, xDinausor, y - step * unit, 5, 1);step++;drawRaw(g, xDinausor - unit, y - step * unit, 6, 1);step++;drawRaw(g, xDinausor - 2 * unit, y - step * unit, 8, 1);step++;drawRaw(g, xDinausor - 3 * unit, y - step * unit, 10, 1);step++;drawRaw(g, xDinausor - 4 * unit, y - step * unit, 11, 1);drawRaw(g, xDinausor + (11 + 1 - 4) * unit, y - step * unit, 1, 1);step++;drawRaw(g, xDinausor - 4 * unit, y - step * unit, 3, 1);drawRaw(g, xDinausor + (5 - 4) * unit, y - step * unit, 8, 1);step++;drawRaw(g, xDinausor - 4 * unit, y - step * unit, 2, 1);drawRaw(g, xDinausor + (6 - 4) * unit, y - step * unit, 5, 1);step++;drawRaw(g, xDinausor - 4 * unit, y - step * unit, 1, 1);drawRaw(g, xDinausor + (7 - 4) * unit, y - step * unit, 4, 1);step++;drawRaw(g, xDinausor - 4 * unit, y - step * unit, 1, 1);drawRaw(g, xDinausor + (8 - 4) * unit, y - step * unit, 7, 1);step++;drawRaw(g, xDinausor + (8 - 4) * unit, y - step * unit, 4, 1);step++;drawRaw(g, xDinausor + (8 - 4) * unit, y - step * unit, 8, 1);step++;drawRaw(g, xDinausor + (8 - 4) * unit, y - step * unit, 2, 1);drawRaw(g, xDinausor + (11 - 4) * unit, y - step * unit, 5, 1);step++;drawRaw(g, xDinausor + (8 - 4) * unit, y - step * unit, 8, 1);step++;drawRaw(g, xDinausor + (9 - 4) * unit, y - step * unit, 6, 1);step++;}private void drawRaw(Graphics g, int Dinausor, int y, int w, int h) {Graphics2D sun16 = (Graphics2D) g;sun16.fillRect(Dinausor, y, w * unit, h * unit);}private void draw(Graphics g, int x, int y, int h, int p) {if (x <= currentDinosaurX && x + p >= currentDinosaurX && y <= currentDinosaurY) {gameOver(g);gameOver = true;return;}Graphics2D gcd = (Graphics2D) g;// Green 0 -204- 0gcd.setPaint(colorCactus1);gcd.fillRect(x, y, p, h);Graphics2D gsd = (Graphics2D) g;// Very dark green 0 -102- 0gsd.setPaint(colorCactus2);gsd.fillRect(x + p, y, p, h);Graphics2D gssd = (Graphics2D) g;// Very dark green 0 -102- 0gssd.setPaint(colorCactus2);gssd.fillArc(x, y - p, p * 2, p * 2, 1, 90);Graphics2D gzssd = (Graphics2D) g;gzssd.setPaint(colorCactus1);gzssd.fillArc(x, y - p, p * 2, p * 2, 90, 90);Graphics2D ghssd = (Graphics2D) g;ghssd.setPaint(colorCactus1);ghssd.fillArc(x, y + h - p, p * 2, p * 2, 180, 90);Graphics2D ghzssd = (Graphics2D) g;ghzssd.setPaint(colorCactus2);ghzssd.fillArc(x, y + h - p, p * 2, p * 2, 270, 90);}private class DrawPanel extends JPanel {public DrawPanel() {MoveAction action = new MoveAction("onEnter");String ACTION_KEY = "onEnter";KeyStroke W = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);InputMap inputMap = getInputMap(WHEN_IN_FOCUSED_WINDOW);inputMap.put(W, ACTION_KEY);ActionMap actionMap = getActionMap();actionMap.put(ACTION_KEY, action);}protected void paintComponent(Graphics g) {super.paintComponent(g);drawCactus(g);drawSun(g);drawSol(g, 100, 250, 180);drawDinausor(g, 400 - jumpY);if (gameOver) {gameOver(g);}}public Dimension getPreferredSize() {return new Dimension(D_W, D_H);}}private class MyGraph {int x_ = 10;int y_ = 100;int h_ = 60;int p_ = 10;}class MoveAction extends AbstractAction {public MoveAction(String name) {putValue(NAME, name);}public void actionPerformed(ActionEvent actionEvent) {onEnterPresses = true;drawPanel.repaint();}}@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void keyPressed(KeyEvent e) {if(e.getKeyCode() == KeyEvent.VK_SPACE) {if(gameOver){gameOver = false;restartGame(getGraphics());}}}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub}}
Output for Dino Game in Java
Image Output:

Video Output:
Conclusion
This ends our article on Dino Game in Java. I hope this was helpful and easy to follow. You must also check these projects to get a good hold of building applications in Java.
Thank you for visiting our website.
Also Read:
- Dino Game in Java
- Java Games Code | Copy And Paste
- Supply Chain Management System in Java
- Survey Management System In Java
- Phone Book in Java
- Email Application in Java
- Inventory Management System Project in Java
- Blood Bank Management System Project in Java
- Electricity Bill Management System Project in Java
- CGPA Calculator App In Java
- Chat Application in Java
- 100+ Java Projects for Beginners 2023
- Airline Reservation System Project in Java
- Password and Notes Manager in Java
- GUI Number Guessing Game in Java
- How to create Notepad in Java?
- Memory Game in Java
- Simple Car Race Game in Java
- ATM program in Java
- Drawing Application In Java
- Tetris Game in Java
- Pong Game in Java
- Hospital Management System Project in Java
- Ludo Game in Java
- Restaurant Management System Project in Java
- Flappy Bird Game in Java
- ATM Simulator In Java
- Brick Breaker Game in Java
- Best Java Roadmap for Beginners 2023
- Snake Game in Java