ساخت بازی حدس ضرب‌المثل با پایتون

ساخت بازی حدس ضرب المثل با پایتون

در این مقاله چه میخوانیم؟

مقدمه

تصور کنید در یک عصر دل‌انگیز، در کنار خانواده یا دوستان، مشغول یک بازی سرگرم‌کننده هستید که خودتان آن را ساخته‌اید! 🧩 ساخت بازی حدس ضرب‌المثل با پایتون یک ایده هیجان‌انگیز برای شماست تا علاوه بر سرگرمی، مهارت‌های برنامه‌نویسی‌تان را هم تقویت کنید.
این بازی که با پایتون طراحی می‌شود، نه‌تنها ساده است، بلکه به شما این امکان را می‌دهد که با مفاهیمی مثل رشته‌ها، حلقه‌ها و توابع کار کنید و یاد بگیرید چطور ایده‌های خلاقانه‌تان را به کد تبدیل کنید.
هدف از این مقاله این است که قدم‌به‌قدم به شما نشان دهیم چطور می‌توانید با پایتون یک بازی حدس ضرب‌المثل طراحی کنید. این بازی از یک ضرب‌المثل تصادفی استفاده می‌کند که حروف آن مخفی شده‌اند و شما باید با حدس زدن حروف، ضرب‌المثل را کشف کنید.
اگر علاقه‌مند به یادگیری و چالش‌های جدید هستید، تا پایان این مقاله با ما همراه باشید! 🚀

 

بازی حدس ضرب‌المثل با پایتون

 

ساخت بازی حدس ضرب‌المثل با پایتون چگونه است؟

بازی “حدس ضرب‌المثل” یک چالش سرگرم‌کننده است که به شما اجازه می‌دهد مهارت‌های برنامه‌نویسی خود را در فضایی تعاملی و عملی تقویت کنید. در این بازی، کامپیوتر به‌صورت تصادفی یک ضرب‌المثل فارسی را از میان لیستی از جملات انتخاب می‌کند و آن را به شکلی مخفی نمایش می‌دهد.
مثلاً تمامی حروف جای خود را با علامت ( _ ) پر کرده‌اند. هدف شما این است که با حدس زدن حروف، این ضرب‌المثل را کشف کنید.
اما این همه ماجرا نیست! شما باید در حین بازی، تعداد تلاش‌های خود را مدیریت کنید، زیرا هر حدس اشتباه، شما را یک قدم به باخت نزدیک‌تر می‌کند.
بازی زمانی تمام می‌شود که یا تمامی حروف درست را پیدا کنید و برنده شوید، یا تلاش‌هایتان به پایان برسد.

در این مقاله، به شما نشان می‌دهیم که چطور با استفاده از زبان برنامه‌نویسی پایتون این بازی را طراحی کنید.
در این مسیر، با مفاهیم کاربردی و کلیدی زیر آشنا خواهید شد:

  • پردازش رشته‌ها و مدیریت داده‌ها برای نمایش پویا.
  • طراحی و استفاده از توابع برای مدیریت بخش‌های مختلف بازی.
  • پیاده‌سازی منطق بازی با استفاده از حلقه‌ها و شرط‌ها.
  • اعتبارسنجی ورودی کاربر برای جلوگیری از اشتباهات یا تقلب.

با تکمیل این پروژه، نه‌تنها یک بازی کاربردی طراحی کرده‌اید، بلکه مهارت‌های خود را در برنامه‌نویسی پایتون به سطح بالاتری ارتقا داده‌اید.
بیایید با هم این ماجراجویی را شروع کنیم! 🚀

 

پیش‌نیازها برای ساخت بازی حدس ضرب‌المثل با پایتون

برای طراحی این بازی جذاب، باید با چند مفهوم کلیدی در زبان پایتون آشنا باشید. این مفاهیم به شما کمک می‌کنند که بازی را به‌صورت کارآمد و حرفه‌ای پیاده‌سازی کنید. اگر با این مفاهیم آشنا نیستید، نگران نباشید؛ ما به‌صورت ساده توضیح می‌دهیم که چگونه از آن‌ها در پروژه استفاده خواهید کرد.

۱. کار با رشته‌ها (strings)

بازی “حدس ضرب‌المثل” بر پایه کار با رشته‌ها ساخته شده است. شما باید بتوانید یک جمله را به‌صورت دینامیک مدیریت کنید؛ یعنی حروف آن را مخفی کنید و سپس در صورت حدس صحیح، جای آن‌ها را به‌روزرسانی کنید. این فرآیند، کلید اصلی نمایش وضعیت بازی است.

