通过构建简单的骰子游戏学习如何使用 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,它的意思是else if。 这允许您的代码检查某些结果中的任何一个是否为真,而不仅仅是检查一个事物是否为真。

像这样修改您的代码

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 个月到 1 年没有查看程序时需要的。

非常正确。 最近有人对我说“代码的阅读频率高于编写频率”。 因此,代码的可读性,注释是其中的散文方面,真的非常非常重要!

回复 作者 Greg P

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

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

回复 作者 K_REY_C

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

" " print("计算机掷出了 " + str(player) ) " "
这一行应该更正为
print("计算机掷出了 " + str(ai) )

print("计算机掷出了 " + str(player) ) 应该为 str(ai)

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.