پیاده سازی بازی Hangman

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/05/25
  • تعداد بازدید: 7

این پروژه با هدف آموزش مفاهیم پایه برنامه‌نویسی پایتون و بهبود کیفیت کد طراحی شده است. با پیاده‌سازی Hangman شما می‌توانید:

  • نحوه کار با توابع و مدیریت داده‌ها در پایتون را تمرین کنند

  • مدیریت حلقه‌ها و شرط‌ها را برای کنترل جریان بازی یاد بگیرند

  • کار با رشته‌ها و لیست‌ها را در قالب یک پروژه واقعی تجربه کنند

  • پیاده‌سازی یک منطق بازی ساده و بررسی ورودی کاربر را تمرین کنند

  • مهارت‌های خوانایی و ساختار کد را بهبود دهند و کد مرتب و قابل فهم بنویسند

گام‌های پیاده‌سازی مرحله به مرحله:

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

import random

def choose_word():
    words = ["python", "hangman", "programming", "developer", "function"]
    return random.choice(words)
  1. تابع نمایش وضعیت فعلی کلمه: حروف حدس زده شده نمایش داده شود و بقیه به صورت "_" نشان داده شوند

def display_word(word, guessed_letters):
    display = ""
    for letter in word:
        if letter in guessed_letters:
            display += letter
        else:
            display += "_"
    return display
  1. تابع بررسی حدس کاربر: اعتبارسنجی حروف ورودی و اضافه کردن آن به لیست حروف حدس زده شده

def get_guess(guessed_letters):
    while True:
        guess = input("Enter a letter: ").lower()
        if len(guess) == 1 and guess.isalpha() and guess not in guessed_letters:
            return guess
        else:
            print("Invalid input or letter already guessed.")
  1. تابع اصلی بازی: کنترل جریان بازی، تعداد تلاش‌ها و پایان بازی

def hangman_game():
    word_to_guess = choose_word()
    guessed_letters = []
    max_attempts = 6
    attempts = 0

    print("Welcome to Hangman!")
    while attempts < max_attempts:
        print("\nWord:", display_word(word_to_guess, guessed_letters))
        guess = get_guess(guessed_letters)
        guessed_letters.append(guess)

        if guess not in word_to_guess:
            attempts += 1
            print(f"Wrong guess! Attempts left: {max_attempts - attempts}")

        if all(letter in guessed_letters for letter in word_to_guess):
            print(f"Congratulations! You guessed the word: {word_to_guess}")
            return

    print(f"Game over! The word was: {word_to_guess}")

hangman_game()

بازی Hangman چند بازیکنه با روش شئ‌گرا

در این نسخه، کلاس‌ها برای مدیریت بازیکن‌ها، حروف حدس زده شده و جریان بازی استفاده می‌شوند. این ساختار امکان افزودن بازیکنان جدید و مدیریت امتیازها را ساده می‌کند.

اهداف این نسخه:

  • یادگیری شیءگرایی و کلاس‌ها در پایتون

  • مدیریت چند بازیکن و نگهداری وضعیت هر بازیکن

  • جداسازی منطق بازی در کلاس‌ها برای خوانایی و سازماندهی بهتر کد

  • تمرین کار با لیست‌ها و رشته‌ها و جریان بازی

گام‌های پیاده‌سازی مرحله به مرحله:

  1. کلاس Player
    این کلاس هر بازیکن را نمایش می‌دهد و وضعیت حدس‌ها و تعداد تلاش‌ها را ذخیره می‌کند.

class Player:
    def __init__(self, name):
        self.name = name
        self.guessed_letters = []
        self.attempts = 0
        self.max_attempts = 6
        self.success = False

    def make_guess(self):
        while True:
            guess = input(f"{self.name}, enter a letter: ").lower()
            if len(guess) == 1 and guess.isalpha() and guess not in self.guessed_letters:
                self.guessed_letters.append(guess)
                return guess
            else:
                print("Invalid input or letter already guessed.")
  1. کلاس HangmanGame
    این کلاس منطق اصلی بازی را شامل انتخاب کلمه، مدیریت بازیکنان و بررسی وضعیت بازی برعهده دارد.

