این بازی سرگرم کننده اعداد را در پایتون بسازید تا دستکاری رشته ها را تمرین کنید و در مورد Tkinter بیاموزید.
FLAMES یک بازی سرگرم کننده برای کودکان است که برای دوستان، عاشقان، عاشقان، ازدواج ها و دشمنان ایستاده اند. بازی نام دو نفر را می گیرد و با یک سری مراحل رابطه آنها را مشخص می کند. برای بازی FLAMES، نام دو نفر را یادداشت کنید، حروف مشابه را حذف کنید و تعداد کاراکترهای باقی مانده را دریافت کنید.
با استفاده از شمارش روی حروف کلمه، FLAMES را تکرار کنید و آن حرف را حذف کنید. به عنوان مثال، اگر تعداد چهار است، حرف M را حذف کنید. شمارش دوباره از E شروع می شود. این فرآیند را تا زمانی که فقط یک حرف باقی بماند، تکرار کنید که نشان دهنده وضعیت رابطه است.
ماژول Tkinter
برای ساخت بازی FLAMES از ماژول Tkinter استفاده خواهید کرد. Tkinter یک ماژول چند پلتفرمی، ساده و کاربرپسند است که می توانید از آن برای ایجاد رابط های گرافیکی کاربر به سرعت استفاده کنید. برخی از برنامههایی که میتوانید بهعنوان مبتدی با استفاده از Tkinter بسازید عبارتند از: پخشکننده موسیقی، تقویم، ابزار تبدیل وزن، و یک بازی ترکیبی کلمات.
برای نصب tkinter در سیستم خود، دستور زیر را در ترمینال اجرا کنید:
pip install tkinter
نحوه ساخت بازی FLAMES با استفاده از پایتون
می توانید کد منبع بازی FLAMES را با استفاده از پایتون در این مخزن GitHub پیدا کنید.
ماژول Tkinter را وارد کنید. یک تابع، remove_match_char() تعریف کنید که دو لیست را به عنوان ورودی می پذیرد. از یک حلقه for تو در تو برای تکرار روی هر دو لیست استفاده کنید. بررسی کنید که آیا یک کاراکتر منطبق وجود دارد. اگر وجود دارد، آن را از هر دو لیست حذف کنید و یک لیست سوم ایجاد کنید که هر دو لیست را با یک ستاره در بین آنها به هم بپیوندد. ستاره به عنوان جداکننده عمل می کند.
لیست سوم را همراه با مطابقت یافت شده به عنوان True برگردانید. در صورتی که هیچ حرفی با هم مطابقت نداشته باشد، لیست را همانطور که در بالا ایجاد شده است برگردانید.
from tkinter import *
def remove_match_char(list1, list2):
for i in range(len(list1)):
for j in range(len(list2)):
if list1[i] == list2[j]:
c = list1[i]
list1.remove(c)
list2.remove(c)
list3 = list1 + ["*"] + list2
return [list3, True]
list3 = list1 + ["*"] + list2
return [list3, False]
یک تابع تعریف کنید، tell_status(). نام شخصی را که کاربر با استفاده از متد get() در ویجت Entry وارد کرده است، بازیابی کنید. تمام حروف را به حروف کوچک تبدیل کنید و فاصله بین آنها را حذف کنید. نام را به لیستی از کاراکترها تبدیل کنید. این کار را با نام نفر دوم تکرار کنید و متغیر continue را روی True قرار دهید.
def tell_status():
p1 = Person1_field.get()
p1 = p1.lower()
p1.replace(" ", "")
p1_list = list(p1)
p2 = Person2_field.get()
p2 = p2.lower()
p2.replace(" ", "")
p2_list = list(p2)
proceed = True
تا زمانی که مقدار progress درست باشد، تابع remove_match_char() را فراخوانی کنید و دو لیستی را که ایجاد کردید ارسال کنید. لیست به هم پیوسته و وضعیت پرچم دریافت شده از تابع را ذخیره کنید. نمایه ستاره ای را که وارد کرده اید پیدا کنید و رشته ها را به دو لیست قبل و بعد از آن برش دهید.
تعداد کاراکترهای دو لیست را بشمارید و لیستی را تعریف کنید که وضعیت های مختلفی را که یک رابطه می تواند داشته باشد مطابق با بازی FLAMES ذخیره می کند.
while proceed:
ret_list = remove_match_char(p1_list, p2_list)
con_list = ret_list[0]
proceed = ret_list[1]
star_index = con_list.index("*")
p1_list = con_list[: star_index]
p2_list = con_list[star_index + 1:]
count = len(p1_list) + len(p2_list)
result = ["Friends", "Love", "Affection", "Marriage", "Enemy", "Siblings"]
تا زمانی که حروف در لیست نتایج صفر نباشند، مقدار شاخص را از جایی که باید برش را انجام دهید ذخیره کنید. اگر شاخص بزرگتر یا مساوی صفر است، لیست ها را به دو قسمت تقسیم کنید و رشته به هم پیوسته را با قسمت سمت راست که ابتدا به ترتیب اضافه شده است، ذخیره کنید. این تضمین می کند که می توانید در جهت خلاف جهت عقربه های ساعت شمارش کنید.
نتیجه را در قسمت وضعیت در موقعیت کاراکتر اول وارد کنید تا وضعیت رابطه نمایش داده شود.
while len(result) > 1:
split_index = (count % len(result) - 1)
if split_index >= 0:
right = result[split_index + 1:]
left = result[: split_index]
result = right + left
else:
result = result[: len(result) - 1]
Status_field.insert(0, result[0])
یک تابع، clear_all() تعریف کنید. برای پاک کردن محتویات نمایش داده شده روی صفحه، از تابع delete() از اولین فهرست تا آخرین در سه فیلد ورودی استفاده کنید. از متد ()focus_set در اولین فیلد ورودی برای فعال کردن و نشان دادن کاربر برای وارد کردن مقادیر در آن استفاده کنید.
def clear_all():
Person1_field.delete(0, END)
Person2_field.delete(0, END)
Status_field.delete(0, END)
Person1_field.focus_set()
نمونه Tkinter را راهاندازی کنید و پنجره ریشه را با ارسال آن به کلاس نمایش دهید. رنگ پس زمینه دلخواه، اندازه و عنوان برنامه خود را تنظیم کنید.
root = Tk()
root.configure(background='#A020F0')
root.geometry("700x200")
root.title("FLAMES Game")
سه برچسب برای نشان دادن دو شخص و وضعیت رابطه آنها تعریف کنید. پنجره والد را که می خواهید آنها را در آن قرار دهید، متنی که باید نمایش داده شود، رنگ فونت، رنگ پس زمینه و سبک های فونت را تنظیم کنید. مقداری بالشتک در جهت افقی اضافه کنید.
label1 = Label(root, text="Name 1: ", fg='#ffffff',bg='#A020F0', font=("arial",20,"bold"), padx='20')
label2 = Label(root, text="Name 2: ", fg='#ffffff',bg='#A020F0', font=("arial",20,"bold"), padx='20')
label3 = Label(root, text="Relationship Status: ", fg='#ffffff', bg='#A020F0',font=("arial",20,"bold"), padx='20')
از مدیر شبکه برای مرتب کردن سه ویجت در ستون اول استفاده کنید. برچسب اول را در ردیف دوم، برچسب دوم را در ردیف سوم و برچسب سوم را در ردیف چهارم قرار دهید.
label1.grid(row=1, column=0)
label2.grid(row=2, column=0)
label3.grid(row=4, column=0)
برای دریافت مقادیر دو شخص و نمایش وضعیت آنها، سه ویجت ورودی تعریف کنید. پنجره والد را که میخواهید ابزارکها را در آن قرار دهید و سبکهای قلمی که باید داشته باشد را تنظیم کنید.
Person1_field = Entry(root, font=("arial", 15, "bold"))
Person2_field = Entry(root, font=("arial", 15, "bold"))
Status_field = Entry(root, font=("arial",15,"bold"))
به طور مشابه، از مدیر شبکه برای سازماندهی ویجت ها در ستون دوم استفاده کنید. از ویژگی ipadx برای تنظیم تعداد پیکسلهایی که در حاشیههای ویجت قرار میگیرند استفاده کنید.
Person1_field.grid(row=1, column=1, ipadx="50")
Person2_field.grid(row=2, column=1, ipadx="50")
Status_field.grid(row=4, column=1, ipadx="50")
دو دکمه Submit و Clear را تعریف کنید. پنجره والدی که می خواهید آنها را در آن قرار دهید، متنی که باید نمایش داده شود، رنگ پس زمینه، رنگ فونت، عملکردهایی که باید هنگام کلیک کردن اجرا کنند و سبک های فونت را تنظیم کنید.
از مدیر شبکه برای قرار دادن دکمه ها به ترتیب در ردیف چهارم و ششم ستون دوم استفاده کنید.
button1 = Button(root, text="Submit", bg="#00ff00", fg="black", command=tell_status,font=("arial",13,"bold") )
button2 = Button(root, text="Clear", bg="#00ff00", fg="black", command=clear_all, font=("arial",13,"bold"))
button1.grid(row=3, column=1)
button2.grid(row=5, column=1)
تابع mainloop() به پایتون می گوید که حلقه رویداد Tkinter را اجرا کند و تا زمانی که پنجره را ببندید به رویدادها گوش دهد.
root.mainloop()
همه کدها را کنار هم قرار دهید و برای انجام بازی FLAMES در نوک انگشتان خود آماده شوید.
نمونه خروجی بازی FLAMES
در اجرای برنامه بالا، برنامه برنامه بازی FLAMES را با سه برچسب، سه فیلد ورودی و دو دکمه در یک شبکه نمایش می دهد. با وارد کردن نام های “تونی استارک” و “پپر پاتس”، برنامه وضعیت رابطه آنها را به عنوان “عشق” نمایش می دهد.
بازی هایی که می توانید با پایتون بسازید
Pygame، Arcade، Panda3D، PyOpenGL، و Pyglet برخی از ماژول های مفیدی هستند که می توانید با آنها بازی های پایتون بسازید. با استفاده از Pygame می توانید بازی های دو بعدی مانند Super Mario Bros، Flappy Bird و Snake بسازید. با استفاده از Arcade می توانید یک Pac-Man، Asteroids یا Breakout clone بسازید.
Panda3D می تواند به شما در ساخت بازی های سه بعدی مانند Toontown Online، Pirates of the Caribbean Online، و Virtual Magic Kingdom دیزنی کمک کند.