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