Skip to main content

一组游戏(带有源代码),用于例如编程课程。

项目描述

PythonStdioGames

用于简单、基于文本的游戏和模拟的 Python 3 源代码集合,可用作示例程序。

安装:pip install --user gamesbyexample

pip3在 macOS 和 Linux 上使用。)

运行启动器:python -m gamesbyexample

我目前不接受拉取请求,但请随时发表评论或将建议发送至al@inventwithpython.com

如果您在安装 Python 时需要帮助,请访问https://installpython3.com/

我刚找到这个网页,我该如何玩这些游戏?

首先,安装Python 解释器。这带有准系统 IDLE 编辑器。您可以使用其他编辑器。在 Windows 上,您还可以使用Visual Studio Code编辑器。PyCharm Community Edition是适用于 Windows、Linux 和 macOS 的编辑器。您还可以使用基于浏览器的编辑器,例如REPL.it。这些都是免费的。

然后,点击这个repo中的srcgamesbyexample文件夹,找到.py各种Python游戏的文件。例如,这是snailrace.py的代码。每个游戏的代码都在一个.py文件中,因此您可以将代码直接复制到您的编辑器中。我建议手动输入,而不是使用复制粘贴。这将为您提供代码每个部分的“肌肉记忆”。(虽然其中一些游戏要求您将数据文件下载到与文件相同的文件夹中.py。)然后您可以运行该程序。如果您收到错误消息,请记下错误消息中的行号并检查您是否输入了拼写错误。

在学习了基本语法之后,许多程序员希望继续下一步,看看这些编程概念是如何在“真实”程序中使用的。大多数开源项目都过于庞大和复杂。这些游戏被设计为简短、简单和有趣。您可以将它们用作学习示例,以了解如何制作自己的程序。

