HANGMAN游戏Python实现

一、HANGMAN游戏

-这是一个经典单词游戏Hangman的变形设计。如果你对游戏规则不熟悉,可以点击链接:
link.此处第二玩家始终是计算机,它会随机选择一个单词(即下文经常用到的secretWord

1.1 游戏规则

1、计算机从单词表中随机地选取一个单词,实现这一点的代码已经提供在文件中。
2、游戏是交互式的,游戏的流程如下:
• 刚开始时,让用户知道单词的长度(即secretWord的长度)
• 每一轮让用户猜一次(一个字母)
• 用户能得到立即反馈,所猜字母是否是secret单词的字母
• 每一轮,需要显示已经猜中的部分,以及用户没有猜过的字母
3. 游戏的额外规则:
• 用户可以猜8次. 每一轮猜测后提醒他剩余多少次可猜。假设用户总是每次输入一个字母 (A-Z)。
• 当用户错误猜测时,猜测次数减少1次。
• 如果用户重复猜了已经猜过的字母,猜测次数不减,提醒他这个字母已经猜过了,并继续猜测。
• 如果用户猜过的字母拼出了那个单词,游戏结束。如果用户用完猜测次数(未猜中单词),游戏结束并揭示秘密单词。

1.2 游戏样例

Loading word list from file…
55900 words loaded.
Welcome to the game, Hangman!
I am thinking of a word that is 4 letters long.
-------------
You have 8 guesses left.
Available letters: abcdefghijklmnopqrstuvwxyz
Please guess a letter: a
Good guess: _ a_ _
------------
You have 8 guesses left.
Available letters: bcdefghijklmnopqrstuvwxyz
Please guess a letter: a
Oops! You’ve already guessed that letter: _ a_ _
------------
You have 8 guesses left.
Available letters: bcdefghijklmnopqrstuvwxyz
Please guess a letter: s
Oops! That letter is not in my word: _ a_ _
------------
You have 7 guesses left.
Available letters: bcdefghijklmnopqrtuvwxyz
Please guess a letter: t
Good guess: ta_ t
------------
You have 7 guesses left.
Available letters: bcdefghijklmnopqruvwxyz
Please guess a letter: r
Oops! That letter is not in my word: ta_ t
------------
You have 6 guesses left.
Available letters: bcdefghijklmnopquvwxyz
Please guess a letter: m
Oops! That letter is not in my word: ta_ t
------------
You have 5 guesses left.
Available letters: bcdefghijklnopquvwxyz
Please guess a letter: c
Good guess: tact
------------
Congratulations, you won!

二、Python实现

在这个问题中,你将实现函数hangman(最后需要完成的函数),程序将在玩家与计算机之间交互运行。在完成这个函数的设计之前,需要先创建几个辅助函数。

2.1 函数一:isWordGuessed

  • 它有2个参数:一个字符串secretWord, 一个字符列表lettersGuessed。函数返回逻辑值 ,如果 secretWord
    已经被猜中 (ie, secretWord 中的所有字母都在lettersGuessed)返回True ,否则返回 False 。
    (假设secretWord 与 lettersGuessed 都是小写字母。)
  • 代码如下:
// isWordGuessed
def isWordGuessed(secretWord, lettersGuessed):
secretWord_set = set(secretWord)      #取secretWord全部字母作为集合secretWord
lettersGuessed_set = set(lettersGuessed)   #将lettersGuessed转化集合lettersGuessed
if secretWord_set <= lettersGuessed_set:    #集合secretWord是否为集合lettersGuessed子集
        return True
    else:
        return False

2.2 函数二:getGuessedWord

  • 它有2个输入参数:一个字符串secretWord,一个字母列表lettersGuessed。函数返回一个字符串,该返回串由字母与下划线组成,内容取决于lettersGuessed
    中的字母是否是 secretWord的字母. 这个函数不应该与前面编写的代码isWordGuessed相差太大。
    当在字符串中加入下划线时,要在后面加至少一个空格,这样用户看还有多少个字母未猜中会更清楚 (比较一下形式 __ 与 _ _ _ _ )。
  • 代码如下:
// getGuessedWord
def getGuessedWord(secretWord, lettersGuessed):
    secretWord_set = set(secretWord)
    secretWord_tmp = secretWord
    lettersGuessed_set = set(lettersGuessed)
    right_set = secretWord_set & lettersGuessed_set    #获取已猜中字母的集合right_set
    wrong_set = secretWord_set - right_set        #获取未猜中字母的集合wrong_set
    for item in wrong_set:
        secretWord_tmp = secretWord_tmp.replace(item, '_ ')    #将未猜中字母全部替换后输出
return secretWord_tmp

2.3 函数三:getAvailableLetters

  • 它接受一个输入参数:一个字母列表lettersGuessed。函数返回所有没有被猜测过(即不在lettersGuessed中)的小写字母按字母顺序组成的字符串。
  • 代码如下:
// getAvailableLetters
def getAvailableLetters(lettersGuessed):
    alpha26_set = set('abcdefghijklmnopqrstuvwxyz')    #定义26个字母集合alpha26_set
    lettersGuessed_set = set(lettersGuessed)
    available_set = alpha26_set - lettersGuessed_set      #获取没有被猜过字母的集合available_set
    available_letters_tmp = ''.join(available_set)          #将集合转化为字符串(乱序)
    available_letters_lst = sorted(available_letters_tmp)    #将乱序字符串转化为有序列表
    available_letters = ''.join(available_letters_lst)        #将有序列表转化为字符串输出
return  available_letters

三、全部代码(.py)

  • 直达下载链接(含全部代码和数据):link.
下面是一个简单的 Hangman 游戏Python 代码实现,使用了 ASCII 图形来绘制 Hangman 的图像: ```python import random # Hangman 图像 HANGMAN = ( """ _______ |/ | | | | | | | | ------- """, """ _______ |/ | | O | | | | | | ------- """, """ _______ |/ | | O | | | | | | | ------- """, """ _______ |/ | | O | /| | | | | | ------- """, """ _______ |/ | | O | /|\\ | | | | | ------- """, """ _______ |/ | | O | /|\\ | / | | | | ------- """, """ _______ |/ | | O | /|\\ | / \\ | | | | ------- """ ) # 可选的单词列表 WORDS = ("PYTHON", "JAVASCRIPT", "JAVA", "PHP", "RUBY", "HTML", "CSS", "MYSQL") # 选择一个随机单词 word = random.choice(WORDS) # 用下划线替代单词的字母 display = "_" * len(word) # 跟踪猜测的字母 guessed = [] # 猜测的次数 wrong_guesses = 0 # 游戏循环 while wrong_guesses < len(HANGMAN) - 1: # 显示当前的 Hangman 图像和猜测的字母 print(HANGMAN[wrong_guesses]) print("猜测的字母:", guessed) print("当前单词状态:", display) # 等待用户输入一个字母 guess = input("请猜一个字母:").upper() # 如果用户已经猜过这个字母,跳过 if guess in guessed: print("你已经猜过这个字母了。请重新猜一个字母。") continue # 把猜测的字母添加到列表 guessed.append(guess) # 如果用户猜对了,更新单词状态 if guess in word: print("你猜对了!") # 更新单词状态 new_display = "" for i in range(len(word)): if word[i] == guess: new_display += guess else: new_display += display[i] display = new_display # 如果单词已经被猜完,胜利 if "_" not in display: print("恭喜你,你猜对了!单词是:" + word) break # 如果用户猜错了,增加猜错次数 else: print("你猜错了。") wrong_guesses += 1 # 如果猜错次数达到最大值,游戏结束 if wrong_guesses == len(HANGMAN) - 1: print(HANGMAN[wrong_guesses]) print("很遗憾,你输了。单词是:" + word) ``` 这个代码使用 `HANGMAN` 元组来存储 Hangman 图像。`WORDS` 列表包含可供选择的单词。在每次游戏开始时,从列表随机选择一个单词,并将其转换为下划线。然后,程序进入一个循环,直到玩家猜对单词或猜错次数达到最大值。在每个循环程序显示当前的 Hangman 图像和猜测的字母,并等待玩家输入一个字母。如果玩家猜对了,程序更新单词状态,并检查单词是否被猜完。如果玩家猜错了,程序增加猜错次数。如果猜错次数达到最大值,程序显示 Hangman 的完整图像,并宣布玩家输了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值