A Graphical Dice Simulator

By Monty, 31st May 2015

DiceSimulatorThis PyGame program simulates the roll of a die (or dice if you prefer). It’s a fairly simple, straightforward thing to do, though it may be worth noting that the spots display is oh-so-slightly clever. Some spots appear in more than one number, e.g. the middle spot is in all the odd numbers, hence the test if n % 2 == 1: serves to display the middle spot for 3 numbers. By the time we get down to n==6 we only have 2 more spots to display. It’s an example of DRY 🙂

Of course, this isn’t the simplest possible program that could simulate the roll of a dice; this is:

import random
print(random.randint(1,6))

However, this is a bit dull, hence we spruce it up with a graphical interface, and just to add a bit more realism, we let the dice ‘roll’ a little while. It displays a dozen faces with a small delay between each, and stops on the last. Without the delay you won’t see the faces before the last.

'''
    DiceSimulator.py
    I don't know if I should say die or dice :()
    Author: Alan Richmond, Python3.codes
'''
import pygame, random, time

size = 256                      # Size of window/dice
spsz = size//10                 # size of spots
m = int(size/2)                 # mid-point of dice (or die?)
l=t=int(size/4)                 # location of left and top spots
r=b=size-l                      # location of right and bottom spots
rolling = 12                    # times that dice rolls before stopping
diecol = (255,255,127)          # die colour
spotcol = (0,127,127)           # spot colour

d = pygame.display.set_mode((size, size))
d.fill(diecol)
pygame.display.set_caption("Dice Simulator")

for i in range(rolling):            # roll the die...
    n=random.randint(1,6)                   # random number between 1 & 6
    d.fill(diecol)                          # clear previous spots
    if n % 2 == 1:
        pygame.draw.circle(d,spotcol,(m,m),spsz)  # middle spot
    if n==2 or n==3 or n==4 or n==5 or n==6:
        pygame.draw.circle(d,spotcol,(l,b),spsz)  # left bottom
        pygame.draw.circle(d,spotcol,(r,t),spsz)  # right top
    if n==4 or n==5 or n==6:
        pygame.draw.circle(d,spotcol,(l,t),spsz)  # left top
        pygame.draw.circle(d,spotcol,(r,b),spsz)  # right bottom
    if n==6:
        pygame.draw.circle(d,spotcol,(m,b),spsz)  # middle bottom
        pygame.draw.circle(d,spotcol,(m,t),spsz)  # middle top
    
    pygame.display.flip()
    time.sleep(0.2)
%d bloggers like this: