Python中的剪刀石头布游戏

Python中的剪刀石头布游戏

Python是一种可以用于不同目的的编程语言,可以做任何事情。 Python也可以用于开发游戏。开发游戏是学习如何编写程序的一种很好的方法。

在接下来的教程中,我们将学习如何在Python编程语言中创建一个简单的“剪刀石头布”游戏,而不使用任何外部游戏库,如 PyGame

但在开始之前,让我们简要了解一下“剪刀石头布”游戏是什么。

什么是“剪刀石头布”游戏

我们中的大多数人可能以前玩过剪刀石头布游戏。剪刀石头布常常被用作两个或更多人之间的公平选择方法,以解决争议或做出公正的集体决策。这种方法类似于抛硬币、抽签或掷骰子。

如果有人不熟悉,剪刀石头布游戏被认为是两个或更多玩家之间的手游戏。参与者说“剪刀、石头、布!”然后以同时的方式用双手成形,形成石头(拳头)、一张纸(手掌朝下)或一把剪刀(两根伸展的手指)。

这个游戏的规则很简单:

规则 1: 石头打破剪刀,所以 石头 赢了。

规则 2: 纸包住石头,所以 赢了。

规则 3: 剪刀剪掉纸,所以 剪刀 赢了。

现在我们已经了解了剪刀石头布游戏是什么以及它的规则,我们可以开始考虑这些规则如何转化为Python代码。

在下面的Python项目中,玩家将从石头、纸和剪刀中选择任意一种。然后他们将点击播放按钮以显示游戏的结果。

项目的先决条件

我们将使用Python编程语言的基本概念与 Tkinter 库和随机模块,以实现剪刀石头布项目。

Tkinter 库: Tkinter 库是一个标准的图形用户界面(GUI)库,是构建GUI应用程序最简单的方法之一。

随机模块: 随机模块允许程序员生成随机数字。

我们可以使用Python的 pip 安装程序命令在命令提示符或终端上安装这些库,如下所示:

语法:

$ pip install tkinter
$ pip install random

Python项目的结构

以下是我们用Python构建完全功能的Rock Paper Scissors游戏的步骤:

步骤1: 导入所需的库

步骤2: 创建应用程序的GUI

步骤3: 编写用户选择的代码

步骤4: 编写计算机选择的代码

步骤5: 定义函数

步骤6: 定义按钮

现在我们将详细讨论这些步骤。所以,让我们开始吧。

导入所需的库

每个项目的步骤1是导入我们将在整个项目中使用的所有库和模块。在这种情况下,我们需要导入Tkinter库和random模块。

让我们看一下以下代码片段来说明这一点:

文件:rockPaperScissors.py

# importing the required libraries and modules
from tkinter import *
import random

解释:

在上述代码片段中,我们导入了 Tkinter 库以及 random 模块。

为应用程序创建GUI界面

一旦我们导入所需的库和模块,我们将使用 Tkinter 库的 Tk() 类来初始化一个窗口,并为该窗口提供一些细节。

让我们考虑以下代码片段,演示相同的内容:

文件:rockPaperScissors.py

# creating the GUI for the application
guiWindow = Tk()
guiWindow.title("The Rock Paper Scissors Game")
guiWindow.geometry("480x480")
guiWindow.config(bg = "#87BDD8")
guiWindow.resizable(width = False, height = False)

解释:

在上面的代码片段中,我们使用 Tkinter 库的 Tk() 类来初始化一个窗口。然后我们使用 title() 方法来设置窗口的标题。我们还使用 geometry() 方法来设置窗口的宽度和高度。然后在 config() 方法的 bg 参数中指定窗口的背景颜色。最后,我们使用 resizable() 方法将窗口的大小固定,通过将 widthheight 参数设置为 False

现在,我们将使用 Label() 部件类将一个标签添加到窗口。以下代码片段是 Label() 部件的实现。

文件: rockPaperScissors.py

# adding a label to the window using the Label() widget
heading = Label(
    guiWindow,
    text = 'Let\'s play Rock Paper Scissors',
    font = 'arial 18 bold',
    bg = '#588C7E',
    fg = 'white'
    ).pack()

解释:

在上面的代码片段中,我们使用了 Label() 小部件来显示用户无法更改的文本。在这个小部件中,我们指定了窗口的名称,即 guiWindow 。我们还定义了标签上显示的文本作为标签的标题。我们还提供了文本应该以哪种字体样式编写。我们还使用 bg 参数指定了背景颜色,使用 fg 参数指定了前景颜色。然后,我们使用pack函数将小部件组织成一个块的形式。

创建用户选择的列

既然我们已经成功创建了一个窗口,现在是时候创建一个列了,玩家可以在这个列中输入他们的选择。

让我们来看一下下面的代码片段,它演示了同样的情况:

文件:rockPaperScissors.py

# creating column for user selection
userInput = StringVar()

subHeading = Label(
    guiWindow,
    text = 'Select any ONE from rock, paper, scissors',
    font = 'calibri 14 bold',
    bg = '#96ceb4'
    ).place(
        x = 35,
        y = 110
        )

Entry(
    guiWindow,
    font = 'calibri 14',
    textvariable = userInput,
    bg = '#FBEFCC'
    ).place(
        x = 110,
        y = 160
        )

说明:

在上面的代码片段中,我们使用了 StringVar() 类来存储玩家选择的结果,并将其存储在 userInput 变量中。接着,我们创建了一个标签用于显示一些文本给玩家。最后,我们使用 Entry() 小部件创建了一个输入文本框。在这个小部件中,我们使用了 textvariable 参数来检索文本到 Entry() 小部件中。我们还使用了 place() 函数来在特定坐标上放置小部件。

计算机选择的代码

现在,我们将使用随机模块的 randint() 函数让计算机选择其偏好。让我们来看以下演示相同功能的代码片段。

文件:rockPaperScissors.py

# code for computer selection
compSelection = random.randint(1, 3)

if compSelection == 1:
    compSelection = 'rock'
elif compSelection == 2:
    compSelection = 'paper'
else:
    compSelection = 'scissors'

解释:

在上面的代码片段中,我们使用了random模块的randint()函数来从给定范围中随机选择任意数字。然后我们使用了if-elif-else条件语句来玩剪刀石头布游戏。

如果计算机选择了1,那么剪刀将被赋给compSelection变量。

如果计算机选择了2,那么石头将被赋给compSelection变量。

如果计算机选择了3,那么布将被赋给compSelection变量。

创建一个开始游戏的函数

一旦我们从用户选择和计算机选择中获取了值,我们将编写一个函数来开始游戏。这个函数将检查来自userSelection变量的值,并将其与来自compSelection变量的值进行比较,并返回所需的语句。

文件:rockPaperScissors.py

# creating function to begin the game
res = StringVar()

def letsPlay():
    userSelection = userInput.get()
    if userSelection == compSelection:
        res.set("It's a Tie! You made a same choice as computer.")
    elif userSelection == 'rock' and compSelection == 'paper':
        res.set("Oops! You Lose. Computer selected Paper.")
    elif userSelection == 'rock' and compSelection == 'scissors':
        res.set("Congrats! You Win. Computer selected Scissors.")
    elif userSelection == 'paper' and compSelection == 'scissors':
        res.set("Oops! You Lose. Computer selected Scissors.")
    elif userSelection == 'paper' and compSelection == 'rock':
        res.set("Congrats! You Win. Computer selected Rock.")
    elif userSelection == 'scissors' and compSelection == 'rock':
        res.set("Oops! You Lose. Computer selected Rock.")
    elif userSelection == 'scissors' and compSelection == 'paper':
        res.set("Congrats! You Win. Computer selected Paper.")
    else:
        res.set("Looks like an invalid input! Consider selecting from - rock, paper & scissors")

解释:

在上面的代码段中,我们创建了一个 StringVar() 类的对象。然后我们定义了一个函数 letsPlay() . 在这个函数中,我们使用了 if-elif-else 条件语句来将用户输入的值与计算机选择的值进行比较,并使用 set() 函数根据比较结果存储相应的语句。在这个石头剪刀布游戏中,选择石头的玩家会赢得选择剪刀的玩家,但会输给选择纸的玩家;选择纸的玩家会输给选择剪刀的玩家。如果两个玩家选择相同的东西,游戏将打平。

定义重置游戏的函数

我们现在将创建一个函数来重置游戏。这个函数将把所有的变量设置为空字符串。

让我们考虑下面的代码段来演示同样的功能:

文件:rockPaperScissors.py

# defining a function to reset the game
def resetGame():
    res.set("")
    userInput.set("")

解释:

在上面的代码片段中,我们定义了一个名为 resetGame() 的函数。在这个函数中,我们将变量 resuserInput 的值设为空字符串。

定义一个退出游戏的函数

现在,我们将定义一个函数来退出剪刀石头布的程序,通过停止执行 mainloop() 方法来实现。

让我们考虑下面的代码片段来演示同样的功能:

文件:rockPaperScissors.py

# defining a function to exit the game
def exitGame():
    guiWindow.destroy()

解释:

在上面的代码片段中,我们使用了 destroy() 方法停止执行 mainloop() 方法并退出程序。

定义窗口的按钮

现在让我们定义一些按钮,以在窗口上执行处理。这些按钮将包括播放、重置和退出。

让我们考虑以下代码片段,说明这些按钮的定义。

文件:rockPaperScissors.py

displayResult = Label(
    guiWindow,
    textvariable = res,
    font = 'calibri 12 bold',
    bg = '#96CEB4'
    ).place(
        x = 20,
        y = 240
    )

playButton = Button(
    guiWindow,
    font = 'calibri 10 bold',
    text = 'PLAY',
    padx = 5,
    bg = 'white',
    command = letsPlay
    ).place(
        x = 100,
        y = 300
        )

resetButton = Button(
    guiWindow,
    font = 'calibri 10 bold',
    text = 'RESET',
    padx = 5,
    bg = 'white',
    command = resetGame
    ).place(
        x = 200,
        y = 300
        )

exitButton = Button(
    guiWindow,
    font = 'calibri 10 bold',
    text = 'EXIT',
    padx = 5,
    bg = 'white',
    command = exitGame
    ).place(
        x = 300,
        y = 300
        )

guiWindow.mainloop()

解释:

在上述代码片段中,我们创建了一个标签来显示结果。然后,我们多次使用 Button() 小部件来创建不同的按钮,以开始、重置和退出游戏。我们在这些小部件中使用 command 参数来在点击按钮时调用指定的函数。最后,我们调用 mainloop() 方法来执行程序。

因此,使用Python中的 Tkinter 库完成了石头剪刀布游戏。现在,我们可以保存文件并运行程序,看看它是否正常工作。

要运行该程序,可以在命令行或终端中输入以下命令:

命令:

$ python rockPaperScissors.py

但在我们看到输出之前,这是一个完整的项目代码。

完整项目代码

下面的程序文件是一个完整的“剪刀石头布”游戏项目的代码。

文件:rockPaperScissors.py

# importing the required libraries and modules
from tkinter import *
import random

# creating the GUI for the application
guiWindow = Tk()
guiWindow.title("The Rock Paper Scissors Game")
guiWindow.geometry("480x480")
guiWindow.config(bg = "#588C7E")
guiWindow.resizable(width = False, height = False)

# adding a label to the window using the Label() widget
heading = Label(
    guiWindow,
    text = 'Let\'s play Rock Paper Scissors',
    font = 'arial 18 bold',
    bg = '#588C7E',
    fg = 'white'
    ).pack()

# creating column for user selection
userInput = StringVar()

subHeading = Label(
    guiWindow,
    text = 'Select any ONE from rock, paper, scissors',
    font = 'calibri 14 bold',
    bg = '#96CEB4'
    ).place(
        x = 35,
        y = 110
        )

Entry(
    guiWindow,
    font = 'calibri 14',
    textvariable = userInput,
    bg = '#FBEFCC'
    ).place(
        x = 110,
        y = 160
        )

# code for computer selection
compSelection = random.randint(1, 3)

if compSelection == 1:
    compSelection = 'rock'
elif compSelection == 2:
    compSelection = 'paper'
else:
    compSelection = 'scissors'

# creating function to begin the game
res = StringVar()

def letsPlay():
    userSelection = userInput.get()
    if userSelection == compSelection:
        res.set("It's a Tie! You made a same choice as computer.")
    elif userSelection == 'rock' and compSelection == 'paper':
        res.set("Oops! You Lose. Computer selected Paper.")
    elif userSelection == 'rock' and compSelection == 'scissors':
        res.set("Congrats! You Win. Computer selected Scissors.")
    elif userSelection == 'paper' and compSelection == 'scissors':
        res.set("Oops! You Lose. Computer selected Scissors.")
    elif userSelection == 'paper' and compSelection == 'rock':
        res.set("Congrats! You Win. Computer selected Rock.")
    elif userSelection == 'scissors' and compSelection == 'rock':
        res.set("Oops! You Lose. Computer selected Rock.")
    elif userSelection == 'scissors' and compSelection == 'paper':
        res.set("Congrats! You Win. Computer selected Paper.")
    else:
        res.set("Looks like an invalid input! Consider selecting from - rock, paper & scissors")

# defining a function to reset the game
def resetGame():
    res.set("")
    userInput.set("")

# defining a function to exit the game
def exitGame():
    guiWindow.destroy()

displayResult = Label(
    guiWindow,
    textvariable = res,
    font = 'calibri 12 bold',
    bg = '#96CEB4'
    ).place(
        x = 20,
        y = 240
    )

playButton = Button(
    guiWindow,
    font = 'calibri 10 bold',
    text = 'PLAY',
    padx = 5,
    bg = 'white',
    command = letsPlay
    ).place(
        x = 100,
        y = 300
        )

resetButton = Button(
    guiWindow,
    font = 'calibri 10 bold',
    text = 'RESET',
    padx = 5,
    bg = 'white',
    command = resetGame
    ).place(
        x = 200,
        y = 300
        )

exitButton = Button(
    guiWindow,
    font = 'calibri 10 bold',
    text = 'EXIT',
    padx = 5,
    bg = 'white',
    command = exitGame
    ).place(
        x = 300,
        y = 300
        )

guiWindow.mainloop()

输出:

Python中的剪刀石头布游戏

结论

最终,我们可以得出结论,我们成功使用Python编程语言开发了剪刀石头布游戏。我们利用了 Tkinter 库来呈现图形。我们还利用了 random 模块来生成随机选择。通过这个项目,我们学会了如何创建不同的小部件,比如标签、文本字段和按钮。我们还学会了如何通过按钮调用函数。因此,通过以下方式,我们成功在Python中创建了剪刀石头布游戏。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程