خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

چگونه با استفاده از پایتون یک بازی جلاد بسازیم

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

آیا حوصله بازی ای را دارید که خودتان نوشته اید؟ خوب، شما در جای مناسب هستید. Hangman یک بازی محبوب حدس کلمه است و شما می توانید نسخه خود را با حداقل تلاش بسازید.

این بازی یک سرگرمی عالی است که با نمایش ها و سریال های محبوب بازی های تلویزیونی مانند Wheel of Fortune، Letterbox و Party Time آشنا است. و پایتون یک زبان راحت برای ساختن یک کلون Hangman است.

چگونه بازی جلاد را انجام دهیم

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

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

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

چگونه بازی جلاد بسازیم

سورس کد این بازی Hangman به همراه فایل word list در این مخزن گیت هاب وجود دارد و استفاده از آن رایگان است.

ماژول تصادفی را وارد کنید و یک تابع، get_random_word_from_wordlist() تعریف کنید تا یک کلمه تصادفی از فایل انتخاب کنید. فایل متنی ممکن است حاوی اسامی رایج، یا نام مکان‌ها، حیوانات، فیلم‌ها و موارد دیگر بر اساس علاقه شما باشد. با استفاده از براکت های مستطیلی ([]) یک لیست تعریف کنید.

از عبارت with برای باز کردن فایل استفاده کنید و حالت را به صورت ‘r’ که حالت فقط خواندنی را نشان می دهد، منتقل کنید. این به طور خودکار از بسته شدن فایل در انتهای بلوک حتی در موارد خطا مراقبت می کند. اگر فایل hangman_wordlist.txt را مشاهده کنید، متوجه خواهید شد که در هر خط یک کلمه وجود دارد، بنابراین فایل هر کلمه را با یک کاراکتر خط جدید جدا می کند.

مطلب مرتبط:   نحوه پیاده سازی اسکرول صاف در جاوا اسکریپت: راهنمای توسعه دهندگان وب

کاراکتر escape برای خط جدید (\n) را به تابع split() بفرستید تا هر کلمه را در لیستی که قبلا تعریف کرده بودید ذخیره کنید. از random.choice() برای برگرداندن یک کلمه تصادفی از لیست استفاده کنید.

import random
 
def get_random_word_from_wordlist():
    wordlist = []
 
    with open("hangman_wordlist.txt", 'r') as file:
        wordlist = file.read().split("\n")
 
    word = random.choice(wordlist)
    return word

در مرحله بعد، تابعی به نام get_some_letters() تعریف کنید که کلمه ای که به طور تصادفی انتخاب شده را به عنوان پارامتر می گیرد. این تابع دنباله ای از خط تیره های خالی (_) و برخی حروف را به کاربر نمایش می دهد.

حروف لیست خالی را برای ذخیره تمام کاراکترهای موجود در کلمه تعریف کنید. از متغیر temp برای ذخیره رشته ای استفاده کنید که حاوی تعداد خط تیره های خالی برابر با طول کلمه است. از list() برای تبدیل رشته به لیستی از کاراکترها و تکرار روی آن استفاده کنید. از append() برای اضافه کردن کاراکتر به لیست در صورتی که قبلا موجود نیست استفاده کنید.

از random.choice() برای انتخاب یک کاراکتر تصادفی که قرار است به همراه خط تیره های خالی به کاربر ارائه دهید استفاده کنید. با استفاده از enumerate روی کاراکترهای کلمه تکرار کنید تا فهرست هر کاراکتر را پیگیری کنید.

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

def get_some_letters(word):
    letters = []
    temp = '_' * len(word)
 
    for char in list(word):
        if char not in letters:
            letters.append(char)
 
    character = random.choice(letters)
 
    for num, char in enumerate(list(word)):
        if char == character:
            templist = list(temp)
            templist[num] = char
            temp = ''.join(templist)
 
    return temp

یک تابع draw_hangman() تعریف کنید که تعداد شانس ها را به عنوان پارامتر در نظر می گیرد. این تابع شکلی از مرد حلق آویز را ارائه می دهد. با کاهش تعداد شانس ها، شانس بقا نیز کاهش می یابد. وقتی تمام شد، شکل کامل می شود و بازی تمام می شود.

def draw_hangman(chances):
    if chances == 6:
        print("________ ")
        print("| | ")
        print("| ")
        print("| ")
        print("| ")
        print("| ")
    elif chances == 5:
        print("________ ")
        print("| | ")
        print("| 0 ")
        print("| ")
        print("| ")
        print("| ")
    elif chances == 4:
        print("________ ")
        print("| | ")
        print("| 0 ")
        print("| / ")
        print("| ")
        print("| ")
    elif chances == 3:
        print("________ ")
        print("| | ")
        print("| 0 ")
        print("| /| ")
        print("| ")
        print("| ")
    elif chances == 2:
        print("________ ")
        print("| | ")
        print("| 0 ")
        print("| /|\ ")
        print("| ")
        print("| ")
    elif chances == 1:
        print("________ ")
        print("| | ")
        print("| 0 ")
        print("| /|\ ")
        print("| / ")
        print("| ")
    elif chances == 0:
        print("________ ")
        print("| | ")
        print("| 0 ")
        print("| /|\ ")
        print("| / \ ")
        print("| ")