۲. حلقه‌ها و شرط‌ها

با شرط‌ها بررسی می‌کنید که آیا حدس کاربر درست بوده یا نه.

  • از حلقه‌ها برای تکرار فرآیند حدس زدن استفاده خواهید کرد.
  • با شرط‌ها بررسی می‌کنید که آیا حدس کاربر درست بوده یا نه.

۳. توابع برای مدیریت کد

ساختاردهی کد در پروژه‌های پیچیده بسیار اهمیت دارد. توابع به شما این امکان را می‌دهند که بخش‌های مختلف بازی را جداگانه مدیریت کنید؛ مانند توابعی برای دریافت ورودی کاربر، بررسی حدس‌ها، و نمایش وضعیت بازی.

۴. اعتبارسنجی ورودی‌ها و مدیریت خروجی‌ها

یکی از بخش‌های مهم در طراحی بازی، نحوه تعامل کاربر با بازی است. شما باید مطمئن شوید که کاربر ورودی صحیحی وارد کرده است؛ مثلاً فقط یک حرف وارد کند و حروف تکراری را مجدداً حدس نزند. همچنین باید خروجی‌های واضح و خوانایی نمایش دهید تا کاربر وضعیت بازی را به‌خوبی درک کند.

 

مراحل ساخت بازی حدس ضرب‌المثل با پایتون

  1. تعریف مسئله و قوانین بازی
  2. آماده‌سازی لیست ضرب‌المثل‌ها
  3. نمایش ساختار اولیه ضرب‌المثل
  4. دریافت ورودی از کاربر
  5. بررسی حدس کاربر
  6. شمارش تلاش‌ها و پایان بازی

 

تعریف مشکل و قوانین بازی

 

مرحله اول: تعریف مسئله و قوانین بازی

بازی “حدس ضرب‌المثل” مانند یک رقابت است که در آن تلاش می‌کنید با حدس حروف، ضرب‌المثل مخفی‌شده را پیدا کنید. تصور کنید شما و دوستتان مشغول این بازی هستید؛ او یک ضرب‌المثل در ذهن دارد و شما باید با وارد کردن حروف مختلف، آن را کشف کنید.
هر حدس درست باعث می‌شود حروف صحیح در جای خود گذاشته شوند. اما اگر حدستان اشتباه باشد، یکی از فرصت‌های شما کم میشود و از بین می‌رود.
بازی ادامه دارد تا زمانی که یا ضرب‌المثل را کامل پیدا کنید و برنده شوید، یا تمامی تلاش‌های خود را از دست بدهید و شکست بخورید.

حالا ما می‌خواهیم این تجربه سرگرم‌کننده را به یک بازی کامپیوتری تبدیل کنیم! 🎮
برای ساخت بازی حدس ضرب‌المثل با پایتون، باید ابتدا قوانینی را برای بازی مشخص کنیم:

  • حدس حروف: شما باید حروف ضرب‌المثل را یکی‌یکی حدس بزنید.
  • تعداد تلاش‌های محدود: کاربر تنها تعداد مشخصی فرصت دارد (مثلا: ۵ تا ۱۰ تلاش).
  • وضعیت بازی: وضعیت فعلی بازی مانند حروف حدس زده‌شده و تعداد تلاش‌های باقی‌مانده در هر مرحله نمایش داده می‌شود.

این مرحله چه چیزی را به ما یاد می‌دهد؟
در این مرحله، شما با مفهوم اصلی بازی و نحوه کارکرد آن آشنا می‌شوید. طراحی قوانین بازی اولین قدم برای شروع ساخت بازی با پایتون است. اگر این اصول را به درستی درک کنید، پیاده‌سازی مراحل بعدی برایتان ساده‌تر خواهد بود.

 

مرحله دوم: آماده‌سازی لیست ضرب‌المثل‌ها

برای طراحی بازی حدس ضرب‌المثل با پایتون، یکی از گام‌های کلیدی، آماده‌سازی یک مجموعه ضرب‌المثل است که به صورت تصادفی انتخاب می‌شوند. این مرحله باعث می‌شود بازی هر بار چالش جدیدی داشته باشد و بازیکن حس تکراری بودن را تجربه نکند.
در اینجا، چند ضرب‌المثل فارسی پرکاربرد و جذاب را در قالب یک لیست ساده آماده می‌کنیم:
( شما میتوانید بسته به انتخاب خودتون هر ضرب المثلی را که میخواهید وارد کنید)