请注意,某些程序要求您从此 repo 下载额外的文件。例如,[sudoku.py](https://github.com/asweigart/PythonStdioGames/blob/master/src/gamesbyexample/sudoku.py)游戏从[sudokupuzzles.txt](https://github.com/asweigart/PythonStdioGames/blob/master/src/gamesbyexample/sudokupuzzles.txt)文件中加载它的谜题。

关于这个集合

在初学者学习了 Python 的语法和基本的编程概念(循环、分支、函数等)之后,他们经常会遇到死胡同:“我如何才能变得更好?” 在这一点上,人们会告诉他们从事自己的实践项目(这让他们没有关于制作什么以及如何制作的指导)或为开源项目做出贡献(这可能很难找到,了解它的代码库,并获得有关如何贡献的指导)。

帮助我学习编码的是找到我复制其源代码的小项目,然后对其进行小幅调整。这让我了解了循环、分支和函数如何结合到实际程序中。

为了帮助其他人走上同样的道路,我正在创建一系列示例程序,旨在让初学者易于复制和理解。这些程序(主要是游戏)有以下限制:

  • 它们很短,限制为 256 行代码。这使它们易于阅读和理解。越短越好。“256”数字是任意选择的,但这也意味着程序将适合 4 或 5 个打印页。
  • 它们适合单个源代码文件并且没有安装程序。这使得通过将代码复制/粘贴到 pastebin 站点来共享这些游戏变得很简单。可以使用数据/图像/保存文件,但来源应在其评论中链接到一些示例。
  • 他们只使用 Python 标准库。安装更少的东西意味着更广泛的兼容性和在环境设置过程中失败的可能性更小。
  • 他们只使用标准输入法文本;在 Python 中print()输出与文本源代码位于相同的文本介质中,使其不那么抽象,并且更容易看到代码和输出之间的因果关系。这意味着没有图形或鼠标输入,但由于它们都支持标准输入法文本,因此将这些程序移植到其他语言变得很简单。input()
  • 他们必须是回合制的。依赖input()意味着程序必须等待用户输入文本,但这意味着我们不能拥有响应单个按键的实时程序。
  • 他们的评论很好。评论应该针对初学者,并且会更加冗长。256 行限制包括注释和空格。如果程序太长而无法包含丰富的注释和合理的空白,则应简化程序,而不是注释。
  • 他们使用尽可能少的编程概念。如果程序不需要类、列表推导、递归,则不使用它们。
  • 易于理解可读的代码相比,优雅高效的代码一文不值。这些程序用于教育,而不是生产。可以忽略标准的最佳实践,例如不使用全局变量,以使其更易于理解。
  • 他们进行输入验证并且没有错误。输入错误或边缘情况应该不可能使程序崩溃。
  • 所有函数都有文档字符串。这是一个很好的文档实践,但也使help()函数能够在交互式 shell 中工作。

附加指南

其他指南包括:

  • 不要使用 f 字符串。截至 2019 年,Raspberry Pi 已安装 Python 3.5,而 f-strings 仅在 3.6 中出现。这些程序的一个指导方针是尽可能广泛地兼容。
  • 其中一些程序使用该bext模块,该模块添加了类似诅咒的功能,如颜色、清除屏幕和移动光标
  • 在https://pythontutor.com上包含指向程序运行的链接,以便学生可以看到程序是如何运行的。
  • 更长、更具描述性的变量名比更短的更好。i避免使用除and j, or xand之外的单字母变量名y
  • 将评论标记为# (!)描述他们可以做出的微小改变(增加健康,改变难度等)
  • 使用 jsdifflib 创建在线差异。这是学生在复制代码时查找自己的拼写错误的简便方法。一个例子在这里:https ://inventwithpython.com/invent4thed/diff/
  • 使用assert语句来捕捉学生在输入代码时的常见拼写错误,尤其是对于他们可能修改的常量。
  • 使用 Python 3。Python 2 适合使用的唯一时间是存在大量现有代码库时。但这适用于从事新建项目的新程序员。
  • 坚持使用 WGL4 字符库中的字符,基本上是 CP 1252、西里尔文/希腊文/土耳其文/波罗的海字符的代码页,以及 MS-DOS 时代的 CP437“扩展 ASCII”编码。Windows 的命令行是这里的限制因素;它不能显示所有 UTF-8 字符。
  • 源代码必须是可键入的。不要将画框或扩展 ascii 字符直接放入源代码中,而是进行 chr() 调用来获取这些字符。
  • 即使程序不是实时的,时间也可能是一个因素。您可以检查时间或在调用 之间添加暂停input(),但请注意,当用户键入时您将永远无法打断。
  • pyperclip模块可用于与剪贴板交互。可以使用剪贴板将大量文本输入到程序中或从程序中输出。
  • 我使用 %s 字符串插值而不是 f 字符串。我喜欢 f-strings,但它们只在 Python 3.6 中引入,我不想限制这些程序兼容的版本。
  • 对于所有字典,我都有一个简短的注释来解释键和值的类型。例如,# Keys=places, values=嫌疑犯的字符串和那里的项目。
  • 使用“DOS box-drawing”字符绘制复杂的棋盘游戏。虽然坚持 +、- 和 | for lines 也很好,因为它更简单。
  • 玩家对玩家游戏通常比玩家对电脑游戏更简单、更短。这必然意味着多人游戏必须是“完美信息”游戏,因为两个玩家都可以查看屏幕。
  • 不要修改函数中的可变对象(例如列表)来将信息传入/传出函数;只使用参数和返回值。这会让不熟悉 Python 数据模型的人觉得你的程序很神奇。
  • 避免在玩家输球时侮辱他们。这是我从为孩子们教授编程课程中学到的东西。他们对诸如“游戏结束,傻瓜!”之类的消息反应不佳。即使它们对成年人来说似乎无害。

在制作了几个这样的程序之后,我注意到程序复杂性的各种“类别”。程序可以是以下类别中的零个或多个:

  • 绝对初学者水平。没有函数,没有嵌套数据结构,避免嵌套循环。只需使用简单的分支和循环。
  • 选择你自己的冒险级别。程序不使用数据结构对事物进行建模,而是主要使用流控制。
  • 仅限 STDIO。您无法撤消先前打印的内容(除了“打印”退格字符以擦除当前行上的字符)。输出就像一个仅附加的日志文件。
  • 诅咒般的。需要该bext模块,但可以清除/刷新屏幕,在屏幕上的任意位置绘制颜色等。
  • 修改源代码运行。用户不是从 获取输入input(),而是编辑文件顶部的变量以更改程序中的设置。

我推荐使用的其他模块:

  • bext用于彩色文本并控制文本光标的位置。
  • blessings以获得更好的诅咒版本。
  • pyperclip用于使用剪贴板复制/粘贴文本。
  • playsound用于播放音频文件。
  • pyttsx3用于文本到语音。
  • pytextcavas对于您可以绘制的二维字符串
  • pyrect对于矩形数据结构
  • pybresenham用于各种画线功能

此集合中已完成的程序

Alphabetize Quiz - 一个基于时间的测验游戏,看看你可以多快按字母顺序排列字母。

Alphabetize Word Quiz - 一个基于时间的测验游戏,看看你能多快按字母顺序排列单词。

模拟时钟- 模拟时钟动画。按 Ctrl-C 停止。

Bagels - 一个演绎逻辑游戏,您必须根据线索猜测一个数字。

生日悖论模拟- 探索“生日悖论”的数学。更多信息请访问https://en.wikipedia.org/wiki/Birthday_problem

Blackjack - 一种纸牌游戏,也称为 21。更多信息请访问:https ://en.wikipedia.org/wiki/Blackjack

弹跳球- 弹跳球动画。按 Ctrl-C 停止。

弹跳线- 弹跳线动画。按 Ctrl-C 停止。

Calendar Maker - 创建月历,保存到文本文件并适合打印。

Chance Checkers - 跳棋,但您每回合可以移动 3 个随机跳棋。这些棋子是随机决定的,可以是玩家自己的棋子,也可以是对手的棋子,但不能移动对手的升级棋子。在此版本中,捕获不是强制性的。

Daleks - 尝试让机器人相互碰撞。

跳棋- 经典的跳棋棋盘游戏。在此版本中,捕获不是强制性的。

Chomp - 一个危险的美味逻辑游戏。受 Frederik Schuh 和 David Gale 谜题的启发,Martin Gardner 在《科学美国人》(1973 年 1 月)上发表了更多信息:https ://en.wikipedia.org/wiki/Chomp

Clickbait 标题生成器- 为您的无灵魂内容农场提供的 clickbait 标题生成器。

硬币翻转模拟器- 模拟大量硬币翻转。

Collat​​z Sequence - 在给定起始编号的情况下,为 Collat​​z 序列生成编号。

Collat​​z Sequence Stats - 找出各种 Collat​​z 序列的长度。

连接四- 一种棋盘游戏,可以连续获得四个瓷砖。

Conway's Game of Life - 经典的元胞自动机模拟。按 Ctrl-C 停止。更多信息请访问:https ://en.wikipedia.org/wiki/Conway%27s_Game_of_Life

Conway's Game of Life (Terminal) - 经典的元胞自动机模拟。按 Ctrl-C 停止。更多信息请访问:https ://en.wikipedia.org/wiki/Conway%27s_Game_of_Life

倒计时- 使用七段显示器显示倒计时动画。按 Ctrl-C 停止。更多信息请访问https://en.wikipedia.org/wiki/Seven-segment_display需要我们的 sevseg.py 程序。

Diagonal Maze - 打印出一个随机的对角线迷宫。灵感来自 10 PRINT CHR$(205.5+RND(1));: GOTO 10 程序。

Dice Roller - 使用龙与地下城符号模拟掷骰子。

数字时钟- 以七段显示显示当前时间的数字时钟。按 Ctrl-C 停止。更多信息请访问https://en.wikipedia.org/wiki/Seven-segment_display需要我们的 sevseg.py 程序。

DNA - DNA 双螺旋的简单动画。按 Ctrl-C 停止。感谢matoken的启发:https ://asciinema.org/a/155441

Eeny-Meeny-Miny-Moe - 多人消除游戏。按 Ctrl-C 停止。更多信息在https://en.wikipedia.org/wiki/Eeny,_meeny,_miny,_moe更多信息在https://en.wikipedia.org/wiki/Josephus_problem

蚀刻草图- 在屏幕上画一条尾线。

因式分解- 找出一个数的所有因式。

萤火虫- 萤火虫的美丽动画。按 Ctrl-C 停止。

Fish Tank - 鱼缸的和平动画。按 Ctrl-C 停止。

FizzBu​​zz Calculation - 计算 Fizz Buzz 编程问题的答案。

FizzBu​​zz Game - 一款数字游戏,您还可以在其中与时间赛跑。

Flippy(黑白棋克隆) -(需要 Pygame)与计算机对战并尝试翻转他们的瓷砖。

洪水填充- “洪水填充”算法的一个示例。这是递归和迭代填充算法的基本演示。此算法通常用于 MS Paint 或 Photoshop 等图形程序中的“填充工具”。该算法也用于floodit.py 游戏。

淹没它!- 一个色彩缤纷的游戏,您尝试用单一颜色填充棋盘。

Forest Fire Sim - 模拟火灾在不断生长的森林中蔓延。按 Ctrl-C 停止。灵感来自 Nicky Case 的 Emoji Sim http://ncase.me/simulating/model/

Four-In-A-Row - (需要 Pygame)与电脑对战,丢下瓷砖以连接四个。

Nonuniform Fractal Tree Drawer - 用海龟图形绘制非均匀分形树。

Fractal Tree Drawer - 用海龟图形绘制分形树。

2048 Game - 一种结合指数增长数字的滑动瓷砖游戏。灵感来自 Gabriele Cirulli 的 2048,它是 Veewo Studios 的 1024 的克隆,而后者又是 Threes 的克隆!游戏。更多信息请访问https://en.wikipedia.org/wiki/2048_(video_game)

Gemgem(一个 Bejeweled 克隆) -(需要 Pygame)一个令人上瘾的宝石配对游戏。

Ghost Leg Lottery - 沿着小路走,看看谁赢了!更多信息请访问:https ://en.wikipedia.org/wiki/Ghost_Leg

猜数字- 在给出提示的同时,尝试猜出秘密数字。

Guillotine - Hangman 的法语变体,具有不同的图形。哦啦啦!

黑客- “辐射 3”中的黑客迷你游戏。

Hammurabi - Doug Dyment 的经典游戏 Hamurabi.bas,由 David Ahl 推广。

Hamsburger - 一个制作愚蠢多元化的程序。按 Ctrl-C 停止。

Hangman - 猜字游戏。

Hangman with Random Letters - 一个完全不公平的猜词游戏。(这是一个笑话程序。)

硬编码井字游戏- 对着电脑玩井字游戏。每一个可能的动作都被硬编码到这个程序中。该程序有 5700 行长。这是一个笑话程序,不要真的写这样的代码。

希尔伯特曲线- 用海龟图形绘制希尔伯特曲线分形。更多信息请访问:https : //en.wikipedia.org/wiki/hilbertCurve 关于空间填充曲线的精彩视频:https ://youtu.be/RU0wScIj36o和https://youtu.be/3s7h2MHQtxc

Hour Glass Animation - 一个充满落沙的沙漏动画。按 Ctrl-C 停止。

白痴- 如何让白痴忙上几个小时。(这是一个笑话程序。)

Ink Spill (a Flood It 克隆) - (需要 Pygame) 尝试使整个字段成为单一颜色。

指责!- 一个神秘的阴谋游戏和一只失踪的猫。灵感来自 Homestar Runner 的“鸡蛋在哪里?” 游戏

Koch Snowflake - 使用海龟图形绘制 Koch 雪花分形。

Langton's Ant - 细胞自动机动画。按 Ctrl-C 停止。更多信息:https ://en.wikipedia.org/wiki/Langton%27s_ant

割草机- 看着草被割断并再次生长。按 Ctrl-C 停止。灵感来自 Jules Villard 的 Tondeuse,https ://asciinema.org/a/21743 https://bitbucket.org/jvillard/tondeuse/src/default/

Leespeak - 将英文信息翻译成 l33t5p34]<.

