python-HangMan(上吊的人)小游戏 中文版

HangMan是一款训练反应力和词汇量的猜词游戏。玩家需在规定次数内猜出主持人暗写的中文单词,猜错字母会在绞刑架上画出小人身体部分,完成则游戏失败。本文介绍了游戏规则并提供了Python代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

游戏介绍

Hangman在西方是一个家喻户晓的猜词游戏。Hang的英文意思是“绞死”,而Man的英文意思是“人”。由于竞猜者在规定的猜词次数内没有猜中单词就认为被“绞死”,Hangman便由此而得名。该游戏可以训练竞猜者的反应能力,又可以测试其词汇量。西方在电视节目中经常利用该游戏进行有奖竞猜。

游戏规则

主持人暗中写出一个英语单词(有时也可以是短语或句子),不公布于众,只是告诉该词有多少个字母,并按字母的多少给出空格,然后让大家猜。竞猜者一次猜一个字母,每猜中一个字母主持人就把该字母按它在被猜词中的顺序填写到空格中。如果该词有两个(或两个以上)相同的字母,当该字母被猜中时,主持人就按字母在被猜单词中的顺序全部写出。为了限制猜词的次数,主持人画一个“绞刑架”,如果被猜的单词中没有竞猜者所猜的字母,则视为一次没猜中,主持人就在“绞刑架”下画出小人儿身体的一个部分,当小人儿被画完整的时候,竞猜者就被“绞死”了,即竞猜者就输了该次游戏。例如,主持人暗中写出school这个词,给出六个空格,并告诉竞猜者该词有六个字母。竞猜者首先可能猜有字母E,主持人告诉他,她所猜单词中没有E,并在“绞刑架”下面画一个小人儿的头;然后竞猜者继续猜有字母s,主持人就告诉他/她所猜的单词中有一个s,并按该字母在单词中的顺序填写空格,即.S­ _ _ _ _ _;竞猜者再猜有字母A,由于所猜词中没有A,主持人便又在“绞刑架”下画一个小人儿的躯干;竞猜者继续猜有字母o,主持人告诉大家有两个o,并填写在空格上S­ _ _ o o _,这时可能有竞赛者会猜中是school,那么他/她就赢了这次游戏。如果没猜中,就再在“绞刑架”下面画小人儿的腿、胳膊、手和脚。当画成整个小人儿的时候,竞猜者就输了游戏。

游戏代码

改编后代码还原


import random
HANGMAN_PICS = ['''
         +-----+
            |  |
               |
               |
               |
              ===''', '''
         +-----+
            |  |
            O  |
               |
               |
              ===''', '''
         +-----+
            |  |
            O  |
            |  |
               |
              ===''', '''
         +-----+
            |  |
            O  |
           /|  |
               |
              ===''', '''
         +-----+
            |  |
            O  |
           /|\ |
               |
              ===''', '''
         +-----+
            |  |
            O  |
           /|\ |
           /   |
             ===''', '''
         +-----+
            |  |
            O  |
           /|\ |
           / \ |
              ===''']
words = 'you are died '.split(' ')


def getRandomWord(wordList):
    wordIndex = random.randint(0, len(wordList) - 1)
    return wordList[wordIndex]


def displayBoard(missedLetters, correctLetters, secretword):
    print(HANGMAN_PICS[len(missedLetters)])
    print()

    print('密信:', end=' ')
    for letter in missedLetters:
        print(letter, end=' ')
    print()
    blanks = '*' * len(secretword)
    for i in range(len(secretword)):
        if secretword[i] in correctLetters:
            blanks = blanks[:i] + secretword[i] + blanks[i + 1:]
    for letter in blanks:
        print(letter, end=' ')
    print()


def getGuess(alreadyGuessed):
    while True:
        print('猜一封信(输入一个字母):')
        guess = input()
        guess=guess.lower()
        if len(guess) != 1:
            print('请输入一个字母:')
        elif guess in alreadyGuessed:
            print('你已经猜过那个单词了。再选择一次。')
        elif guess not in 'abcdefghijklmnopqrstuvwxyz':
            print('请输入一封信')
        else:
            return guess


def playAgain():
    print('你还想在玩一遍吗(yes or no)')
    return input().lower().startswith('y')


print('上吊的人')
missedLetters = ''
correctLetters = ''
secretWord = getRandomWord(words)
gameIsDone = False

while True:
    displayBoard(missedLetters, correctLetters, secretWord)
    guess = getGuess((missedLetters + correctLetters))
    if guess in secretWord:
        correctLetters = correctLetters + guess
        foundAllLetters = True
        for i in range(len(secretWord)):
            if secretWord[i] not in correctLetters:
                foundAllLetters = False
                break
        if foundAllLetters:
            print('恭喜你,这个神秘的密码是 ' + secretWord + '! 你已经赢了!')
            gameIsDone = True
    else:
        missedLetters = missedLetters + guess
        if len(missedLetters) == len(HANGMAN_PICS) - 1:
            displayBoard(missedLetters, correctLetters, secretWord)
            print('你已经猜不透了!\n接着 ' + str(len(missedLetters)) + ' 漏掉的猜测和 ' + str(
                len(correctLetters)) + ' 猜对了,这个词是 "' + secretWord + '"')
            gameIsDone = True
    if gameIsDone:
        if playAgain():
            missedLetters = ''
            correctLetters = ''
            gameIsDone = False
            secretWord = getRandomWord(words)
        else:
            break
print("you are died!")

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值