proverbs = [
    "آب در کوزه و ما تشنه لبان می گردیم",
    "از تو حرکت از خدا برکت",
    "خواهی نشوی رسوا همرنگ جماعت شو",
    "زیره به کرمان بردن"
]

توضیح:
در این قسمت، یک لیست از ضرب‌المثل‌های فارسی ایجاد کرده‌ایم. این لیست مجموعه‌ای از جمله‌های معروف است که در بازی به کار می‌روند.
بازیکن باید یکی از این ضرب‌المثل‌ها را که به صورت تصادفی انتخاب می‌شود، پیدا کند.

کد: انتخاب تصادفی ضرب‌المثل

import random
selected_proverb = random.choice(proverbs)

توضیح:
در اینجا از ماژول random استفاده کرده‌ایم تا یکی از ضرب‌المثل‌های موجود در لیست را به‌صورت تصادفی انتخاب کنیم. این کار باعث می‌شود که بازی هر بار با یک ضرب‌المثل متفاوت شروع شود و غیرقابل پیش‌بینی باقی بماند.

 

تهیه فهرست ضرب المثل ها

 

مرحله سوم: نمایش ساختار اولیه ضرب‌المثل

در این مرحله، هدف ما این است که ضرب‌المثل انتخاب‌ شده را به فرمی تبدیل کنیم که برای کاربر قابل فهم و حدس زدن باشد. تمام حروف ضرب‌المثل باید با کاراکتر _ جایگزین شوند، در حالی که فاصله‌های بین کلمات حفظ شوند.
این ساختار به بازیکن کمک می‌کند تا از تعداد کلمات ضرب‌المثل آگاه شود، اما محتوای حروف همچنان پنهان باقی بماند.

 

کد: تبدیل ضرب‌المثل به ساختار پنهان

def initialize_proverb(proverb):
    display = ""
    for char in proverb:
        if char == " ":
            display += " "  # حفظ فاصله بین کلمات
        else:
            display += "_"  # جایگزینی حروف با کاراکتر "_"
    return display

  • در این تابع، از یک حلقه for استفاده کرده‌ایم تا هر کاراکتر موجود در ضرب‌المثل را بررسی کنیم.
  • اگر کاراکتر یک فاصله باشد (" ")، همان فاصله را به ساختار نهایی اضافه می‌کنیم.
  • اگر کاراکتر یک حرف باشد، آن را با _ جایگزین می‌کنیم.
  • در نهایت، رشته‌ی نهایی که شامل فاصله‌ها و جایگزین‌های _ است، به کاربر برگردانده می‌شود.

 

کد: استفاده از تابع برای ضرب‌المثل انتخاب‌ شده

hidden_proverb = initialize_proverb(selected_proverb)
print("این ضرب‌المثل را پیدا کنید:")
print(hidden_proverb)

  • ابتدا تابع initialize_proverb را برای ضرب‌المثل تصادفی انتخاب‌شده (selected_proverb) فراخوانی می‌کنیم تا ساختار پنهان آن را تولید کنیم.
  • سپس، با استفاده از دستور print، پیام “این ضرب‌المثل را پیدا کنید:” همراه با ساختار پنهان‌شده ضرب‌المثل به کاربر نمایش داده می‌شود.

 

تهیه فهرست ضرب المثل ها

 

مرحله چهارم: دریافت ورودی از کاربر

یکی از مهم‌ترین بخش‌های این بازی، نحوه دریافت ورودی از کاربر است. چرا؟ چون این ورودی مشخص می‌کند که آیا بازی به‌درستی پیش می‌رود یا نه.
در این مرحله، باید مطمئن شویم که ورودی کاربر معتبر است و مشکلاتی مانند ورود چند حرف همزمان یا تکرار حدس‌های قبلی پیش نمی‌آید.

 

وظایف اصلی این مرحله

  • کنترل نوع ورودی: بررسی کنیم که کاربر فقط یک حرف وارد کند و از ورود عبارت یا اعداد جلوگیری شود.
  • بررسی تکراری نبودن حروف: اگر کاربر قبلاً یک حرف را حدس زده باشد، اجازه ورود دوباره آن داده نشود.

 

کد: دریافت و اعتبارسنجی ورودی کاربر

def get_user_input(used_letters):
    while True:
        letter = input("یک حرف وارد کنید: ").lower()  # ورودی کاربر را به حروف کوچک تبدیل می‌کنیم
        if len(letter) != 1:
            print("لطفاً فقط یک حرف وارد کنید!")  # خطای ورود بیش از یک حرف
        elif letter in used_letters:
            print("این حرف را قبلاً حدس زده‌اید.")  # خطای تکراری بودن حرف
        else:
            return letter  # بازگشت حرف معتبر

  1. input() برای دریافت ورودی کاربر:
    این تابع، کاربر را دعوت می‌کند تا یک حرف وارد کند.

  2. حروف کوچک‌سازی با lower():
    تمامی ورودی‌ها به حروف کوچک تبدیل می‌شوند تا از مشکلات ناشی از تفاوت بین حروف بزرگ و کوچک جلوگیری شود.

  3. کنترل طول ورودی:
    شرط if len(letter) != 1 بررسی می‌کند که کاربر فقط یک کاراکتر وارد کرده باشد. اگر ورودی بیشتر از یک حرف باشد، پیام خطا نمایش داده می‌شود.

  4. بررسی حروف تکراری:
    شرط elif letter in used_letters بررسی می‌کند که آیا حرف قبلاً حدس زده شده است یا نه. اگر حرف تکراری باشد، پیام هشدار نمایش داده می‌شود.

  5. بازگشت حرف معتبر:
    اگر تمام شرایط بالا رعایت شوند، حرف واردشده معتبر است و به بازی بازمی‌گردد.

 

چگونه از این تابع استفاده کنیم؟

used_letters = []  # لیستی برای ذخیره حروف استفاده‌شده
letter = get_user_input(used_letters)  # دریافت ورودی معتبر از کاربر
used_letters.append(letter)  # اضافه کردن حرف جدید به لیست حروف استفاده‌شده

 

نکات کلیدی:

  1. تجربه کاربری بهتر:
    با نمایش پیام‌های واضح (مانند “لطفاً فقط یک حرف وارد کنید!”)، تجربه کاربر بهبود پیدا می‌کند و بازی آسان‌تر می‌شود.
  2. لیست حروف استفاده‌شده:
    استفاده از یک لیست مانند used_letters باعث می‌شود که بتوانیم به‌راحتی بررسی کنیم کدام حروف قبلاً حدس زده شده‌اند.
  3. قابلیت گسترش:
    در آینده می‌توانید این تابع را گسترش دهید تا ورودی‌های دیگری مانند کلمات (برای حدس کل ضرب‌المثل) را نیز مدیریت کند.

 

حدس کاربر را بررسی کنید

 

مرحله پنجم: بررسی حدس کاربر

در این مرحله، پس از دریافت ورودی از کاربر (یک حرف)، باید بررسی کنیم که آیا حرف واردشده در ضرب‌المثل انتخاب‌ شده وجود دارد یا خیر.
اگر حرف درست باشد، باید در محل مناسب خود در ساختار پنهان ضرب‌المثل قرار گیرد. همچنین، در هر مرحله با پیام‌هایی کاربر را راهنمایی می‌کنیم تا وضعیت بازی را بهتر درک کند.

 

کد: به‌روزرسانی ضرب‌المثل بر اساس حدس کاربر

def update_proverb(proverb, display, letter):
    new_display = ""
    for p_char, d_char in zip(proverb, display):
        if p_char == letter:  # اگر حرف درست باشد، در جای خود قرار می‌گیرد
            new_display += letter
        else:
            new_display += d_char  # اگر نادرست باشد، حالت قبلی حفظ می‌شود
    return new_display

 

توضیح کد:

  1. zip(proverb, display):
    این تابع دو رشته‌ی proverb (ضرب‌المثل اصلی) و display (ساختار فعلی ضرب‌المثل که کاربر می‌بیند) را با هم جفت می‌کند. این کار به ما اجازه می‌دهد که هر کاراکتر از ضرب‌المثل اصلی را با نمایش فعلی مقایسه کنیم.

  2. بررسی تطابق حروف:
    • اگر کاراکتر فعلی (p_char) از ضرب‌المثل اصلی با حرف حدس زده‌شده (letter) تطابق داشته باشد، آن حرف به نمایش جدید اضافه می‌شود.
    • اگر تطابق نداشته باشد، کاراکتر فعلی از display (همان _ یا فاصله) به همان صورت قبلی باقی می‌ماند.

  3. بازگرداندن نتیجه:
    نتیجه نهایی، یک رشته جدید (new_display) است که وضعیت به‌روزرسانی‌شده ضرب‌المثل را نشان می‌دهد.

 

کد: بررسی حدس و نمایش پیام به کاربر

پس از به‌روزرسانی نمایش ضرب‌المثل، باید با پیام‌هایی مانند “حدس شما درست بود!” یا “متأسفانه حدس اشتباه بود!” به کاربر اطلاع دهیم که حدسش درست بوده یا خیر.

if letter in selected_proverb:
    print("حدس شما درست بود! 👏")
    hidden_proverb = update_proverb(selected_proverb, hidden_proverb, letter)
else:
    print("متأسفانه حدس شما اشتباه بود! 😔")

 

نکات کلیدی این مرحله

  • تعامل با کاربر:
    پیام‌های واضح و تشویقی مثل “حدس شما درست بود!” باعث می‌شود کاربر انگیزه بیشتری برای ادامه بازی پیدا کند.

  • به‌روزرسانی ساختار نمایش:
    اگر حرف درست باشد، ساختار پنهان ضرب‌المثل (hidden_proverb) به‌روزرسانی می‌شود تا کاربر پیشرفت خود را ببیند.

  • پیشگیری از اشتباهات:
    اگر حرف واردشده در ضرب‌المثل وجود نداشته باشد، پیام خطای مشخصی نمایش داده می‌شود و تغییری در ساختار ضرب‌المثل رخ نمی‌دهد.

 

کد کامل برای این مرحله

letter = get_user_input(used_letters)

if letter in selected_proverb:
    print("حدس شما درست بود! 👏")
    hidden_proverb = update_proverb(selected_proverb, hidden_proverb, letter)
    print("وضعیت فعلی ضرب‌المثل:", hidden_proverb)
else:
    print("متأسفانه حدس شما اشتباه بود! 😔")
    attempts -= 1  # کاهش تعداد تلاش‌های باقی‌مانده
    print(f"تعداد تلاش‌های باقی‌مانده: {attempts}")

 

چرا این مرحله اهمیت دارد؟

این مرحله قلب بازی است، زیرا در هر نوبت، بررسی می‌شود که آیا کاربر پیشرفتی در حل ضرب‌المثل داشته است یا خیر. با ارائه بازخورد مناسب و به‌روزرسانی وضعیت بازی، کاربر در جریان کامل روند بازی قرار می‌گیرد و تجربه بهتری خواهد داشت. 😊

 

شمارش تلاش ها و پایان دادن به بازی

 

مرحله ششم: شمارش تلاش‌ها و پایان بازی

این مرحله یکی از مهم‌ترین بخش‌های بازی است، زیرا نتیجه نهایی بازی را مشخص می‌کند. در این مرحله بررسی می‌کنیم که آیا کاربر موفق به حدس تمامی حروف ضرب‌المثل شده است یا تعداد تلاش‌های او به پایان رسیده است. بسته به این شرایط، پیام مناسب (برد یا باخت) نمایش داده می‌شود.
همچنین، اگر کاربر بازنده باشد، ضرب‌المثل کامل برای او نمایش داده می‌شود تا بازی برایش آموزنده و رضایت‌بخش باشد.

کد: شمارش تلاش‌ها و نتیجه بازی

if "_" not in hidden_proverb:
    print("تبریک! شما برنده شدید! 🎉")
else:
    print("متأسفانه شما بازنده شدید. 😔")
    print(f"ضرب‌المثل کامل: {selected_proverb}")

 

توضیح کد:

شرط برد کاربر:

اگر دیگر هیچ کاراکتر _ در hidden_proverb وجود نداشته باشد، به این معنی است که کاربر تمام حروف ضرب‌المثل را به‌درستی حدس زده است. در این حالت، پیام تبریک “تبریک! شما برنده شدید!” به همراه اموجی 🎉 نمایش داده می‌شود.

شرط باخت کاربر:

اگر تعداد تلاش‌های کاربر تمام شود و هنوز کاراکتر _ در hidden_proverb وجود داشته باشد، پیام “متأسفانه شما بازنده شدید.” نمایش داده می‌شود.
ضرب‌المثل کامل نیز با استفاده از متغیر selected_proverb به کاربر نمایش داده می‌شود تا بداند پاسخ درست چه بوده است.

 

کد: پیاده‌سازی محدودیت تلاش‌ها و بررسی نتیجه نهایی بازی

این کد نشان می‌دهد که چگونه شمارش تلاش‌ها در کنار بررسی وضعیت برد یا باخت کاربر مدیریت می‌شود:

while attempts > 0 and "_" in hidden_proverb:
    letter = get_user_input(used_letters)

    if letter in selected_proverb:
        print("حدس شما درست بود! 👏")
        hidden_proverb = update_proverb(selected_proverb, hidden_proverb, letter)
        print("وضعیت فعلی ضرب‌المثل:", hidden_proverb)
    else:
        print("متأسفانه حدس شما اشتباه بود! 😔")
        attempts -= 1  # کاهش تعداد تلاش‌های باقی‌مانده
        print(f"تعداد تلاش‌های باقی‌مانده: {attempts}")

# بررسی نتیجه نهایی پس از پایان حلقه
if "_" not in hidden_proverb:
    print("تبریک! شما برنده شدید! 🎉")
else:
    print("متأسفانه شما بازنده شدید. 😔")
    print(f"ضرب‌المثل کامل: {selected_proverb}")

 

حل مشکل نمایش برعکس حروف در VSCode

هنگام اجرای برنامه‌هایی که حاوی متن فارسی هستند، در ترمینال VSCode ممکن است حروف فارسی به صورت برعکس یا نامرتب نمایش داده شوند. این مشکل به دلیل عدم پشتیبانی کامل ترمینال از زبان‌های راست به چپ (RTL) است. برای حل این مشکل می‌توان از کتابخانه‌های arabic_reshaper و python-bidi استفاده کرد.

 

راه‌حل: اصلاح متن با کتابخانه‌های مخصوص

این دو کتابخانه کمک می‌کنند که:

  1. حروف فارسی به درستی به یکدیگر متصل شوند (arabic_reshaper).
  2. جهت نمایش متن به راست به چپ تنظیم شود (python-bidi).

 

 

کد موردنیاز برای حل مشکل

۱. نصب کتابخانه‌ها:

ابتدا کتابخانه‌های موردنیاز را نصب کنید:

pip install arabic-reshaper python-bidi

۲. افزودن تابع برای پردازش متن فارسی:

این تابع متن فارسی را قبل از نمایش در ترمینال پردازش می‌کند:

from bidi.algorithm import get_display
import arabic_reshaper

# تابع برای اصلاح نمایش متن فارسی
def process_farsi_text(text):
    reshaped_text = arabic_reshaper.reshape(text)  # اصلاح اتصال حروف
    return get_display(reshaped_text)  # تنظیم جهت راست به چپ

۳. استفاده از تابع در کد اصلی:

در هر جایی که متن فارسی قرار است چاپ شود، از تابع process_farsi_text استفاده کنید:

print(process_farsi_text("این یک متن فارسی است."))

کاربرد در کد اصلی

اگر در برنامه شما خطوط متعددی برای نمایش متن فارسی وجود دارد، می‌توانید یک تابع کمکی برای چاپ متن به همراه خط جدید تعریف کنید:

def print_farsi(text):
    print(process_farsi_text(text))
    print()  # خط خالی برای زیبایی خروجی

سپس در کد اصلی:

print_farsi("بازی حدس ضرب‌المثل شروع شد!")
print_farsi("این ضرب‌المثل را پیدا کنید:")

توضیح کد نهایی:

حلقه اصلی بازی:

حلقه ادامه پیدا می‌کند تا زمانی که کاربر یا تمام حروف ضرب‌المثل را حدس بزند یا تعداد تلاش‌هایش تمام شود (attempts > 0 and "_" in hidden_proverb).

کاهش تلاش‌ها:

اگر کاربر حدس اشتباهی بزند، تعداد تلاش‌های باقی‌مانده (attempts) یک واحد کاهش می‌یابد. این باعث می‌شود که چالش بازی بیشتر شود.

بررسی برد یا باخت:

پس از خروج از حلقه، بررسی می‌شود که آیا هیچ کاراکتر _ باقی مانده است یا نه.

در صورت برد، پیام تبریک نمایش داده می‌شود.

در صورت باخت، علاوه بر پیام شکست، ضرب‌المثل کامل برای کاربر نمایش داده می‌شود.

 

کد نهایی بازی حدس ضرب المثل

import random
from bidi.algorithm import get_display
import arabic_reshaper

# تابع برای اصلاح متن فارسی
def process_farsi_text(text):
    reshaped_text = arabic_reshaper.reshape(text)  # اصلاح شکل حروف فارسی
    return get_display(reshaped_text)  # تنظیم جهت راست به چپ

# مرحله ۱: تعریف لیست ضرب‌المثل‌ها
proverbs = [
    "آب در کوزه و ما تشنه لبان می گردیم",
    "از تو حرکت از خدا برکت",
    "خواهی نشوی رسوا همرنگ جماعت شو",
    "زیره به کرمان بردن"
]

# مرحله ۲: انتخاب تصادفی ضرب‌المثل
selected_proverb = random.choice(proverbs)

# مرحله ۳: ایجاد ساختار پنهان ضرب‌المثل
def initialize_proverb(proverb):
    display = ""
    for char in proverb:
        if char == " ":
            display += " "  # فاصله‌ها را حفظ کنید
        else:
            display += "_"  # حروف را مخفی کنید
    return display

hidden_proverb = initialize_proverb(selected_proverb)

# مرحله ۴: دریافت ورودی معتبر از کاربر
def get_user_input(used_letters):
    while True:
        letter = input(process_farsi_text("یک حرف وارد کنید: ")).lower()
        if len(letter) != 1:
            print(process_farsi_text("لطفاً فقط یک حرف وارد کنید!"))
            print()

        elif letter in used_letters:
            print(process_farsi_text("این حرف را قبلاً حدس زده‌اید."))
            print()

        else:
            return letter

# مرحله ۵: به‌روزرسانی ضرب‌المثل بر اساس حدس کاربر
def update_proverb(proverb, display, letter):
    new_display = ""
    for p_char, d_char in zip(proverb, display):
        if p_char == letter:
            new_display += letter  # جایگزینی حرف درست
        else:
            new_display += d_char  # حفظ حالت قبلی
    return new_display

# متغیرهای بازی
attempts = 6  # تعداد تلاش‌های مجاز
used_letters = []  # لیست حروف حدس زده‌شده

# حلقه اصلی بازی
print(process_farsi_text("بازی حدس ضرب‌المثل شروع شد!"))
print()

print(process_farsi_text("این ضرب‌المثل را پیدا کنید:"))
print()

print(process_farsi_text(hidden_proverb))
print()


while attempts > 0 and "_" in hidden_proverb:
    print(process_farsi_text(f"تعداد تلاش‌های باقی‌مانده: {attempts}"))
    print()

    print(process_farsi_text(f"حروف استفاده‌شده: {', '.join(used_letters)}"))
    print()

    letter = get_user_input(used_letters)  # دریافت ورودی کاربر
    used_letters.append(letter)  # اضافه کردن حرف به لیست حروف استفاده‌شده

    if letter in selected_proverb:
        print(process_farsi_text("حدس شما درست بود! 👏"))
        print()

        hidden_proverb = update_proverb(selected_proverb, hidden_proverb, letter)
        print(process_farsi_text("وضعیت فعلی ضرب‌المثل:"))
        print()

        print(process_farsi_text(hidden_proverb))
        print()

    else:
        print(process_farsi_text("متأسفانه حدس شما اشتباه بود! 😔"))
        print()

        attempts -= 1  # کاهش تعداد تلاش‌های باقی‌مانده

# بررسی نتیجه نهایی
if "_" not in hidden_proverb:
    print(process_farsi_text("تبریک! شما برنده شدید! 🎉"))
    print()

    print(process_farsi_text(f"ضرب‌المثل: {selected_proverb}"))
    print()

else:
    print(process_farsi_text("متأسفانه شما بازنده شدید. 😔"))
    print()

    print(process_farsi_text(f"ضرب‌المثل کامل: {selected_proverb}"))
    print()


نحوه عملکرد کد نهایی

تعریف لیست ضرب‌المثل‌ها:
لیستی از ضرب‌المثل‌های فارسی ایجاد شده است که یکی از آن‌ها به صورت تصادفی انتخاب می‌شود.

ساختار پنهان ضرب‌المثل:
حروف ضرب‌المثل با علامت _ مخفی می‌شوند و فاصله‌ها حفظ می‌شوند.

دریافت ورودی از کاربر:
کاربر تنها می‌تواند یک حرف وارد کند. اگر ورودی غیرمعتبر یا تکراری باشد، از او خواسته می‌شود ورودی دیگری وارد کند.

بررسی حدس کاربر:
اگر حرف واردشده در ضرب‌المثل باشد، به ساختار پنهان اضافه می‌شود. در غیر این صورت، تعداد تلاش‌ها کاهش می‌یابد.

