Kahibaro
Discord Login Register

بازی حدس عدد

هدف این پروژه

در این پروژه یک «بازی حدس عدد» می‌سازیم:

در طول این پروژه از چیزهایی استفاده می‌کنیم که قبلاً یاد گرفته‌اید:

در این فصل تمرکز روی «ترکیب» این مفاهیم در قالب یک برنامهٔ کامل است، نه آموزش دوبارهٔ آن‌ها.


ایدهٔ کلی بازی

الگوی کلی بازی این است:

  1. برنامه یک عدد تصادفی انتخاب می‌کند.
  2. برنامه از کاربر می‌خواهد حدس بزند.
  3. تا وقتی حدس کاربر درست نشده، تکرار می‌کنیم:
    • اگر حدس کاربر بزرگ‌تر بود → بگو «عدد کوچک‌تر است».
    • اگر حدس کاربر کوچک‌تر بود → بگو «عدد بزرگ‌تر است».
    • دوباره از او حدس جدید بگیر.
  4. وقتی حدس درست شد → پیام موفقیت نمایش بده و تعداد حدس‌ها را بگو.

این الگوریتم را می‌خواهیم مرحله‌به‌مرحله به کد تبدیل کنیم.


مرحلهٔ ۱: انتخاب عدد تصادفی

برای اینکه هر بار بازی تکراری نباشد، از کتابخانهٔ random استفاده می‌کنیم.

import random
secret_number = random.randint(1, 100)
print("یک عدد مخفی بین 1 تا 100 انتخاب شده است!")

در اینجا:

مرحلهٔ ۲: گرفتن حدس از کاربر

ما می‌خواهیم از کاربر عدد بگیریم. input همیشه رشته می‌دهد، پس باید آن را به عدد تبدیل کنیم.

guess_text = input("حدس بزن عدد چیست: ")
guess = int(guess_text)

اینجا:

در نسخهٔ ساده، فرض می‌کنیم کاربر عدد معتبر وارد می‌کند. (بعداً دربارهٔ ورودی اشتباه می‌توان پروژه را بهتر کرد.)


مرحلهٔ ۳: استفاده از حلقه برای تکرار حدس‌ها

ما نمی‌دانیم کاربر چند بار تلاش می‌کند، پس از while استفاده می‌کنیم تا «تا زمانی که حدس اشتباه است» بازی ادامه داشته باشد.

فرم کلی:

while حدس_غلط_است:
    راهنمایی_بده
    حدس_جدید_بگیر

در بازی ما:

while guess != secret_number:
    # اینجا به کاربر می‌گوییم بزرگ‌تر یا کوچک‌تر
    # بعد حدس جدید می‌گیریم

مرحلهٔ ۴: راهنمایی «بزرگ‌تر» یا «کوچک‌تر»

درون حلقه، باید بررسی کنیم حدس کاربر نسبت به عدد مخفی چه وضعی دارد.

if guess < secret_number:
    print("برو بالاتر! عدد بزرگ‌تر است.")
elif guess > secret_number:
    print("برو پایین‌تر! عدد کوچک‌تر است.")

بعد از این پیام، دوباره حدس جدید می‌گیریم:

guess_text = input("دوباره حدس بزن: ")
guess = int(guess_text)

مرحلهٔ ۵: شمارش تعداد حدس‌ها

برای جالب‌تر شدن بازی، تعداد تلاش‌ها را می‌شماریم.

  1. قبل از حلقه یک شمارنده می‌سازیم و صفر می‌کنیم.
  2. هر بار که کاربر حدس می‌زند، شمارنده را یک واحد زیاد می‌کنیم.
  3. وقتی حدس درست شد، مقدار شمارنده را چاپ می‌کنیم.
attempts = 0  # تعداد حدس‌ها
guess_text = input("حدس بزن عدد چیست: ")
guess = int(guess_text)
attempts = attempts + 1  # اولین حدس

و داخل حلقه هم هر بار که حدس جدید می‌گیریم:

guess_text = input("دوباره حدس بزن: ")
guess = int(guess_text)
attempts = attempts + 1

در پایان:

print("آفرین! عدد را درست حدس زدی.")
print("تعداد حدس‌های تو:", attempts)

برنامهٔ کامل: نسخهٔ سادهٔ بازی حدس عدد

حالا همهٔ تکه‌ها را کنار هم می‌گذاریم تا یک برنامهٔ کامل داشته باشیم.

