」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何用 Python 建立 Hangman 遊戲:逐步指南

如何用 Python 建立 Hangman 遊戲:逐步指南

發佈於2024-11-09
瀏覽:734

How to Build a Hangman Game in Python: A Step-by-Step Guide

Hangman 是一款经典的猜词游戏,非常有趣,对于初学者程序员来说是一个很棒的项目。

在本文中,我们将学习如何用 Python 构建一个简单版本的 Hangman 游戏。

最后,您将了解如何使用 Python 的基本控制结构、函数和列表来创建这个游戏。


什么是刽子手?

Hangman 的目标是通过一次建议一个字母来猜测一个秘密单词。

在游戏结束之前,玩家只能做出有限数量的错误猜测。

对于每个错误的猜测,都会绘制“刽子手”图形的一部分,如果在猜出单词之前绘制出完整的图形,则玩家失败。

让我们分解这个并逐步构建游戏。


第 1 步:规划游戏

让我们计划一下游戏及其主要功能:

  • 游戏随机选择一个单词。
  • 玩家一次猜测一个字母。
  • 玩家的错误猜测次数有限。
  • 游戏将显示正确猜出的字母的单词,并为其余字母显示空白。

游戏将包含以下组件:

  • 选词
  • 玩家输入(猜测)
  • 更新单词的显示
  • 跟踪错误猜测的数量

第2步:导入所需的库

我们将使用 random 模块从列表中随机选择一个单词。


import random



第 3 步:定义单词列表

接下来,定义游戏将从中随机选择的单词列表。

您可以添加更多单词,让游戏变得更有趣。


word_list = ['python', 'java', 'hangman', 'programming', 'computer']



第 4 步:定义游戏函数

功能一:随机选择一个单词

我们需要一个函数来从单词列表中随机选择一个单词。


def get_random_word(word_list):
    return random.choice(word_list)


功能2:显示Word的当前状态

当玩家猜测字母时,我们需要显示正确猜测的字母和未猜测字母的占位符 (_)。


def display_word(word, guessed_letters):
    display = ''
    for letter in word:
        if letter in guessed_letters:
            display  = letter   ' '
        else:
            display  = '_ '
    return display.strip()


功能3:检查玩家是否获胜

此函数检查是否已猜出单词的所有字母。


def is_word_guessed(word, guessed_letters):
    for letter in word:
        if letter not in guessed_letters:
            return False
    return True


功能4:显示刽子手

要在基于文本的游戏中显示刽子手图形,您可以使用 ASCII 艺术来表示刽子手的不同阶段。


def display_hangman(wrong_guesses):
    stages = [
        """
           -----
           |   |
           O   |
          /|\\  |
          / \\  |
               |
        --------
        """,
        """
           -----
           |   |
           O   |
          /|\\  |
          /    |
               |
        --------
        """,
        """
           -----
           |   |
           O   |
          /|\\  |
               |
               |
        --------
        """,
        """
           -----
           |   |
           O   |
          /|   |
               |
               |
        --------
        """,
        """
           -----
           |   |
           O   |
           |   |
               |
               |
        --------
        """,
        """
           -----
           |   |
           O   |
               |
               |
               |
        --------
        """,
        """
           -----
           |   |
               |
               |
               |
               |
        --------
        """
    ]
    # Reverse the list to display the stages in the correct order
    stages.reverse()
    return stages[wrong_guesses]



第 5 步:主游戏循环

现在我们可以将游戏的主循环放在一起了。该循环将:

  • 记录猜出的字母和错误的猜测。
  • 允许玩家输入猜测。
  • 根据猜测更新游戏状态。
  • 当玩家获胜或失败时结束游戏。

完整代码示例:


import random


# Function to get a random word from the list
def get_random_word(word_list):
    return random.choice(word_list)


# Function to display the current state of the word
def display_word(word, guessed_letters):
    display = ''
    for letter in word:
        if letter in guessed_letters:
            display  = letter   ' '
        else:
            display  = '_ '
    return display.strip()


# Function to check if the word has been guessed
def is_word_guessed(word, guessed_letters):
    for letter in word:
        if letter not in guessed_letters:
            return False
    return True


# Function to display the hangman figure
def display_hangman(wrong_guesses):
    stages = [
        """
           -----
           |   |
           O   |
          /|\\  |
          / \\  |
               |
        --------
        """,
        """
           -----
           |   |
           O   |
          /|\\  |
          /    |
               |
        --------
        """,
        """
           -----
           |   |
           O   |
          /|\\  |
               |
               |
        --------
        """,
        """
           -----
           |   |
           O   |
          /|   |
               |
               |
        --------
        """,
        """
           -----
           |   |
           O   |
           |   |
               |
               |
        --------
        """,
        """
           -----
           |   |
           O   |
               |
               |
               |
        --------
        """,
        """
           -----
           |   |
               |
               |
               |
               |
        --------
        """
    ]
    # Reverse the list to display the stages in the correct order
    stages.reverse()
    return stages[wrong_guesses]