Luhn Checksum Algorithm - 信用卡号码背后的数学。更多信息请访问:https ://en.wikipedia.org/wiki/Luhn_algorithm更多信息请访问:https ://youtu.be/Erp8IAUouus

魔术八球- 问一个关于你未来的问题。

Magic Hexagon - 将数字放在六边形中,因此每行加起来为 38。更多信息请访问https://en.wikipedia.org/wiki/Magic_hexagon更多信息请访问https://www.youtube.com/watch?v=ZkVSRwFWjy0

Mancala - 古老的播种棋盘游戏。http://www.mancalarules.com/上的规则/ https://en.wikipedia.org/wiki/Mancala上的更多信息

匹配括号- 括号/括号/大括号匹配算法。

Maze Maker - 使用递归回溯算法制作迷宫。更多信息:https ://en.wikipedia.org/wiki/Maze_generation_algorithm#Recursive_backtracker动画演示:https ://scratch.mit.edu/projects/17358777/

Maze Runner - 在迷宫中移动并尝试逃跑。

Maze 3D - 在迷宫中移动并尝试逃脱......在 3D 中!

Maze Runner HTML - 在迷宫中移动并尝试逃脱......在 3D 和您的网络浏览器中!

记忆拼图- (需要 Pygame)一个简单的记忆匹配游戏。

