
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 window
setVisible(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 positions
private 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 cactus
private 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 text
private 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);
//restart
Graphics2D 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 game
private void restartGame(Graphics g) {
new Game();
}
// draw the sun on the sky
private 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 cactus
private 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 surface
private 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 dinausor
private 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- 0
gcd.setPaint(colorCactus1);
gcd.fillRect(x, y, p, h);
Graphics2D gsd = (Graphics2D) g;
// Very dark green 0 -102- 0
gsd.setPaint(colorCactus2);
gsd.fillRect(x + p, y, p, h);
Graphics2D gssd = (Graphics2D) g;
// Very dark green 0 -102- 0
gssd.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();
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_SPACE) {
if(gameOver){
gameOver = false;
restartGame(getGraphics());
}
}
}
@Override
public 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



