Гра "Смайлики"
Гра "Смайлики" полягає у показі на екрані сітки зображень, серед яких всі, крім одного - однакові. Користувач повинен клацнути на тому зображенні, котре відрізняється від решти. Після кожного клацання картинки перемішуються. Якщо клацнули правильно, додається 1 бал, якщо неправильно - знімається 10 балів.
Структури даних для гри
Графічні зображення, а точніше назви відповідних файлів, будуть зберігатися у списку з назвою gra. Для зручності позначимо зображення, котре буде повторюватись s1, а відмінне зображення s2. Цей список буде перемішуватись, а відповідні зображення стануть джерелом даних для виведення в написах Label, розміщених у 3 ряди по 3 елементи у ряді.
s1="smile1.gif"
s2="smile2.gif"
bal=0
gra=[]
for i in range(8):
gra.append(s1)
gra.append(s2)
random.shuffle(gra)
Інтерфейс
game - список написів Label
k - порядковий номер
p - список файлів, що використані у PhotoImage
root = Tk()
root.title("Гра Смайлики")
root.geometry("310x310")
game=[]
k=0
p=[]
for r in range(3):
for c in range(3):
pic = PhotoImage(file=gra[k])
p.append(pic)
im= Label(root,image=p[k], height=100, width=100)
game.append(im)
game[k].grid(row=r, column=c)
game[k].bind(" < Button-1>",click)
k+=1
Для кожного елемента списку game, тобто для кожного напису передбачена подія Button-1, котра означає клацання мишкою на цьому написі. До цієї події прив'язана (bind) функція click, котра складає основну логіку гри.
Ігрова логіка
У змінну а зберігається зображення, котре є вмістом напису, на якому відбулось клацання. При цьому назва даного зображення подається не у вигляді назви файлу, що було би дуже зручно, а у службовому вигляді накшталт "pyimage11". Для кожного напису числа відрізнятимуться, причому перша партія зображень матиме номери pyimage1-pyimage9, друга (після перемішування картинок): pyimage10-pyimage18, третя: pyimage19-pyimage27 і т.д.
Тому після фіксування назви зображення, на якому клацнули, потрібно відкинути перші 7 його символів (залишиться сам номер, котрий відповідає положенню в сітці 3х3). Далі виконаємо ділення на 9 та зафіксуємо остачу від такого ділення: таким чином матимемо порядковий номер зображення у сітці. У змінну hid запишемо елемент, котрий зберігається під даним номером у списку gra. Якщо цей елемент відповідає відмінному зображенню (s2), то клацнули правильно: потрібно оновити змінну bal та вивести відповідне повідомлення.
def click(event):
global bal
a=event.widget.cget("image")
num=int(a[7:])
hid=gra[(num-1)%9]
if hid==s2:
print("Yes")
bal=bal+1
if bal>10:
level2()
print(bal)
upd()
Останньою командою функції є виклик іншої ігрової функції, котра відповідає за перемішування картинок після кожного ходу:
def upd():
random.shuffle(gra)
for k in range(9):
pic = PhotoImage(file=gra[k])
p.append(pic)
game[k].configure(image=p[len(p)-1])