با ساخت این بازی کاشی حافظه، توانایی های شناختی خود را بررسی کنید.
کاشی حافظه یا بازی تطبیق یک راه عالی و سرگرم کننده برای تقویت توانایی های شناختی، تقویت حافظه و بهبود تمرکز است. بازی دارای مجموعهای از کاشیها است که باید آنها را یکی یکی ورق بزنید، به خاطر بسپارید و آنهایی را که مطابقت دارند انتخاب کنید. با تطبیق صحیح تمام کاشی ها، برنده بازی می شوید.
بنابراین چگونه می توانید این بازی شگفت انگیز را با استفاده از پایتون توسعه دهید؟
ماژول های Tkinter و Random
شما می توانید بازی کاشی حافظه را با استفاده از ماژول های Tkinter و Random بسازید. Tkinter به شما اجازه می دهد تا برنامه های دسکتاپ ایجاد کنید. ویجتهای متنوعی مانند دکمهها، برچسبها و جعبههای متنی را ارائه میدهد که توسعه برنامههایی مانند تقویم، ماشینحساب و فهرست کارها را آسانتر میکند. برای نصب Tkinter ترمینال را باز کرده و اجرا کنید:
pip install tkinter
ماژول تصادفی یک ماژول داخلی پایتون است که برای تولید اعداد شبه تصادفی استفاده می شود. با استفاده از این، می توانید یک مولد رمز عبور تصادفی، یک برنامه شبیه سازی تاس انداختن، یا یک پخش کننده لیست بسازید. علاوه بر این، میتوانید بازیهای جالبی مانند کریکت دستی و بازیهای حدس اعداد را نیز توسعه دهید.
نحوه ساخت بازی Memory Tile با استفاده از پایتون
شما می توانید کد منبع ساخت بازی کاشی حافظه با استفاده از پایتون را در این مطلب پیدا کنید
مخزن GitHub
.
با وارد کردن Tkinter و ماژول تصادفی شروع کنید. پنجره ریشه را مقداردهی اولیه کنید و عنوان و ابعاد را بر حسب پیکسل تنظیم کنید.
from tkinter import *
import random
from tkinter import messagebox
root = Tk()
root.title('Memory Tile Game')
root.geometry("760x550")
دو متغیر سراسری تعریف کنید و متغیر winner را صفر کنید. لیستی از مواردی که روی کاشی ها ظاهر می شوند را اعلام کنید. فهرست را با استفاده از متد ()shuffle ماژول تصادفی مرتب کنید. یک قاب در پنجره ریشه تعریف کنید و یک بالشتک 10 در جهت عمودی اضافه کنید.
یک متغیر شمارش را روی 0 مقداردهی کنید و به ترتیب یک لیست پاسخ و فرهنگ لغت را اعلام کنید.
global winner, matches
winner = 0
matches = ["apple","apple","banana","banana", "orange","orange", "blueberry","blueberry","mulberry","mulberry", "grapes","grapes"]
random.shuffle(matches)
my_frame = Frame(root)
my_frame.pack(pady=10)
count = 0
answer_list = []
answer_dict = {}
یک تابع تعریف کنید، reset(). با استفاده از تابع config() متن برچسب را روی یک رشته خالی قرار دهید. یک لیست دکمه برای هر یک از کاشی ها تعریف کنید. روی لیست تکرار کنید و متن روی کاشی دکمه را روی یک رشته خالی، رنگ پسزمینه را پیشفرض (SystemButtonFace) و حالت را روی حالت عادی تنظیم کنید.
def reset():
my_label.config(text="")
button_list = [b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11]
for button in button_list:
button.config(text=" ", bg="SystemButtonFace", state="normal")
یک تابع تعریف کنید، win(). با استفاده از تابع config() یک پیام برنده را در پارامتر متن برچسب تنظیم کنید. لیست دکمه ها را مانند قبل تعریف کنید و آن را تکرار کنید تا رنگ پس زمینه کاشی را روی سبز روشن تنظیم کنید.
def win():
my_label.config(text="Congratulations! You Win!")
button_list = [b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11]
for button in button_list:
button.config(bg="#90EE90")
یک تابع، button_click() تعریف کنید که دکمه و شماره آن را به عنوان پارامترهای ورودی می گیرد. به متغیرهای جهانی، فهرست و فرهنگ لغت ارجاع دهید. اگر متن دکمه برابر با فاصله باشد و تعداد آن کمتر از دو باشد، متن دکمه را وارد کرده و نمایش دهید. شماره دکمه را به لیست پاسخ و نام را به فرهنگ لغت پاسخ اضافه کنید. متغیر تعداد را یک عدد افزایش دهید.
def button_click(b, number):
global count, answer_list, answer_dict, winner
if b["text"] == ' ' and count < 2:
b["text"] = matches[number]
answer_list.append(number)
answer_dict[b] = matches[number]
count += 1
اگر طول لیست پاسخ دو باشد، به این معنی است که کاربر دو کاشی را انتخاب کرده است. اگر متن اولین کاشی با دیگری مطابقت دارد، برچسب را طوری پیکربندی کنید که نشان دهد هر دو به درستی مطابقت دارند. وضعیت دکمه را غیرفعال کنید. تعداد را روی صفر تنظیم کنید و لیست و فرهنگ لغت را خالی کنید. متغیر winner را یک افزایش دهید و اگر به شش تبدیل شد، تابع win که قبلا اعلام شده بود را فراخوانی کنید.
if len(answer_list) == 2:
if matches[answer_list[0]] == matches[answer_list[1]]:
my_label.config(text="It's a Match!")
for key in answer_dict:
key["state"] = "disabled"
count = 0
answer_list = []
answer_dict = {}
winner += 1
if winner == 6:
win()
در غیر این صورت، متغیر count و لیست را بازنشانی کنید. یک کادر پیام با عنوان و محتوایی که آن را مطابقت نادرست نشان می دهد، نمایش دهید. روی لیست پاسخ ها تکرار کنید و متن کاشی را روی یک فاصله تنظیم کنید. برچسب را ریست کنید و فرهنگ لغت را خالی کنید. این تضمین می کند که پس از انتخاب کاشی های نادرست توسط کاربر، هیچ متن قابل مشاهده ای روی دکمه و برچسب وجود ندارد.
else:
count = 0
answer_list = []
messagebox.showinfo("Incorrect!", "Incorrect")
for key in answer_dict:
key["text"] = " "
my_label.config(text=" ")
answer_dict = {}
12 دکمه تعریف کنید. پنجره والدی را که می خواهید آنها را در آن قرار دهید، متنی که باید نمایش داده شود، سبک فونتی که باید داشته باشند، ارتفاع و عرض آنها و دستوری که باید هنگام کلیک اجرا شود را تنظیم کنید. به یاد داشته باشید که از تابع lambda برای ارسال داده ها به تابع button_click() استفاده کنید. پارامتر relief را روی شیار تنظیم کنید تا یک افکت عمق سه بعدی در اطراف دکمه ایجاد شود.
b0 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b0, 0), relief="groove")
b1 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b1, 1), relief="groove")
b2 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b2, 2), relief="groove")
b3 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b3, 3), relief="groove")
b4 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b4, 4), relief="groove")
b5 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b5, 5), relief="groove")
b6 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b6, 6), relief="groove")
b7 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b7, 7), relief="groove")
b8 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b8, 8), relief="groove")
b9 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b9, 9), relief="groove")
b10 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b10, 10), relief="groove")
b11 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b11, 11), relief="groove")
با استفاده از مدیر شبکه Tkinter، دکمه ها را در قالب جدولی متشکل از سه ردیف و چهار ستون سازماندهی کنید. برای انجام این کار، متد grid() را فراخوانی کنید و ردیف را به همراه شماره ستونی که می خواهید در آن قرار دهید ارسال کنید.
b0.grid(row=0, column=0)
b1.grid(row=0, column=1)
b2.grid(row=0, column=2)
b3.grid(row=0, column=3)
b4.grid(row=1, column=0)
b5.grid(row=1, column=1)
b6.grid(row=1, column=2)
b7.grid(row=1, column=3)
b8.grid(row=2, column=0)
b9.grid(row=2, column=1)
b10.grid(row=2, column=2)
b11.grid(row=2, column=3)
برچسبی را تعریف کنید که یک رشته خالی را نشان دهد و یک بالشتک 20 در جهت عمودی اضافه کنید. یک منوی سطح بالا را در پنجره ریشه تعریف کنید و با تبدیل پارامتر tearoff به False آن را ضمیمه کنید. با استفاده از پارامتر add_cascade یک آیتم از منوی فرعی اضافه کنید.
دو آیتم منو را به همراه دستوراتی که باید هنگام کلیک کردن در منوی فرعی به نام Reset Game و Exit Game اجرا کنند، اضافه کنید. برای جداسازی بین آنها یک جداکننده اضافه کنید.
my_label = Label(root, text="")
my_label.pack(pady=20)
my_menu = Menu(root)
root.config(menu=my_menu)
option_menu = Menu(my_menu, tearoff=False)
my_menu.add_cascade(label="Options", menu=option_menu)
option_menu.add_command(label="Reset Game", command=reset)
option_menu.add_separator()
option_menu.add_command(label="Exit Game", command=root.quit)
تابع mainloop() به پایتون می گوید که حلقه رویداد Tkinter را اجرا کند و تا زمانی که پنجره را ببندید به رویدادها گوش دهد.
root.mainloop()
همه کدها را کنار هم قرار دهید. اکنون بازی حافظه کاشی آماده بازی است.
خروجی بازی Memory Tile
در اجرای برنامه، 12 دکمه با متن خالی همراه با منوی گزینه ها ظاهر می شود. با کلیک بر روی Reset Game، پنجره به همین شکل ظاهر می شود.
با انتخاب دو کاشی منطبق، دکمه ها غیرفعال به نظر می رسند و برچسب نشان می دهد که انتخاب درست است.
با انتخاب دو کاشی که مطابقت ندارند، یک کادر پیام ظاهر می شود که نشان می دهد انتخاب نادرست بوده است. دکمه ها و برچسب به حالت خالی اولیه خود باز می گردند.
با تطبیق موفقیت آمیز همه انتخاب ها، برنامه همه کاشی ها را سبز می کند و پیام برنده را نمایش می دهد.
بازی هایی که می توانید با استفاده از پایتون بسازید
پایتون ماژول های مختلفی را برای ساخت بازی ارائه می دهد. برای ایجاد بازیهای ساده یا مبتنی بر انتخاب مانند Hangman، Tic-Tac-Toe یا Rock Paper Scissors میتوانید از ماژولهای Tkinter و Random استفاده کنید. برای توسعه بازی هایی که نیاز به گرافیک بیشتری دارند، می توانید از Pygame استفاده کنید.
Pygame مجموعه ای از ماژول های پایتون است که روی همه پلتفرم ها کار می کند. این شامل گرافیک های کامپیوتری و کتابخانه های صوتی است که بازی ها را تعاملی تر می کند. تعدادی از بازی هایی که می توانید با استفاده از Pygame بسازید عبارتند از: بازی مار، بازی پازل حافظه و سودوکو.