# Main function to play the game
def play_hangman():
    word_list = ['python', 'java', 'hangman', 'programming', 'computer']
    word = get_random_word(word_list)
    guessed_letters = []
    attempts = 6
    wrong_guesses = 0

    print("Welcome to Hangman!")
    print("Guess the word!")

    # Main game loop
    while wrong_guesses 

解释

  • get_random_word():从单词列表中随机选择一个单词。
  • display_word():创建一个表示单词当前状态的字符串,显示正确猜出的字母和未猜出的字母的占位符。
  • is_word_guessed():检查玩家是否猜出了单词中的所有字母。
  • display_hangman(wrong_guesses):此函数将错误猜测的数量作为参数,并返回该阶段相应的 ASCII 艺术。
  • play_hangman():控制游戏的主要函数。它处理用户输入,跟踪玩家的猜测,并确定玩家是赢了还是输了。

关键变量:

  • guessed_letters:存储玩家猜出的字母的列表。
  • wrong_guesses:跟踪玩家做出了多少次错误的猜测。 attempts: 允许的最大错误猜测次数。
  • stages:此列表包含刽子手人物在不同完成阶段的 ASCII 艺术表现形式。每个阶段对应不同数量的错误猜测。

第 6 步:运行游戏

要运行游戏,只需执行 Python 脚本,假设您创建了一个文件 main.py:


python main.py


游戏会提示您输入字母,并且随着您的进展,它会显示正确猜出的字母的单词。

如果您尝试次数用完,游戏就会结束,您就输了,如下所示:


           -----
           |   |
           O   |
          /|\  |
          / \  |
               |
        --------

Game over! The word was: programming


如果你猜对了这个词,你就赢了,就像这样:


           -----
           |   |
               |
               |
               |
               |
        --------

j a _ a
Enter a letter: v
Good guess! v is in the word.
Congratulations! You've guessed the word: java




结论

这个简单的 Hangman 游戏演示了 Python 中控制结构、函数、列表和基本输入/输出的使用。

构建此项目时,您可以添加更多功能,例如:

  • 添加单词类别。
  • 给予提示。
  • 添加评分系统。

这是一个很棒的项目,可以在您学习更多高级 Python 概念时进行扩展。

版本聲明 本文轉載於:https://dev.to/devasservice/how-to-build-a-hangman-game-in-python-a-step-by-step-guide-136k?1如有侵犯,請洽study_golang @163.com刪除
最新教學 更多>
  • 如何使用 CSS 剪輯路徑和 JavaScript 實現反轉文字顏色懸停效果?
    如何使用 CSS 剪輯路徑和 JavaScript 實現反轉文字顏色懸停效果?
    使用CSS 和JavaScript 反轉滑鼠懸停時的文字顏色實現所需的懸停效果,其中黑色文字反轉為白色,同時保持出現黑色遊標時,我們可以將CSS 剪輯路徑的功能與JavaScript 事件處理結合。 此方法包括建立兩層文字:主文本層和反轉的文字層。倒置文字圖層位於主文字圖層後面,並將其文字顏色設為白...
    程式設計 發佈於2024-11-09
  • 量子計算:它將如何重新定義技術
    量子計算:它將如何重新定義技術
    量子计算代表了 21 世纪最深刻的技术进步之一。与使用位来处理 0 或 1 信息的经典计算机不同,量子计算机使用可以同时存在于多种状态的量子位或量子位。计算领域的这一根本性转变有望重新定义技术,推动各个领域的突破并解决目前经典系统难以解决的问题。 在本文中,我们将探讨量子计算的工作原理、其潜在应用以...
    程式設計 發佈於2024-11-09
  • 如何增加 PHP 最大 POST 變數限制?
    如何增加 PHP 最大 POST 變數限制?
    PHP最大POST變數限制處理具有大量輸入欄位的POST請求時,當變數數量超過預設值時,會出現常見問題PHP 中的限制。例如,超過 1000 個欄位的表單可能只會公開 $_POST 陣列中的前 1001 個變數。 要解決此問題,需要調整 PHP 允許的 POST 變數的最大數量。在版本 5.3.9 ...
    程式設計 發佈於2024-11-09
  • 如何垂直對齊 a 內部?
    如何垂直對齊 a 內部?
    在 內垂直對齊考慮以下情況:您有一個 嵌套在< div> ,如這段程式碼所示:&lt;div id="theMainDiv" style=" border:solid 1px gray; cursor:text; width:4...
    程式設計 發佈於2024-11-09
  • 如何在PHP中儲存和恢復數組以實現高效的離線存取?
    如何在PHP中儲存和恢復數組以實現高效的離線存取?
    在PHP 中儲存和恢復數組以供本地訪問您已從遠端API 獲取數組並希望將其存儲在本地以供離線使用操縱。為了實現這一目標,您可以在不影響效能或檔案大小的情況下利用 JSON 序列化。 JSON 序列化:編碼和解碼PHP 為JSON 序列化提供了兩個關鍵函數:json_encode 將陣列轉換為人類可讀...
    程式設計 發佈於2024-11-09
  • 如何使用 Docker 部署 Go 應用程式
    如何使用 Docker 部署 Go 應用程式
    Docker is a containerization platform that simplifies applications’ packaging, distribution, and deployment. You can harness the benefits of Go and Do...
    程式設計 發佈於2024-11-09
  • 使用 JavaScript Web 元件和 LIT 建置可重複使用元件
    使用 JavaScript Web 元件和 LIT 建置可重複使用元件
    在當今快節奏的 Web 開發環境中,建立可重複使用和可維護的元件是關鍵。 JavaScript Web 元件 提供了一種原生方法來建立跨框架工作的獨立、模組化元素。然而,手動建立這些組件可能既乏味又複雜。這就是 LIT 發揮作用的地方! LIT 簡化了建立 Web 元件的過程,使管理狀態、反應性和...
    程式設計 發佈於2024-11-09
  • 如何在 C++ 中傳遞給非主函數的陣列上使用基於範圍的 for 迴圈?
    如何在 C++ 中傳遞給非主函數的陣列上使用基於範圍的 for 迴圈?
    傳遞給非主函數的數組上基於範圍的for 循環在C 中,基於範圍的for 循環可以是用於迭代數組。但是,當數組傳遞給非主函數時,它會衰減為指針,從而失去其大小資訊。 要解決此問題並啟用基於範圍的 for 循環,數組應該被引用而不是作為指標傳遞。這保留了數組的大小資訊。以下是示範正確方法的修改範例:vo...
    程式設計 發佈於2024-11-09
  • array_column 與 PHP 中的物件陣列相容嗎?
    array_column 與 PHP 中的物件陣列相容嗎?
    在物件陣列中使用 array_column 是否可行? PHP 的 array_column 函數是從多維資料中提取特定列的強大工具大批。然而,它與物件數組一起使用帶來了挑戰。 在早期版本的 PHP 中,array_column 不支援物件陣列。作為一種解決方法,可以使用 array_map 手動提...
    程式設計 發佈於2024-11-09
  • 何時使用 PDO 而不是 mysql_real_escape_string 來轉義 MySQL 查詢?
    何時使用 PDO 而不是 mysql_real_escape_string 來轉義 MySQL 查詢?
    轉義MySQL 查詢:PDO 與mysql_real_escape_string雖然mysql_real_escape_string 提供了一種轉義MySQL 查詢並防止SQL 注入的方法,但建議使用PHP 資料物件( PDO) )以增強安全性和多功能性。 什麼是PDO? PDO 是 PHP 中物件...
    程式設計 發佈於2024-11-09
  • 如何將`std::string`轉換為`LPCSTR`和`LPWSTR`?
    如何將`std::string`轉換為`LPCSTR`和`LPWSTR`?
    將std::string 轉換為LPCSTR 和LPWSTR將std::string 轉換為LPCSTR 或LPWSTR 需要理解這些的本質指標。讓我們澄清一下它們的定義:LPCSTR 與 LPSTR:LPCSTR:指向常數字串的長指針,本質上是 const char*。 LPSTR:指向字串的長指...
    程式設計 發佈於2024-11-09
  • 黃瓜測試:綜合指南
    黃瓜測試:綜合指南
    Cucumber 是一款支持行为驱动开发 (BDD) 的开源测试工具,使团队能够用任何人都能理解的简单语言编写测试。通过弥合开发人员、测试人员和非技术利益相关者之间的差距,Cucumber 确保软件满足功能和业务需求。 在本文中,我们将深入探讨 Cucumber 测试是什么、它的主要功能以及如何在...
    程式設計 發佈於2024-11-09
  • ## Compare() 與 CompareTo():什麼時候應該在 Java 中使用 Each ?
    ## Compare() 與 CompareTo():什麼時候應該在 Java 中使用 Each ?
    闡明compare()和compareTo()之間的區別Java生態系統圍繞操作對象展開,確定它們的相對順序在各種場景中至關重要。本文旨在闡明兩個關鍵方法:compare() 和compareTo() 之間的細微差別,闡明它們在比較對像中的不同作用。 compareTo()compareTo() 位...
    程式設計 發佈於2024-11-09
  • 兩個指針和滑動視窗模式
    兩個指針和滑動視窗模式
    雙指標與滑動視窗模式 模式1:常數視窗(如window = 4或某個整數值) 例如,給定一個(-ve 和 ve)整數數組,找到大小為 k 的連續視窗的最大和. 模式2:(可變視窗大小)具有的最大子數組/子字串範例:sum
    程式設計 發佈於2024-11-09
  • 何時使用 PSR-4 與類別映射自動載入以獲得最佳效能?
    何時使用 PSR-4 與類別映射自動載入以獲得最佳效能?
    PSR-4 與類別映射自動載入:解決效能爭論問題Composer 為類別自動載入提供了多種選項:PSR- 0/ 4 標準或直接類別映射掃描。儘管文件推薦 PSR-4,但使用者認為類別映射提供更快的載入速度。這就提出了一個問題:如果類別映射看起來比 PSR-4 更優秀,為什麼還要使用 PSR-4? P...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3