یک تابع به نام start_hangman_game() که منطق اصلی برنامه را تعریف می کند، اعلام کنید. با فراخوانی تابع get_random_word_from_wordlist() یک کلمه تصادفی دریافت کنید و دنباله را برای نمایش به کاربر با استفاده از تابع get_some_letters () دریافت کنید.

مطلب مرتبط:   نحوه دریافت میزبانی وب سایت رایگان با Dropbox، Google Drive یا OneDrive

تعداد شانس ها را روی هفت قرار دهید و یک متغیر پیدا شده را به عنوان false مقداردهی اولیه کنید. اگر حرف حدس زده شده در کلمه وجود داشته باشد، این را روی true تنظیم می کنید.

def start_hangman_game():
    word = get_random_word_from_wordlist()
    temp = get_some_letters(word)
    chances = 7
    found = False

یک حلقه اعلام کنید که وقتی کاربر کلمه را درست حدس بزند یا شانسش تمام شود، پایان می یابد. بازی را با نمایش دنباله، تعداد حروف کلمه و شانس باقی مانده شروع کنید. از کاربر بخواهید یک حرف را حدس بزند و با استفاده از تابع ()input آن را دریافت کند. ورودی کاربر را با بررسی طول نویسه و الفبا بودن آن تأیید کنید.

    while True:
        if chances == 0:
            print(f"Sorry! You Lost, the word was: {word}")
            print("Better luck next time")
            break
 
        print("=== Guess the word ===")
        print(temp, end='')
        print(f"\t(word has {len(word)} letters)")
        print(f"Chances left: {chances}")
        character = input("Enter the character you think the word may have: ")
 
        if len(character) > 1 or not character.isalpha():
            print("Please enter a single alphabet only")
            continue

اگر ورودی معتبر است، بررسی کنید که آیا کاراکتر در کلمه وجود دارد یا خیر و با استفاده از فرآیندی که قبلاً دیده شد جایگزین کنید و مقدار find را به‌روزرسانی کنید. اگر شخصیت حضور نداشته باشد تعداد شانس ها را کاهش دهید. در صورت وجود، مقدار find را به مقدار اولیه false برگردانید.

اگر هیچ خط تیره خالی باقی نمانده است، نشان می دهد که کاربر برنده شده است به همراه تعداد حدس های انجام شده در غیر این صورت گرافیک جلاد را با توجه به تعداد شانس های باقی مانده نمایش دهید.

        else:
            for num, char in enumerate(list(word)):
                if char == character:
                    templist = list(temp)
                    templist[num] = char
                    temp = ''.join(templist)
                    found = True
 
        if found:
            found = False
        else:
            chances -= 1
 
        if '_' not in temp:
            print(f"\nYou Won! The word was: {word}")
            print(f"You got it in {7 - chances} guess")
            break
        else:
            draw_hangman(chances)
 
        print()

یک تابع برای اجرای بازی جلاد تعریف کنید. اگر ورودی کاربر بله باشد، تابع start_hangman_game() را فراخوانی کنید در غیر این صورت با پیام مناسب بازی را ترک کنید. در صورت ورود نامعتبر از کاربر بخواهید دوباره وارد شود.

print("===== Welcome to the Hangman Game =====")
 
while True:
    choice = input("Do you wanna play hangman? (yes/no): ")
 
    if 'yes' in choice.lower():
        start_hangman_game()
    elif 'no' in choice.lower():
        print('Quitting the game...')
        break
    else:
        print("Please enter a valid choice.")
 
    print("\n")

خروجی بازی جلاد

در صورت برنده شدن در بازی، خروجی زیر را مشاهده خواهید کرد:

مطلب مرتبط:   MapReduce چگونه در یک سیستم فایل داده بزرگ کار می کند؟

خروجی جلاد اگر برنده شوید

در صورت شکست در بازی، خروجی زیر را مشاهده خواهید کرد:

خروجی جلاد در صورت باخت

از پایتون برای ساخت بازی استفاده کنید

می توانید از پایتون برای ساخت بازی های خط فرمان و همچنین بازی های گرافیکی استفاده کنید. برخی از بازی‌های خط فرمان جالبی که می‌توانید با استفاده از پایتون بسازید عبارتند از: بازی حدس اعداد، بازی Magic 8 Ball، Mad Libs، Rock/Paper/Scissors و یک بازی ماجراجویی متنی.

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