Гра "Смайлики"

Гра "Смайлики" полягає у показі на екрані сітки зображень, серед яких всі, крім одного - однакові. Користувач повинен клацнути на тому зображенні, котре відрізняється від решти. Після кожного клацання картинки перемішуються. Якщо клацнули правильно, додається 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])

Остання зміна: середа 13 травня 2015 12:42