import random

class HangmanGame:
    def __init__(self, players_names):
        self.words = ["python", "hangman", "programming", "developer", "function"]
        self.word_to_guess = random.choice(self.words)
        self.players = [Player(name) for name in players_names]

    def display_word(self, player):
        display = ""
        for letter in self.word_to_guess:
            if letter in player.guessed_letters:
                display += letter
            else:
                display += "_"
        return display

    def play(self):
        print("Welcome to Hangman!")
        while True:
            all_failed = True
            for player in self.players:
                if player.success or player.attempts >= player.max_attempts:
                    continue
                all_failed = False
                print(f"\n{player.name}'s turn")
                print("Word:", self.display_word(player))
                guess = player.make_guess()
                if guess not in self.word_to_guess:
                    player.attempts += 1
                    print(f"Wrong guess! Attempts left: {player.max_attempts - player.attempts}")
                else:
                    if all(letter in player.guessed_letters for letter in self.word_to_guess):
                        player.success = True
                        print(f"Congratulations {player.name}! You guessed the word: {self.word_to_guess}")
            if all_failed or all(player.success for player in self.players):
                break

        print("\nGame Over! Results:")
        for player in self.players:
            status = "Won" if player.success else "Lost"
            print(f"{player.name}: {status}, Attempts: {player.attempts}")
  1. اجرای بازی

player_names = ["Alice", "Bob", "Charlie"]
game = HangmanGame(player_names)
game.play()

ویژگی‌ها و مزایای نسخه شئ‌گرا:

  • هر بازیکن یک شیء مستقل دارد و وضعیت خودش را مدیریت می‌کند

  • منطق بازی جدا از بازیکنان قرار دارد و کد خواناتر است

  • افزودن بازیکن جدید یا تغییر قوانین بازی آسان است

  • امکان گسترش بازی برای سیستم امتیازدهی یا دورهای چندگانه فراهم می‌شود

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

import random

class Player:
    def __init__(self, name):
        self.name = name
        self.guessed_letters = []
        self.attempts = 0
        self.max_attempts = 6
        self.success = False

    def make_guess(self):
        while True:
            guess = input(f"{self.name}, enter a letter: ").lower()
            if len(guess) == 1 and guess.isalpha() and guess not in self.guessed_letters:
                self.guessed_letters.append(guess)
                return guess
            else:
                print("Invalid input or letter already guessed.")

class HangmanGame:
    def __init__(self, players_names):
        self.words = ["python", "hangman", "programming", "developer", "function"]
        self.word_to_guess = random.choice(self.words)
        self.players = [Player(name) for name in players_names]

    def display_word(self, player):
        display = ""
        for letter in self.word_to_guess:
            if letter in player.guessed_letters:
                display += letter
            else:
                display += "_"
        return display

    def play(self):
        print("Welcome to Hangman!")
        while True:
            all_failed = True
            for player in self.players:
                if player.success or player.attempts >= player.max_attempts:
                    continue
                all_failed = False
                print(f"\n{player.name}'s turn")
                print("Word:", self.display_word(player))
                guess = player.make_guess()
                if guess not in self.word_to_guess:
                    player.attempts += 1
                    print(f"Wrong guess! Attempts left: {player.max_attempts - player.attempts}")
                else:
                    if all(letter in player.guessed_letters for letter in self.word_to_guess):
                        player.success = True
                        print(f"Congratulations {player.name}! You guessed the word: {self.word_to_guess}")
            if all_failed or all(player.success for player in self.players):
                break

        print("\nGame Over! Results:")
        for player in self.players:
            status = "Won" if player.success else "Lost"
            print(f"{player.name}: {status}, Attempts: {player.attempts}")

# Run the game
player_names = ["Alice", "Bob", "Charlie"]
game = HangmanGame(player_names)
game.play()

 

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد
0/600

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.