پایان بازی:
اگر کاربر تمام حروف را حدس بزند، برنده می‌شود و پیام تبریک دریافت می‌کند. در غیر این صورت، پیام شکست به همراه نمایش ضرب‌المثل کامل نمایش داده می‌شود.


سوالات متداول

 

سوالات متداول ساخت بازی

  1. . ساخت بازی حدس ضرب‌المثل با پایتون چقدر زمان می‌برد؟
    اگر با اصول اولیه پایتون آشنا باشید، ساخت این بازی می‌تواند بین ۲ تا ۴ ساعت زمان ببرد. البته این زمان به مهارت شما و میزان امکاناتی که می‌خواهید به بازی اضافه کنید بستگی دارد.

  2. آیا این پروژه برای افراد تازه‌کار مناسب است؟
    بله، این بازی برای افرادی که تازه با پایتون آشنا شده‌اند بسیار مناسب است. شما با مفاهیمی مثل کار با رشته‌ها، حلقه‌ها، شرط‌ها و توابع آشنا خواهید شد و تجربه‌ای عملی در طراحی یک پروژه واقعی به دست می‌آورید.

  3. چطور ضرب‌المثل‌ها را به بازی اضافه کنیم؟
    برای اضافه کردن ضرب‌المثل‌ها، کافی است لیست proverbs را ویرایش کنید و جمله‌های جدیدی به آن اضافه کنید. هر چقدر تعداد ضرب‌المثل‌ها بیشتر باشد، بازی متنوع‌تر و جذاب‌تر خواهد شد.

  4. . آیا می‌توان تعداد تلاش‌های کاربر را تغییر داد؟
    بله، تعداد تلاش‌های کاربر کاملاً قابل تنظیم است. در متغیری که تعداد تلاش‌ها را ذخیره می‌کند (مانند attempts)، می‌توانید هر عددی را قرار دهید؛ مثلاً ۵ تلاش برای بازی‌های ساده یا ۱۰ تلاش برای بازی‌های سخت‌تر.

  5. اگر کاربر حرف تکراری وارد کند، چه اتفاقی می‌افتد؟
    در کدی که برای این بازی نوشته شده است، ورودی‌های تکراری بررسی می‌شوند. اگر کاربر یک حرف تکراری وارد کند، پیام هشدار داده می‌شود و از او خواسته می‌شود حرف جدیدی وارد کند.

  6. آیا می‌توان این بازی را به زبان دیگری (مثلاً انگلیسی) طراحی کرد؟
    بله، به‌راحتی می‌توانید این بازی را برای زبان‌های دیگر طراحی کنید. کافی است لیست ضرب‌المثل‌ها را با ضرب‌المثل‌های زبان موردنظر جایگزین کنید و قوانین زبان (مثل فاصله‌ها یا نوع کاراکترها) را رعایت کنید.

 

جمع بندی

تصور کنید، صفحه مانیتور روشن است، کدی که خودتان نوشته‌اید در حال اجراست، و دوستان یا خانواده‌تان مشغول لذت بردن از بازی‌ای هستند که شما طراحی کرده‌اید. این همان حس موفقیتی است که با ساخت بازی “حدس ضرب‌المثل با پایتون” تجربه می‌کنید.

در این مقاله یاد گرفتید:

چطور از ابزارهای پایتون مثل رشته‌ها، حلقه‌ها، شرط‌ها و توابع برای طراحی یک سیستم بازی هوشمند بهره ببرید.

چطور یک ایده ساده مانند حدس زدن ضرب‌المثل را به یک بازی تعاملی تبدیل کنید.

چگونه ورودی‌های کاربران را مدیریت کنید و با ارائه پیام‌های مناسب، تجربه بازی را جذاب‌تر کنید.

این پروژه فقط یک بازی نیست؛ بلکه اولین گام شما برای درک قدرت برنامه‌نویسی است. شما توانستید با ترکیب خلاقیت و مهارت، مفاهیم پایه‌ای را در قالب یک پروژه واقعی پیاده‌سازی کنید.

اما این تازه شروع کار است! اگر از این تجربه لذت بردید، قدم بعدی شما می‌تواند یادگیری عمیق‌تر پایتون باشد. از طراحی بازی‌های گرافیکی گرفته تا پروژه‌های پیشرفته هوش مصنوعی و توسعه وب، زبان پایتون شما را در مسیر موفقیت همراهی می‌کند.

🎯 همین حالا شروع کنید و با آموزش زبان پایتون، ایده‌های بزرگ‌تری را به واقعیت تبدیل کنید. آینده در دستان شماست! 🚀

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *