hangman 游戏实现
什么是hangman (刽子手)游戏
关于hangman游戏的介绍请看维基百科:https://en.wikipedia.org/wiki/Hangman_(game) 其实就是各种不同条件下的猜单词游戏,本质意思请看下面的游戏解读。
游戏过程解读
- 计算机从一个文本中随机抽取一个单词,字符串表示,并显示出字符串长度
- 用户一个字符一个字符去猜,手动输入猜测结果,总共有6次猜测次数,每次猜测完之后,计算机告知玩家已经猜测的结果和剩余可以猜测的字母范围
- 玩家猜测过程是有一定的规则的:
- 不能猜测已经猜测过的字符,每重复猜测一次,计算机发出警告一次,总共有3次警告机会;不能猜测除了大小写字母之外的字符,如‘#’ 等一些特殊字符,每猜测一次,警告次数减 1;当警告次数没有了,玩家如果继续犯规(猜测重复,或者猜测除大小写字母之外的字符)则猜测次数减去 1;
- 玩家猜测的字母不在目标串 secret_letters中,如果猜测的字母是元音字母,则猜测次数减 2 作为惩罚,如果是辅音字母,则猜测次数减 1
- 这样猜对于玩家来说实在太有难度了,是否可以实现一个游戏的改进版本,每当玩家输入星号 * 时,计算机自动输出文本中所有与当前玩家已猜测结果相符合的单词呢?这样就可以大大缩小玩家的猜测范围了,降低游戏难度。
模块化编程思想
怎么实现这个游戏呢?
我们首先要实现一些功能,这些功能如下:
- 计算机如何获取文本
- 如何从文本中随机获取单词
- 判断玩家猜测字符是否正确
- 获取玩家已猜对字母
- 获取剩余可猜测字母范围
- 计算机玩家交互过程
相关函数的代码就不分别给出了,下面直接给出整个项目的代码
游戏代码
# Hangman Game
import random
import string
WORDLIST_FILENAME = "words.txt"
def load_words():#读取文件
print("Loading word list from file...")
# inFile: file
inFile = open(WORDLIST_FILENAME, 'r')
# line: string
line = inFile.readline()
# wordlist: list of strings
wordlist = line.split() #空格分开的单词
print(" ", len(wordlist), "words loaded.")
return wordlist #返回的是一个列表
wordlist=load_words()
def choose_word(wordlist):
return random.choice(wordlist) #随机获取一个单词
#判断玩家猜测是否正确
def is_word_guessed(secret_word, letters_guessed):
list_secret=list(secret_word)
#只要目标中出现一个字母不在玩家猜测结果中,返回False,都在的话,返回True
for i in list_secret:
if i not in letters_guess