این پروژه با هدف آموزش مفاهیم پایه برنامهنویسی پایتون و بهبود کیفیت کد طراحی شده است. با پیادهسازی Hangman شما میتوانید:
-
نحوه کار با توابع و مدیریت دادهها در پایتون را تمرین کنند
-
مدیریت حلقهها و شرطها را برای کنترل جریان بازی یاد بگیرند
-
کار با رشتهها و لیستها را در قالب یک پروژه واقعی تجربه کنند
-
پیادهسازی یک منطق بازی ساده و بررسی ورودی کاربر را تمرین کنند
-
مهارتهای خوانایی و ساختار کد را بهبود دهند و کد مرتب و قابل فهم بنویسند
گامهای پیادهسازی مرحله به مرحله:
-
تعریف تابع انتخاب کلمه تصادفی: یک کلمه از یک لیست پیشفرض انتخاب میشود.
import random
def choose_word():
words = ["python", "hangman", "programming", "developer", "function"]
return random.choice(words)
-
تابع نمایش وضعیت فعلی کلمه: حروف حدس زده شده نمایش داده شود و بقیه به صورت "_" نشان داده شوند
def display_word(word, guessed_letters):
display = ""
for letter in word:
if letter in guessed_letters:
display += letter
else:
display += "_"
return display
-
تابع بررسی حدس کاربر: اعتبارسنجی حروف ورودی و اضافه کردن آن به لیست حروف حدس زده شده
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.")
-
تابع اصلی بازی: کنترل جریان بازی، تعداد تلاشها و پایان بازی
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 چند بازیکنه با روش شئگرا
در این نسخه، کلاسها برای مدیریت بازیکنها، حروف حدس زده شده و جریان بازی استفاده میشوند. این ساختار امکان افزودن بازیکنان جدید و مدیریت امتیازها را ساده میکند.
اهداف این نسخه:
-
یادگیری شیءگرایی و کلاسها در پایتون
-
مدیریت چند بازیکن و نگهداری وضعیت هر بازیکن
-
جداسازی منطق بازی در کلاسها برای خوانایی و سازماندهی بهتر کد
-
تمرین کار با لیستها و رشتهها و جریان بازی
گامهای پیادهسازی مرحله به مرحله:
-
کلاس 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.")
-
کلاس 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}")
-
اجرای بازی
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()