How to Build a Dice Game in Java Android? (original) (raw)

Last Updated : 23 Jul, 2025

In this article, we will be building a Dice Game Project using **Java/Kotlin and XML in Android. The Dice Game is based on a two-player dice game. Both dices are rolled and the winner result is displayed in a textview. There will be a single activity in this application. The result and a roll button will be displayed at the bottom.

Note that we are going to implement this project using **Java and **Kotlin.

How-to-Build-a-Dice-Game-in-Java-Android_

Step by Step Implementation

**Step 1: Create a New Project

To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio.

**Step 2:Add Dice images to drawable folder

All the dice images are listed below. Save them in your drawable folder in resources. Go to the **app > res > drawable and paste the following files:

Step 3: Working with the activity_main.xml file

The XML codes are used to build the structure of the activity as well as its styling part. It contains a **TextView at the very top of the activity. Then it contains two **ImageView, each displaying the image of the rolled dice. At the bottom of the activity, there is a **Button to roll the dice and a TextView to display the result.

Below is the code for the **activity_main.xml file.

**activity_main.xml:

activity_main.xml `

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="32dp"
    android:text="DICE"
    android:textColor="@color/black"
    android:textSize="32sp"
    android:textStyle="bold"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp"
    android:text="Player A"
    android:textColor="@color/black"
    android:textSize="24sp"
    android:textStyle="bold"
    app:layout_constraintBottom_toTopOf="@+id/firstDice"
    app:layout_constraintEnd_toEndOf="@+id/firstDice"
    app:layout_constraintStart_toStartOf="@+id/firstDice" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Player B"
    android:textColor="@color/black"
    android:textSize="24sp"
    android:textStyle="bold"
    app:layout_constraintBottom_toBottomOf="@+id/textView"
    app:layout_constraintEnd_toEndOf="@+id/secondDice"
    app:layout_constraintStart_toStartOf="@+id/secondDice"
    app:layout_constraintTop_toTopOf="@+id/textView" />


<ImageView
    android:id="@+id/firstDice"
    android:layout_width="140dp"
    android:layout_height="140dp"
    android:padding="10dp"
    android:src="@drawable/dice6"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/secondDice"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<ImageView
    android:id="@+id/secondDice"
    android:layout_width="140dp"
    android:layout_height="140dp"
    android:padding="10dp"
    android:src="@drawable/dice6"
    app:layout_constraintBottom_toBottomOf="@+id/firstDice"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@id/firstDice"
    app:layout_constraintTop_toTopOf="@+id/firstDice" />

<Button
    android:id="@+id/rollButton"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_margin="48dp"
    android:backgroundTint="@color/black"
    android:text="ROLL"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

<TextView
    android:id="@+id/winnerTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Draw"
    android:textColor="@color/black"
    android:textSize="24sp"
    android:textStyle="bold"
    app:layout_constraintBottom_toTopOf="@+id/rollButton"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/firstDice" />

</androidx.constraintlayout.widget.ConstraintLayout>

`

Step 4: Working with the MainActivity file

We will create an array inside the file that will contain all the images of the dice. Then we will call **onClickListener() for the button and generate two random numbers using the **Random function. Then we will check the two numbers and display the result respectively. Also, we will set the two images from the array. Below is the code for the **MainActivity file. Comments are added inside the code to understand the code in more detail.

**MainActivity File:

MainActivity.java `

package org.geeksforgeeks.demo;

import android.os.Bundle; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import java.util.Random;

public class MainActivity extends AppCompatActivity {

private Button button;
private ImageView firstDice;
private ImageView secondDice;
private TextView winnerTextView;
private Random random = new Random();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // array to store dice images
    int[] dice = {
            R.drawable.dice1, R.drawable.dice2, R.drawable.dice3,
            R.drawable.dice4, R.drawable.dice5, R.drawable.dice6
    };

    // get the references of views
    button = findViewById(R.id.rollButton);
    firstDice = findViewById(R.id.firstDice);
    secondDice = findViewById(R.id.secondDice);
    winnerTextView = findViewById(R.id.winnerTextView);

    // call the on click function
    button.setOnClickListener(v -> {
        // generate two random numbers
        // using Random function
        int num1 = random.nextInt(6);
        int num2 = random.nextInt(6);

        // set the images from the array by the index
        // position of the numbers generated
        firstDice.setImageResource(dice[num1]);
        secondDice.setImageResource(dice[num2]);

        if (num1 > num2) {
            winnerTextView.setText("Player A Wins");
        } else if (num1 < num2) {
            winnerTextView.setText("Player B Wins");
        } else {
            winnerTextView.setText("Draw");
        }
    });
}

}

MainActivity.kt

package org.geeksforgeeks.demo

import android.os.Bundle import android.widget.Button import android.widget.ImageView import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import java.util.Random

class MainActivity : AppCompatActivity() { private lateinit var button: Button private lateinit var firstDice: ImageView private lateinit var secondDice: ImageView private lateinit var winnerTextView: TextView private val random = Random()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // array to store dice images
    val dice = intArrayOf(
        R.drawable.dice1, R.drawable.dice2, R.drawable.dice3,
        R.drawable.dice4, R.drawable.dice5, R.drawable.dice6
    )

    // get the references of views
    button = findViewById(R.id.rollButton)
    firstDice = findViewById(R.id.firstDice)
    secondDice = findViewById(R.id.secondDice)
    winnerTextView = findViewById(R.id.winnerTextView)

    // call the on click function
    button.setOnClickListener {
        // generate two random numbers
        // using Random function
        val num1 = random.nextInt(6)
        val num2 = random.nextInt(6)

        // set the images from the array by the index
        // position of the numbers generated
        firstDice.setImageResource(dice[num1])
        secondDice.setImageResource(dice[num2])

        winnerTextView.text = if (num1 > num2) {
            "Player A Wins"
        } else if (num1 < num2) {
            "Player B Wins"
        } else {
            "Draw"
        }
    }
}

}

`

Output: