from guizero import App, Box, MenuBar, Picture, PushButton, Text
import os
from random import randint
from random import shuffle
no_success = 0
no_failures = 0
def setup_round():
global emojis_save
global pictures
global buttons
emojis = emojis_save.copy()
shuffle(emojis)
for idx in range(0, len(pictures)):
pictures[idx].visible = False
buttons[idx].visible = False
buttons[idx].update_command(match_emoji, [False])
# select the matching emoji
matched_emoji = emojis.pop()
# select a random picture index for this emoji
idx_picture = randint(0, 8)
# select a random button index for this emoji
idx_button = randint(0, 8)
# set the chosen picture's image to the matched_emoji
pictures[idx_picture].image = matched_emoji
pictures[idx_picture].visible = True
# set the chosen button's image to the matched_emoji
buttons[idx_button].image = matched_emoji
buttons[idx_button].visible = True
# set the command to be called and pass True, as this is the matching emoji
buttons[idx_button].update_command(match_emoji, [True])
# set all image properties to an emoji
# if the related visible property is False
for idx in range(0, len(pictures)):
if not pictures[idx].visible:
pictures[idx].image = emojis.pop()
pictures[idx].visible = True
if not buttons[idx].visible:
buttons[idx].image = emojis.pop()
buttons[idx].visible = True
def match_emoji(matched):
global no_success
global no_failures
if matched:
no_success = no_success + 1
result.value = 'correct (' + str(no_success) + '/' + str(no_failures) + ')'
else:
no_failures = no_failures + 1
result.value = 'incorrect (' + str(no_success) + '/' + str(no_failures) + ')'
setup_round()
def exit_app():
global app
app.destroy()
def about_app():
global app
app.info('About', "The Emoji Matching Game")
# set the path to the emoji folder on your computer
emojis_dir = "emojis"
# create a list of the locations of the emoji images
# in each round we copy this data to the emojis array
emojis_save = [os.path.join(emojis_dir, f) for f in os.listdir(emojis_dir) if os.path.isfile(os.path.join(emojis_dir, f))]
app = App("Emoji Match Game")
app.when_closed = exit_app
menubar = MenuBar(app,
# menu bar
toplevel=["File", "Help"],
# menu items
options=[
# File
[
# items in File
["Exit", exit_app]
],
# Help
[
# items in Help
["About", about_app]
]
])
result = Text(app)
game_box = Box(app, border=True)
pictures_box = Box(game_box, layout="grid", align="left")
buttons_box = Box(game_box, layout="grid", border="3", align="left")
# create empty lists to which pictures and buttons will be added
# we use the property visible to distinguish between set and not
pictures = []
buttons = []
for x in range(0, 3):
for y in range(0, 3):
# put the pictures into the list
picture = Picture(pictures_box, grid=[x,y])
pictures.append(picture)
# put the buttons into the list
button = PushButton(buttons_box, grid=[x, y])
# set the command to be called and pass False, as these emoji wont be the matching ones
buttons.append(button)
setup_round()
# now all image properties are set and we can display the GUI
app.display()
Comments