通过构建一个简单的骰子游戏学习如何使用 Python 编程

Python 对于年轻人和老年人来说都是一门很好的语言,无论他们是否有任何编程经验。
539 位读者喜欢这篇文章。
Programming keyboard.

Opensource.com

Python 是一种通用编程语言,可用于创建桌面应用程序、3D 图形、视频游戏甚至网站。它是一门很棒的入门编程语言,因为它易于学习,并且比 C、C++ 或 Java 等复杂语言更简单。即便如此,Python 仍然足够强大和稳健,可以创建高级应用程序,并且几乎在所有使用计算机的行业中都有使用。这使得 Python 对于年轻人和老年人来说都是一门很好的语言,无论他们是否有任何编程经验。

安装 Python

在学习 Python 之前,您可能需要安装它。

Linux:如果您使用 Linux,则已包含 Python,但请确保您安装的是 Python 3。要检查安装的版本,请打开终端窗口并输入

python --version

如果显示您安装的是版本 2,或者根本没有安装任何版本,请尝试指定 Python 3

python3 --version

如果找不到该命令,则必须从您的软件包管理器或软件中心安装 Python 3。您的 Linux 发行版使用的软件包管理器取决于发行版。最常见的是 Fedora 上的 dnf 和 Ubuntu 上的 apt。例如,在 Fedora 上,您输入以下命令

sudo dnf install python3

MacOS:如果您使用的是 Mac,请按照 Linux 的说明查看是否已安装 Python 3。MacOS 没有内置的软件包管理器,因此如果找不到 Python 3,请从 python.org/downloads/mac-osx 安装。虽然您的 macOS 版本可能已经安装了 Python 2,但您应该学习 Python 3。

Windows:Microsoft Windows 当前未附带 Python。从 python.org/downloads/windows 安装。请务必在安装向导中选择Add Python to PATH。请阅读我的文章如何在 Windows 上安装 Python,以获取针对 Microsoft Windows 的具体说明。

运行 IDE

要用 Python 编写程序,您真正需要的只是一个文本编辑器,但拥有集成开发环境 (IDE) 会更方便。IDE 将文本编辑器与一些友好且有用的 Python 功能集成在一起。IDLE 3 和 PyCharm (社区版) 是众多可供考虑的选项中的两个

IDLE 3

Python 自带一个名为 IDLE 的基本 IDE。

IDLE

opensource.com

它具有关键字突出显示功能,可帮助检测输入错误,代码完成提示以及用于快速轻松地测试代码的“运行”按钮。要使用它

  • 在 Linux 或 macOS 上,启动终端窗口并键入 idle3
  • 在 Windows 上,从“开始”菜单启动 Python 3。
    • 如果您在“开始”菜单中看不到 Python,请在“开始”菜单中键入 cmd 以启动 Windows 命令提示符,然后键入 C:\Windows\py.exe
    • 如果这不起作用,请尝试重新安装 Python。请务必在安装向导中选择 Add Python to PATH。有关详细说明,请参阅 docs.python.org/3/using/windows.html
    • 如果仍然不起作用,那就使用 Linux 吧。它是免费的,只要将 Python 文件保存到 USB 拇指驱动器,您甚至不必安装它即可使用它。

PyCharm 社区版

PyCharm (社区版) IDE 是一款出色的开源 Python IDE。它具有关键字突出显示功能,可帮助检测错别字、引号和括号补全功能以避免语法错误、行号(在调试时很有用)、缩进标记以及用于快速轻松地测试代码的“运行”按钮。

 

要使用它

  1. 安装 PyCharm (社区版) IDE。在 Linux 上,最简单的方法是使用 Flatpak 安装。或者,从 PyCharm 网站下载正确的安装程序版本,并手动安装。在 MacOS 或 Windows 上,从 PyCharm 网站下载并运行安装程序。
  2. 启动 PyCharm。
  3. 创建一个新项目。

告诉 Python 做什么

关键字告诉 Python 您希望它做什么。在您的新项目文件中,在 IDE 中键入以下内容

print("Hello world.")
  • 如果您使用的是 IDLE,请转到“运行”菜单并选择“运行模块”选项。
  • 如果您使用的是 PyCharm,请单击左侧按钮栏中的“运行文件”按钮。

Run button

opensource.com

关键字 print 告诉 Python 打印出您在括号和引号中给出的任何文本。

但这不是很令人兴奋。在其核心,Python 只能访问基本关键字,例如 printhelp、基本数学函数等等。

您可以使用 import 关键字加载更多关键字。

在 Python 中使用 turtle 模块

Turtle 是一个有趣的模块。将以下代码键入您的文件(替换旧代码),然后运行它

import turtle

turtle.begin_fill()
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.end_fill()

看看您可以使用 turtle 模块绘制哪些形状。

要清除您的 turtle 绘图区域,请使用 turtle.clear() 关键字。您认为关键字 turtle.color("blue") 有什么作用?

高级 turtle

您可以尝试一些更复杂的代码来获得类似的结果。您可以不手动编码每一行和每一个转弯,而是可以使用 while 循环,告诉 Python 执行四次:画一条线,然后转弯。Python 能够使用名为 counter变量来跟踪它执行这些操作的次数。您很快将了解有关变量的更多信息,但现在看看您是否可以分辨出 counterwhile 循环 如何交互。

import turtle as t
import time

t.color("blue")
t.begin_fill()

counter=0

while counter < 4:
    t.forward(100)
    t.left(90)
    counter = counter+1

t.end_fill()
time.sleep(2)

运行脚本后,就可以探索一个更好的模块了。

通过制作游戏学习 Python

要了解有关 Python 工作原理的更多信息,并为更高级的图形编程做好准备,让我们专注于游戏逻辑。在本教程中,我们还将学习计算机程序的结构,方法是制作一个基于文本的游戏,其中计算机和玩家掷虚拟骰子,掷出点数最高者获胜。

规划您的游戏

在编写代码之前,重要的是要考虑您打算编写什么。许多程序员在开始编写代码之前编写简单的文档,以便他们有一个要编程的目标。以下是骰子程序可能的样子,如果您将文档与游戏一起发布

  1. 启动骰子游戏,然后按 Return 或 Enter 键掷骰子。
  2. 结果会打印到您的屏幕上。
  3. 系统会提示您再次掷骰子或退出。

这是一个简单的游戏,但文档告诉您很多关于您需要做什么的信息。例如,它告诉您,您需要以下组件来编写此游戏

  • 玩家:您需要一个人类来玩游戏。
  • AI:计算机也必须掷骰子,否则玩家就没有输赢的对象。
  • 随机数:一个常见的六面骰子会产生一个介于 1 到 6 之间的随机数。
  • 运算符:简单的数学运算可以将一个数字与另一个数字进行比较,以查看哪个更高。
  • 获胜或失败消息。
  • 再次玩或退出的提示。

制作骰子游戏 alpha 版

很少有程序一开始就具有所有功能,因此第一个版本将仅实现基本功能。首先是一些定义

变量是一个可能会发生变化的值,它们在 Python 中被大量使用。每当您需要程序“记住”某些内容时,您都会使用变量。事实上,代码处理的几乎所有信息都存储在变量中。例如,在数学方程式 x + 5 = 20 中,变量是 x,因为字母 x 是值的占位符。

整数是一个数字;它可以是正数或负数。例如,1 和 -1 都是整数。14、21 甚至 10,947 也是如此。

Python 中的变量易于创建且易于使用。骰子游戏的初始版本使用两个变量:playerai

将以下代码键入名为 dice_alpha 的新项目

import random

player = random.randint(1,6)
ai = random.randint(1,6)

if player > ai :
    print("You win")  # notice indentation
else:
    print("You lose")

启动您的游戏以确保它正常工作。

这个基本版本的骰子游戏运行良好。它实现了游戏的基本目标,但感觉不太像游戏。玩家永远不知道他们掷出了什么或计算机掷出了什么,并且即使玩家想再次玩游戏也会结束。

这在软件的第一个版本(称为 alpha 版本)中很常见。既然您确信可以完成主要部分(掷骰子),那么就可以添加到程序中了。