中间字母扰频器- 扰乱单词的中间字母,但不扰乱第一个和最后一个字母。

Million Dice Roll Stats - 一百万个骰子的模拟。

蒙娜丽莎- 使用乌龟图形绘制类似于安迪沃霍尔的蒙娜丽莎图画。

Mondrian Art Generator - 随机生成蒙德里安风格的艺术。

Monty Hall Problem - 模拟 Monty Hall 游戏节目问题。更多信息请访问https://en.wikipedia.org/wiki/Monty_Hall_problem

莫尔斯电码- 在英语和莫尔斯电码之间进行翻译。更多信息请访问:https ://en.wikipedia.org/wiki/Morse_code

乘法表- 打印乘法表。

乘法持久性- 一个有趣的数学挑战。有关此主题的更多信息,请参阅https://youtu.be/Wim9WJeDTHQ

墙上的 99 瓶啤酒- 打印有史以来最长的歌曲之一的完整歌词!按 Ctrl-C 停止。

Peg Solitaire - 一款单人跳桩游戏,可消除所有的钉子。更多信息请访问https://en.wikipedia.org/wiki/Peg_solitaire

Pentomino -(需要 Pygame)与 Pygame 类似,除了 5 盒积木。

元素周期表- 显示所有元素的原子信息。

Pig Latin - 将英语信息翻译成 Igpay Atinlay.

Polygons - 绘制多边形的海龟程序。每条线的长度相同。

进度条- 可以在其他程序中使用的示例进度条动画。

Pythons - 用海龟图形绘制蟒蛇。

Rail Fence Cipher - 用于加密文本的“rail fence”密码。更多信息请访问:https ://en.wikipedia.org/wiki/Rail_fence_cipher

Rainbow - 显示一个简单的彩虹动画。按 Ctrl-C 停止。

Rainbow 2 - 显示一个简单的曲线彩虹动画。按 Ctrl-C 停止。

Random Walk - 使用“随机游走”算法生成飞溅艺术。按 Ctrl-C 停止。更多信息请访问:https ://en.wikipedia.org/wiki/Random_walk

Reversi - 一种翻棋游戏,也称为黑白棋。更多信息https://en.wikipedia.org/wiki/Reversi

Rock-Paper-Scissors - 手牌运气游戏。

Rock-Paper-Scissors (Always Win) - 一场运气的手牌游戏,除非你不会输。

ROT13 Cipher - 用于加密和解密文本的最简单的密码。更多信息请访问https://en.wikipedia.org/wiki/ROT13

Rotating Cube - 旋转立方体动画。按 Ctrl-C 停止。

Rotating Cube (Bext Version) - 一个旋转的立方体动画。按 Ctrl-C 停止。

Rotating Sphere - 旋转球体动画。按 Ctrl-C 停止。

Rush Hour - 一款滑动拼图游戏,可将汽车移开。Nob Yoshihagara 的原创游戏更多信息请访问https://www.michaelfogleman.com/rush/

Sand Fall - 落下的沙子动画。灵感来自https://asciinema.org/a/6515

Sand Fall (Bext Version) - 落下的沙子动画。灵感来自https://asciinema.org/a/6515

Sevseg - 一个七段显示模块。更多信息请访问https://en.wikipedia.org/wiki/Seven-segment_display

Shell Game - 一种随机赌博游戏。

Sierpinkski's Game - Sierpinkski 的“游戏”是一种算法,它使用海龟图形绘制 Sierpinski 三角形。更多信息请访问https://en.wikipedia.org/wiki/Chaos_game

Sierpinski Square - 使用海龟图形绘制 Sierpinski Square(也称为 Carpet)。更多信息请访问:https ://en.wikipedia.org/wiki/Sierpinski_carpet

Sierpinski Triangle - 使用海龟图形绘制 Sierpinski 三角形分形。

模拟(Simon 克隆) -(需要 Pygame)尽可能长时间地复制闪烁的灯光模式。

幻灯片拼图- (需要 Pygame)经典的 15 块幻灯片拼图。

15-Sliding Puzzle - 将编号的瓷砖滑入正确的顺序。

Snail Race - 快节奏的蜗牛赛车动作!

Sokoban clone - 经典的推箱子游戏。

声纳寻宝- 尝试找到隐藏在海浪下的宝箱。

Soroban - 日本算盘计算器工具的模拟。更多信息请访问:https ://en.wikipedia.org/wiki/Soroban

Spiral - 绘制一个简单的方形螺旋。

sPoNgEtExT - 将英文信息翻译成 sPONGEtExT。

Squirrel Eat Squirrel -(需要 Pygame)松鼠互相吃掉并长得大得惊人的游戏。

Star Pusher(推箱子克隆) -(需要 Pygame)一个益智游戏,您可以在其中将星星推过他们的目标。

Sticky Hands - 一款偷宝石的运动益智游戏。

数独- 经典的 9x9 数字放置难题。更多信息请访问https://en.wikipedia.org/wiki/Sudoku

Tetromino(俄罗斯方块克隆) -(需要 Pygame)来自苏联的经典方块坠落谜题。

Tetromino for Idiots -(需要 Pygame)俄罗斯方块,但...更简单。

三卡蒙特- 交换卡牌后找到红桃皇后。(在现实版本中,骗子会握住红桃皇后,所以你总是会输。)更多信息请访问https://en.wikipedia.org/wiki/Three-card_Monte

Tic Tac Toe - 经典的棋盘游戏。

Tic Tac Toe (OOP) - 经典的棋盘游戏。(面向对象的编程版本。)

河内之塔拼图- 您必须将一个塔的圆盘移动到另一个塔的拼图。更多信息请访问https://en.wikipedia.org/wiki/Tower_of_Hanoi

Ulam Spiral - Ulam 螺旋是一种神秘的数学模式,用于带有乌龟图形的素数。更多信息请访问https://en.wikipedia.org/wiki/Ulam_spiral

水桶拼图- 倒水拼图。更多信息:https ://en.wikipedia.org/wiki/Water_pouring_puzzle

Wormy - (需要 Pygame)带领绿蛇绕着屏幕吃红苹果。

Zigzag - 一个简单的 zig zag 动画。按 Ctrl-C 停止。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

gamesbyexample-2020.12.30.tar.gz (3.0 MB 查看哈希

已上传 source