教你的孩子用 Python 构建自己的游戏 - 1

2025-06-10

教你的孩子用 Python 构建自己的游戏 - 1

几个月前,我曾经做过编程培训师。我们的学生以前都是来自贫困社会的流浪儿童。你可以想象他们当时受教育的匮乏。作为老师,我必须让课程变得轻松有趣,让他们容易掌握,所以我经常用游戏来达到这个目的。我翻看以前的文件,找到了我写的这个教案,教孩子们如何开发这个著名的游戏Space Invaders。一开始,这看起来像是一个不可能完成的任务,但他们真的爱上了它,并因此爱上了编程!
好了,就不多说了,我将在这里分享这节课的三篇文章。今天是第一篇,希望对初学者或家长有所帮助。

要继续本教程,您需要安装 Python 和一个文本编辑器。或者,您可以使用这个在线文本编辑器并创建一个也使用 turtle 的项目(我们稍后会详细讨论这一点)。

使用 Turtle 进行图形处理

Python 本身只是一门编程语言。它可以深入地指挥计算机执行操作,但它本身并不具备图形处理能力!(你可以把它想象成 JavaScript,但它仍然需要 HTML 才能显示任何内容)。
因此,我们将使用一个名为 Turtle 的 Python GUI(图形用户界面)库。Turtle 就像一支笔,你可以把它放在屏幕上,然后随意移动它,最终在屏幕上绘制出你想要的内容。

为了让 python 带上我们用来绘图的笔,我们可以输入以下行:

Pen = turtle.Turtle()
Enter fullscreen mode Exit fullscreen mode

然而,正如我们所说,turtle 不属于 Python 本身,所以我们需要告诉它从外部某个地方获取它(不用担心,它知道在哪里找到外部的东西)。
所以我们总是会在文件顶部包含这一行:

import turtle
Pen = turtle.Turtle()

Enter fullscreen mode Exit fullscreen mode

太棒了!现在我们有了笔,我们需要开始画画了!
想象一下,握着笔的是你的手,而不是 Python。例如,要向右画一条直线,你只需把手贴在纸上,然后向右移动,就能把笔向右移动!
所以我们知道需要告诉 Python 做两件事:

  • 把笔放在纸上(在 Python 中是屏幕!)
  • 将笔朝我们想要的方向移动 x 距离!那么,让我们这样做:
import turtle
pen = turtle.Turtle()

pen.pendown() #this line puts the pen on the paper
pen.forward(100) #now move the pen forward 100 steps!
Enter fullscreen mode Exit fullscreen mode

现在运行代码,你会看到一个小箭头在屏幕上移动!
现在我们需要记住一些关于如何移动笔的知识。因为我们不仅要向前移动,还要移动其他东西!

  • pen.forward()
  • pen.backward()
  • pen.left()
  • pen.right()
  • pen.penup()

现在,在我们继续之前,我想让你自己尝试一下。
…… 它们看起来很直观,对吧?
左右键实际上不会移动笔,而是旋转一定的角度。 现在尝试复制下面的代码并将其粘贴到你的文本编辑器中。你看到了什么?
.backward()

import turtle
pen = turtle.Turtle()

pen.pendown() #this line puts the pen on the paper
pen.forward(100) #now move the pen forward 100 steps!
pen.right(90)
pen.forward(100)
pen.right(90)
pen.forward(100)
pen.right(90)
pen.forward(100)
Enter fullscreen mode Exit fullscreen mode

没错!
我们用正确的方式移动了笔,画出了一个正方形,太棒了。现在让我们增加括号中的值,forward因为我们想要一个更大的正方形!(这就是我们游戏发生的地方)。

...

但是,等一下,你有没有注意到我们的代码里有两行重复了三次!你不觉得这样做很丑吗?
我的意思是,应该有一种方法可以让 Python 一遍又一遍地读取某些内容,而不用重复编写!

是的,你猜对了!
实际上,我们只能写这两行代码一次,然后告诉 Python 读取它们三次!以下是具体方法:

import turtle
pen = turtle.Turtle()

pen.pendown() #this line puts the pen on the paper
for side in range(3): #see number three? its what reminds Python,  THREE times!
  pen.forward(100)
  pen.right(90)
pen.forward(100)
Enter fullscreen mode Exit fullscreen mode

这被称为for loop。它允许您多次执行同一操作,而无需重新编写同一件事!

太好了,现在我们有了一个大方块,我们希望我们的游戏就在里面!

等等!你知道吗?只需输入 ,你就可以改变笔的颜色。.color('name_of_color')试试看!即:pen.color('red')
在继续之前,请先尝试。

在继续之前,让我们确保我们知道我们在游戏中到底想要什么:

  • 我们的角色可以移动并射击敌人!
  • 向我们靠近的敌人角色👽
  • 敌人触碰我们,我们就会被摧毁
  • 我们的子弹击中敌人,敌人就会死!🚀

太棒了!现在我们可以一一完成了!首先,让我们创建我们。我们只是一支在方框内移动的笔。但是等等,如果我们这样做,我们不是就能画画了吗?你说得对,但还记得我们说过可以告诉 Python 把笔从纸上移开吗?这样做的话,笔仍然会显示在屏幕上,但移动时不会留下任何痕迹。那就让我们开始吧!

player我们创造了一支名为(我们)的新笔,并把它从纸上拿开。

import turtle
pen = turtle.Turtle()

pen.pendown() #this line puts the pen on the paper
for side in range(3): #see number three? its what reminds Python,  THREE times!
  pen.forward(100)
  pen.right(90)
pen.forward(100)

player = turtle.Turtle()
player.penup()
Enter fullscreen mode Exit fullscreen mode

现在,如果我们尝试移动玩家(player.forward(100)),它会移动,不会留下任何东西。无论如何,我们不想每次移动时都写入值!相反,我们会告诉 Python,每次按下一个键时,它只移动一步!

首先让我们告诉 Python 仔细聆听,因为当我按下D键盘上的字母时,我希望玩家向前迈一步!

wn = turtle.Screen() #initiate the window
wn.listen()
wn.onkey(myFunction, `d`) #this waits until you press <kbd>D</kbd>
Enter fullscreen mode Exit fullscreen mode

但是等等,这是什么myFunction
这是一个重要的问题。
在 Python 中,函数是我们向计算机发出的一组命令。什么是命令?用 Python 或任何其他语言编写的每一行代码都是一个命令!所以我们可以编写一个只说“你好”的函数!或者收集我们刚写的代码行并画一个正方形!函数的一个特殊之处在于,它们在我们调用它们之前不会发生!
就像你妈妈打电话给爸爸让他拿些东西回家一样?你调用一个函数来做某事。所以在这里,我们需要告诉myFunction我们的玩家只向右移动一步!所以每次我们按下d,我们的玩家就向前移动一步。
这就是我们如何制作这个函数:

def moveRight():
 x = player.xcor()
 x += 10
 player.setx(x)
Enter fullscreen mode Exit fullscreen mode

让我们花点时间解释一下这段代码;
单词def只是 Python 的一种识别方式,它后面是函数的名称(没错,因为你可以随意命名函数😄)。现在我们知道了,这moveRight()是函数的名称。函数后面的两个点只是表示函数从这里开始。如果我们输入它们,然后按下Enter,我们会注意到编辑器会立即让我们在下一行开始处留出一些空白。
为什么?这就是 Python 知道这一行是这个函数的一部分的方式。

太好了,现在让我们看看这个函数的一部分是什么。

x = player.xcor()这句话背后有一些奇怪的数学。
(如果你碰巧知道什么是正交系统,你就会知道这是什么)。但你真正需要知道的是,这个 x 现在具有我们的当前位置player请注意代码说player.xcor())。
现在我们说我们想要向右移动一步。所以我们需要将 x 增加一步!
这就是这一行的作用x += 10。你可以尝试 10 以外的数字,看看你的移动有多快/慢。
现在在增加 x 的值(我们的玩家曾经所在的位置)之后,我们需要再次将 x 分配给我们的玩家。这就是最后一行的作用:player.setx(x)

尝试运行代码并移动玩家。
现在按下 后,你应该能够向右移动🎆 D

很简单吧?
现在让我们用同样的逻辑向左移动。
按住 ONE 🔔
注意,当我们向右移动时,我们增加了 x,但是当我们向相反方向移动时,我们该怎么做呢?

def moveLeft():
 x = player.xcor()
 x -= 10
 player.setx(x)
Enter fullscreen mode Exit fullscreen mode

A但是要运行这个函数,我们需要让 Python 在按下键盘上的字母时运行它!所以,让我们A再次让 Python 监听这个字母。

wn.onkey(moveLeft, 'a')
Enter fullscreen mode Exit fullscreen mode

太棒了!
现在唯一缺少的就是向前和向后移动!
我们可以使用相同的逻辑来实现,但是这里需要用到一些数学知识。
之前左右移动时,我们使用xcor()。但现在我们要向前和向后移动,所以我们会使用ycor()

wn.onkey(moveForward, 'w')
wn.onkey(moveBackward, 's')

def moveForward():
 y = player.ycor()
 y += 10
 player.sety(y)

def moveBackward():
 y = player.ycor()
 y -= 10
 player.sety(y)
Enter fullscreen mode Exit fullscreen mode

现在运行你的代码并四处移动!
太棒了!!🎆🎆🎆
我们现在可以自由移动了!
我们的最终代码如下所示:

import turtle
pen = turtle.Turtle()

pen.pendown() #this line puts the pen on the paper
for side in range(3): #see number three? its what reminds Python,  THREE times!
  pen.forward(100)
  pen.right(90)
pen.forward(100)

player = turtle.Turtle()
player.penup()

def moveRight():
    x = player.xcor()
    x += 10
    player.setx(x)

def moveLeft():
    x = player.xcor()
    x -= 10
    player.setx(x)  

def moveForward():
    print('something')
    y = player.ycor()
    y += 10
    player.sety(y)

def moveBackward():
    y = player.ycor()
    y -= 10
    player.sety(y)

wn = turtle.Screen()
wn.listen()

wn.onkey(moveRight, 'd')
wn.onkey(moveLeft, 'a')
wn.onkey(moveForward, 'w')
wn.onkey(moveBackward, 's')

turtle.done() #this just keeps the window open until we close it
Enter fullscreen mode Exit fullscreen mode

你已经走了很长一段路了!
下一个教程,我们将在游戏中引入敌人,然后开始战斗!

给我买杯咖啡

我毕生致力于尽可能地支持和贡献网络社区的常识。我的一些文章可能听起来有点傻,或者太难,但任何知识都是有用的。如果你喜欢我的文章,请随时给我买杯咖啡,帮助我继续写作😉❤️

链接链接 https://dev.to/mustafaanas/teach-your-kids-to-build-their-own-game-with-python-rocket-1-3159
PREV
关于 Angular 动画你需要知道的一切 1. 创建主组件 📦 2. 实现列表组件(暂时没有动画) 3. 动画 🧙‍♂️ 结论
NEXT
如何使用 CSS 和 JavaScript 创建 Google 的 Material Design 文本输入字段?