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() 方法将窗口的大小固定,通过将 width 和 height 参数设置为 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() 的函数。在这个函数中,我们将变量 res 和 userInput 的值设为空字符串。
定义一个退出游戏的函数
现在,我们将定义一个函数来退出剪刀石头布的程序,通过停止执行 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编程语言开发了剪刀石头布游戏。我们利用了 Tkinter 库来呈现图形。我们还利用了 random 模块来生成随机选择。通过这个项目,我们学会了如何创建不同的小部件,比如标签、文本字段和按钮。我们还学会了如何通过按钮调用函数。因此,通过以下方式,我们成功在Python中创建了剪刀石头布游戏。