import random
print("به بازی حدس عدد خوش آمدی!")
print("من یک عدد بین 1 تا 100 انتخاب کرده‌ام. سعی کن حدسش بزنی.")
secret_number = random.randint(1, 100)
attempts = 0  # شمارش حدس‌ها
guess_text = input("حدس بزن عدد چیست: ")
guess = int(guess_text)
attempts = attempts + 1
while guess != secret_number:
    if guess < secret_number:
        print("برو بالاتر! عدد بزرگ‌تر است.")
    elif guess > secret_number:
        print("برو پایین‌تر! عدد کوچک‌تر است.")
    guess_text = input("دوباره حدس بزن: ")
    guess = int(guess_text)
    attempts = attempts + 1
print("آفرین! عدد را درست حدس زدی.")
print("عدد مخفی:", secret_number)
print("تعداد حدس‌های تو:", attempts)

این یک نسخهٔ کارا و ساده از بازی است. حالا می‌توانیم آن را مرحله‌به‌مرحله بهتر کنیم.


بهبود ۱: محدود کردن تعداد تلاش‌ها

می‌توانیم سقف تلاش تعیین کنیم. مثلاً کاربر حداکثر ۷ بار اجازهٔ حدس دارد.

ایده:

import random
print("بازی حدس عدد با حداکثر 7 تلاش!")
secret_number = random.randint(1, 100)
attempts = 0
max_attempts = 7
while attempts < max_attempts:
    guess_text = input("حدس بزن (بین 1 تا 100): ")
    guess = int(guess_text)
    attempts = attempts + 1
    if guess == secret_number:
        print("عالی! درست حدس زدی.")
        print("در", attempts, "تلاش موفق شدی.")
        break  # خروج از حلقه
    elif guess < secret_number:
        print("عدد من بزرگ‌تر از حدس تو است.")
    else:
        print("عدد من کوچک‌تر از حدس تو است.")
    if attempts == max_attempts:
        print("متاسفانه تلاش‌هایت تمام شد!")
        print("عدد مخفی این بود:", secret_number)

نکتهٔ جدید در این نسخه:

بهبود ۲: بررسی اینکه ورودی عدد است (ایدهٔ ساده)

در نسخهٔ حرفه‌ای‌تر می‌توانیم ورودی اشتباه را مدیریت کنیم (مثلاً اگر کاربر سلام تایپ کند). در این دوره، جزئیات مدیریت خطاها در فصل مربوط به try/except توضیح داده می‌شود؛ پس اینجا فقط ایده را می‌گوییم و یک نمونهٔ کوتاه:

guess_text = input("حدس بزن (عدد وارد کن): ")
if guess_text.isdigit():
    guess = int(guess_text)
else:
    print("لطفاً فقط عدد وارد کن!")
    # می‌توانیم دوباره از کاربر ورودی بگیریم

این فقط یک نمونهٔ ساده است؛ پیاده‌سازی کامل و محکم‌تر را می‌توانید به‌عنوان تمرین خودتان امتحان کنید.


ایده‌هایی برای گسترش بازی (تمرین)

اگر نسخهٔ ساده برایتان راحت شد، می‌توانید این ایده‌ها را امتحان کنید:

  1. انتخاب بازهٔ عددی توسط خود کاربر
    • از کاربر بپرسید عدد حداقل و حداکثر چند باشد.
    • با random.randint(min_value, max_value) عدد مخفی بسازید.
  2. سطح سختی (آسان، معمولی، سخت)
    • برای هر سطح، بازه و یا حداکثر تلاش متفاوت تعیین کنید.
      مثال:
      • آسان: ۱ تا ۵۰، تلاش نامحدود
      • معمولی: ۱ تا ۱۰۰، حداکثر ۱۰ تلاش
      • سخت: ۱ تا ۲۰۰، حداکثر ۷ تلاش
  3. امتیازدهی
    • اگر با تلاش‌های کمتر ببرد، امتیاز بیشتری بگیرد.
    • مثلاً امتیاز = max_attempts - attempts + 1.
  4. تکرار چند دور بازی بدون اجرای مجدد برنامه
    • در پایان بپرسید: «دوباره بازی کنیم؟ (y/n)»
    • اگر کاربر y گفت، بازی را دوباره شروع کنید؛ اگر n گفت، خداحافظی کنید.
  5. راهنمایی پیشرفته‌تر
    • اگر فاصلهٔ عدد مخفی و حدس کم است، بگویید «خیلی نزدیک شدی!».
    • مثلاً اگر abs(secret_number - guess) < 5.

جمع‌بندی

در این پروژه:

پیشنهاد: برنامه را خودتان، بدون کپی، از صفر بنویسید و چند بار آن را تغییر دهید. این پروژهٔ کوچک تمرینی بسیار خوب برای ترکیب مفاهیم مختلف پایتون است.

Views: 7

Comments

Please login to add a comment.

Don't have an account? Register now!