改进游戏

在游戏的第二个版本(称为 beta 版)中,一些改进将使其感觉更像游戏。

1. 描述结果

与其只是告诉玩家他们是否获胜,不如让他们知道他们掷出了什么更有趣。尝试对您的代码进行以下更改

player = random.randint(1,6)
print("You rolled " + player)

ai = random.randint(1,6)
print("The computer rolled " + ai)

如果您现在运行游戏,它会崩溃,因为 Python 认为您正在尝试进行数学运算。它认为您正在尝试将字母“You rolled”和当前存储在 player 变量中的任何数字相加。

您必须告诉 Python 将 player 和 ai 变量中的数字视为句子中的单词(字符串),而不是数学方程式中的数字(整数)。

对您的代码进行以下更改

player = random.randint(1,6)
print("You rolled " + str(player) )

ai = random.randint(1,6)
print("The computer rolled " + str(ai) )

现在运行您的游戏以查看结果。

2. 减慢速度

计算机速度很快。人类有时也可能很快,但在游戏中,最好营造悬念。您可以使用 Python 的 time 函数在悬念部分减慢游戏速度。

import random
import time

player = random.randint(1,6)
print("You rolled " + str(player) )

ai = random.randint(1,6)
print("The computer rolls...." )
time.sleep(2)
print("The computer has rolled a " + str(player) )

if player > ai :
    print("You win")  # notice indentation
else:
    print("You lose")

启动您的游戏以测试您的更改。

3. 检测平局

如果您玩足够多的游戏,您会发现即使您的游戏看起来运行正常,但实际上它有一个错误:当玩家和计算机掷出相同的数字时,它不知道该怎么做。

要检查一个值是否等于另一个值,Python 使用 ==。那是两个等号,而不仅仅是一个。如果您只使用一个,Python 会认为您正在尝试创建一个新变量,但您实际上是在尝试进行数学运算。

当您想要拥有两个以上的选项(即,赢或输)时,您可以使用 Python 的关键字 elif,这意味着否则如果。这允许您的代码检查某些结果中的任何一个是否为真,而不仅仅是检查一个事物是否为真。

像这样修改您的代码

if player > ai :
    print("You win")  # notice indentation
elif player == ai:
    print("Tie game.")
else:
    print("You lose")

启动您的游戏几次,尝试与计算机的掷骰结果打成平局。

编程最终版本

骰子游戏的 beta 版本功能齐全,并且比 alpha 版本更像游戏。对于最终版本,创建您的第一个 Python 函数

函数是可以作为不同单元调用的代码集合。函数很重要,因为大多数应用程序中都有大量代码,但并非所有代码都必须一次运行。函数使启动应用程序并控制发生什么以及何时发生成为可能。

将您的代码更改为此

import random
import time

def dice():
    player = random.randint(1,6)
    print("You rolled " + str(player) )

    ai = random.randint(1,6)
    print("The computer rolls...." )
    time.sleep(2)
    print("The computer has rolled a " + str(ai) )

    if player > ai :
        print("You win")  # notice indentation
    else:
        print("You lose")

    print("Quit? Y/N")
    continue = input()

    if continue == "Y" or continue == "y":
        exit()
    elif continue == "N" or continue == "n":
        pass
    else:
        print("I did not understand that. Playing again.")

此版本的游戏会在玩家玩完游戏后询问他们是否要退出游戏。如果他们回复 Yy,则会调用 Python 的 exit 函数,游戏退出。

更重要的是,您已经创建了自己的函数,名为 dice。dice 函数不会立即运行。事实上,如果您在此阶段尝试您的游戏,它不会崩溃,但它也没有真正运行。要使 dice 函数实际执行某些操作,您必须在代码中调用它

将此循环添加到现有代码的底部。前两行仅用于上下文,并强调哪些内容被缩进,哪些内容未被缩进。请密切注意缩进。

    else:
        print("I did not understand that. Playing again.")

# main loop
while True:
    print("Press return to roll your die.")
    roll = input()
    dice()

while True 代码块首先运行。因为根据定义 True 始终为真,所以此代码块始终运行,直到 Python 告诉它退出。

while True 代码块是一个循环。它首先提示用户开始游戏,然后调用您的 dice 函数。这就是游戏的开始方式。当 dice 函数结束后,您的循环将再次运行或退出,具体取决于玩家如何回答提示。

使用循环来运行程序是编写应用程序的最常见方式。循环确保应用程序保持打开状态足够长的时间,以便计算机用户可以使用应用程序中的功能。

下一步

现在您已经了解了 Python 编程的基础知识。本系列中的下一篇文章介绍了如何使用 PyGame 编写视频游戏,PyGame 是一个比 turtle 具有更多功能的模块,但也复杂得多。


本文最初于 2017 年 10 月发布,并已由作者更新。

Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,通常是同时工作。
User profile image.
Jess Weichler 是一位数字艺术家,使用开源软件和硬件在 CyanideCupcake.com 以数字方式和物理世界中创作作品。

18 条评论

期待阅读整个系列。

感谢阅读!Python 是一门非常简洁的语言,我喜欢教它(尽管有强制空格)。

回复 作者 Creep

谢谢你 Seth。
我正在阅读“Think Python”这本书,现在一切都开始变得有意义了。
迫不及待地想看下一篇文章

沉浸式学习很有帮助。另一个有帮助的事情是有一个项目。即使它是一些简单的或像游戏一样的傻事,您也可以通过尝试让它做一些特定的事情来真正了解一门语言。感谢您阅读我的文章!

回复 作者 GaelleTjat

Seth,这是一个非常重要的观点,如果一个人有一个他们想做的项目,他们确实会学得更快。我学习 Java 是为了制作屏幕共享器、桌面环境和密码管理器。我本身并不是很擅长编程,但由于我想做的特定项目以及这些概念的实用性,我已经学到了继承、线程和服务器/客户端套接字等高级概念。

回复 作者 sethkenlon

Seth,这是一篇很棒的文章!我今天将与我的 Python 编码班分享它。感谢您分享您的专业知识。

对我来说,我发现处理语法的非常有效的方法是在命令行上使用 python。只需键入“python”,您就进入了正在运行的 python 控制台,它可以保存值,以便您可以输入顺序命令。键入“Ctrl-D”退出。

这对于测试代码很有用,但对于迭代,我发现它不太有用。学生通常需要修改和构建他们的代码,当您在终端版本的 IDLE 中工作时,这有点困难。

回复 作者 Greg P

我期待 PyGame!我玩过它,发现它的许多功能有点令人眼花缭乱。

我计划在接下来的大约 10 篇文章中介绍它,所以这将是一段旅程 - 但这是值得的,我保证!

回复 作者 schollz

我还在考虑的另一件事是,尽早考虑文档永远不会太早,在这种情况下,代码中的注释,当您 6 个月到一年没有查看程序时,您主要需要这些注释。

确实如此。有人最近对我说“代码被阅读的次数比编写的次数更多”。因此,代码的可读性(注释是其中的散文方面)真的非常重要!

回复 作者 Greg P

很棒的文章。骰子实际上是熟悉 python 中简单事物的绝佳起点。我在 python 中的第一个个人项目是 mastodon 的 dicewarebot (https://botsin.space/@dicewarebot)。相同的想法,但稍微复杂一些,但基本上只是掷骰子。

听起来很棒!我在 mastodon 上,所以我去看看!我认为对于用随机性挑战来挑战新的程序员(或我们自己)有很多话要说。依赖 /dev/random 或 rand.range() 是一回事,但尝试发明其他随机数据源来从中生成我们的掷骰结果完全是另一回事。当我教人们骰子应用程序时,我有时不会告诉他们关于 /dev/random 的事。我给他们其他工具,例如数学运算符、时间戳和其他类似的东西,以便他们可以尝试发明随机性。这是一个很棒的心理和编程练习。

回复 作者 K_REY_C

简单而甜蜜,期待使用 python 的更高级游戏

" " print("The computer has rolled a " + str(player) ) " "
此行应更正为
print("The computer has rolled a " + str(ai) )

print("The computer has rolled a " + str(player) ) 应该改为 str(ai)

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.