教你的孩子用 Python 构建自己的游戏 - 1
几个月前,我曾经做过编程培训师。我们的学生以前都是来自贫困社会的流浪儿童。你可以想象他们当时受教育的匮乏。作为老师,我必须让课程变得轻松有趣,让他们容易掌握,所以我经常用游戏来达到这个目的。我翻看以前的文件,找到了我写的这个教案,教孩子们如何开发这个著名的游戏Space Invaders
。一开始,这看起来像是一个不可能完成的任务,但他们真的爱上了它,并因此爱上了编程!
好了,就不多说了,我将在这里分享这节课的三篇文章。今天是第一篇,希望对初学者或家长有所帮助。
要继续本教程,您需要安装 Python 和一个文本编辑器。或者,您可以使用这个在线文本编辑器并创建一个也使用 turtle 的项目(我们稍后会详细讨论这一点)。
使用 Turtle 进行图形处理
Python 本身只是一门编程语言。它可以深入地指挥计算机执行操作,但它本身并不具备图形处理能力!(你可以把它想象成 JavaScript,但它仍然需要 HTML 才能显示任何内容)。
因此,我们将使用一个名为 Turtle 的 Python GUI(图形用户界面)库。Turtle 就像一支笔,你可以把它放在屏幕上,然后随意移动它,最终在屏幕上绘制出你想要的内容。
为了让 python 带上我们用来绘图的笔,我们可以输入以下行:
Pen = turtle.Turtle()
然而,正如我们所说,turtle 不属于 Python 本身,所以我们需要告诉它从外部某个地方获取它(不用担心,它知道在哪里找到外部的东西)。
所以我们总是会在文件顶部包含这一行:
import turtle
Pen = turtle.Turtle()
太棒了!现在我们有了笔,我们需要开始画画了!
想象一下,握着笔的是你的手,而不是 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!
现在运行代码,你会看到一个小箭头在屏幕上移动!
现在我们需要记住一些关于如何移动笔的知识。因为我们不仅要向前移动,还要移动其他东西!
- 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)
没错!
我们用正确的方式移动了笔,画出了一个正方形,太棒了。现在让我们增加括号中的值,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)
这被称为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()
现在,如果我们尝试移动玩家(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>
但是等等,这是什么myFunction
?
这是一个重要的问题。
在 Python 中,函数是我们向计算机发出的一组命令。什么是命令?用 Python 或任何其他语言编写的每一行代码都是一个命令!所以我们可以编写一个只说“你好”的函数!或者收集我们刚写的代码行并画一个正方形!函数的一个特殊之处在于,它们在我们调用它们之前不会发生!
就像你妈妈打电话给爸爸让他拿些东西回家一样?你调用一个函数来做某事。所以在这里,我们需要告诉myFunction
我们的玩家只向右移动一步!所以每次我们按下d
,我们的玩家就向前移动一步。
这就是我们如何制作这个函数:
def moveRight():
x = player.xcor()
x += 10
player.setx(x)
让我们花点时间解释一下这段代码;
单词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)
A但是要运行这个函数,我们需要让 Python 在按下键盘上的字母时运行它!所以,让我们A再次让 Python 监听这个字母。
wn.onkey(moveLeft, 'a')
太棒了!
现在唯一缺少的就是向前和向后移动!
我们可以使用相同的逻辑来实现,但是这里需要用到一些数学知识。
之前左右移动时,我们使用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)
现在运行你的代码并四处移动!
太棒了!!🎆🎆🎆
我们现在可以自由移动了!
我们的最终代码如下所示:
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
你已经走了很长一段路了!
下一个教程,我们将在游戏中引入敌人,然后开始战斗!
链接链接 https://dev.to/mustafaanas/teach-your-kids-to-build-their-own-game-with-python-rocket-1-3159我毕生致力于尽可能地支持和贡献网络社区的常识。我的一些文章可能听起来有点傻,或者太难,但任何知识都是有用的。如果你喜欢我的文章,请随时给我买杯咖啡,帮助我继续写作😉❤️