Python编程入门之Arcade游戏编程(一)

30 篇文章 7 订阅
23 篇文章 1 订阅

适用对象:有一定Scratch基础或小学高年级和初中的零起点学生

 填写调查问卷,反馈您的声音

与非学堂

专注青少年信息技术教育,探讨少儿编程的教与学,交流技巧、分享资源。


1. 游戏与编程

相信没有人会拒绝玩游戏。

伟大的革命家李大钊先生说“要学就学个踏实,要玩就玩个痛快”。今天我们就把玩和学放到一起,既能学又能玩,那就是通过编程。

编程可以有很多入门的方法。

今天我们要给大家讲的是如何用Python编程,用Python这门计算机语言编写一个游戏。

这个单词Python,读起来像是“派神”。大家只要记得,这个Python,它确实非常有派头,非常神就对了!

这里也许你曾经学习过Scratch,也许没有,都没有关系。我们尽量用大家都能明白的话,讲解清楚用Python编写游戏程序到底是怎么一回事儿。

大家说说自己喜欢的游戏吧!

(七嘴八舌)

曹老师也曾经统计过,现在同学们喜欢玩的游戏大概有这样一些:

我的世界(Minecraft)

逃跑吧少年

王者荣耀

……

要是把所有同学们喜欢的游戏都列出来,那么这个列表将会变得非常长。没办法,我们只能把其中最常见、最受欢迎的游戏放在这里。

在这些游戏中,同学们有时可以砰砰射击,有时可以打打杀杀,有时可以驾车,有时可以跳伞,有时可以游泳,有时可以奔跑,有时可以迎救公主,有时可以寻找宝藏,有时可以……

相信玩得厉害的同学都希望朝一日能设计一款自己的游戏,有没有?

当我们有这样的想法的时候,恭喜大家,你真正晋级了!

比起在游戏里通关晋级,有了这种想法的晋级,更胜一筹。

为什么这么说呢?

因为不知道哪位名人说过,制造和使用工具,是人和动物的本质区别

这句话在游戏这个行当里,可以这样理解:把游戏看成是我们玩的工具。那能够制造一款游戏,与只能够玩别人做出来的游戏,是有根本不同的。

当你有心要造出来一个东西时,你的思维,你的视角,就不一样了!你将不再是被动地去用这个东西,你将是一个创造者!

老师希望同学们是一个真正的创造者!

为什么这么说呢?因为从远古至今天,人类所取得的一切成就,无一不是创造出来的。没有创造,就没有我们今天的美好生活。

所以咱们这个课程,表面上看,它是教大家学Python的课,实际上,它是一门创作课;表面上看它是一门让大家学习的课,实际上,它是一门鼓励大家在玩中增长知识,在玩中创造未来的课!

来到这门课的同学,不用说,缺的并不是这种认识这种想法,缺少的是一种方法,一种机会。

那咱们这个课,就是要给大家这样的一种机会,教给同学们一种方法,如何把自己的想法,一步一步转化为现实。

其实这个事情并不难,难的是如何开头!

其他的也不多说了。我们直接来想,怎么开始做一个游戏。今天把这个头给大家开了,让大家看到,编写一个游戏程序,也不过如此!

2. 认识Python和Arcade

大家要安装Python和Arcade游戏库。相信现在同学们的电脑上都已经安装好这两样东西了。如果没有安装好的,请看老师之前的视频。

Python是我们编写游戏程序时用的一种特殊的“语言”,有点像英语,但是它里面有很多特殊的“语法”,这些在遇到的时候老师会经常提醒大家。

其实大家不要把“Python语言”想得太复杂,说白了,它就是一种规定计算机如何完成某件事的说明、指令、要求。

我举一个例子。曹老师有个学生,叫小V,他在母亲节当天制作了一个的神秘礼物。这里我给大家展示一下。请搜索视频号 AllyM:母亲节的惊喜#mother's day

大家可以看到,小V同学写在纸片上的话,是不是可以告诉妈妈一步一步应该做什么呀?

其实这种步骤的说明,也可以看作一门特殊的“语言”——用来告诉妈妈应该每一步做什么的,照着做了就能得到相应的结果。

那么如果我们把这个纸片上的话,告诉计算机的话,那么就是一段用“汉语”这种“语言”编写的“程序”了。

只不过我们现在编写的程序基本不是汉语的。并不是说汉语不能用来编程,只是说有其他的“语言”,可以比汉语更能让计算机懂我们的意思。这些“语言”就是计算机语言。

Python就是这些语言中的一种。

而Arcade又是什么呢?Arcade其实是用来帮助我们快速用Python编写游戏程序的一套模板。

这怎么理解呢?语文课上大家写作文,如果把Python对应为“汉语”的话,那么Aracde可以认为是一套优秀的汉语作文模板。

你没有这套模板,就得自己从头到尾写这篇作文的每一细节,有了这个模板,就能非常方便地写出一篇作文了。尽管可能一点中规中矩,但毕竟比自己去照顾每一个细节,完成得要快不知道多少倍。

那我们一开始刚开始学习编程,有这个模板,大家完成游戏程序的速度会更快,所以用模板比不用模板更好些。后面大家都学得炉火纯青了,就可以抛开这个模板,自创一套模板了。

3. 捡金币游戏初体验

现在,我们就真正开始用Python和Arcade来完成一个游戏吧!

当然我们也不能一开始就做一个非常复杂的游戏。饭要一口一口吃,因此老师先以一个简单的游戏来作为例子,讲解如何一步一步实现它!

这个游戏是老师精心挑选的,名字叫做“捡金币”。我们一起来玩吧!

游戏很简单,玩家需要控制角色移到旁边的金币上,角色捡到金币时,游戏成功。

大家是不是感觉太小儿科了!

不要着急!虽然这个游戏非常简单,但是它却是“麻雀虽小,五脏俱全”。

在这个小游戏里,我们有可以操作的角色,有游戏听辅助角色(金币),还有文字显示。

整个游戏就是下面的30行代码。

import arcade



class MyGame(arcade.Window):



    def __init__(self):

        super().__init__(800,600,"捡金币")

        arcade.set_background_color(arcade.color.BLUE)

        self.player = arcade.Sprite("me.png",0.5)

        self.player.center_x = 400

        self.player.center_y = 300

        self.coin  = arcade.Sprite("coin.png", 0.25)

        self.coin.center_x = 100

        self.coin.center_y = 100

        self.result = "Gaming..."



    def on_draw(self):

        arcade.start_render()

        self.coin.draw()

        self.player.draw()

        arcade.draw_text(self.result, 10, 20, arcade.color.WHITE, 14)



    def on_mouse_motion(self, x, y, dx, dy):

        self.player.center_x = x

        self.player.center_y = y



    def on_update(self, delta_time):

        if arcade.check_for_collision(self.player,self.coin):

            self.result= "You win!"



window = MyGame()

arcade.run()

我们看着这30行代码,确实有点多对不对。但是老师来告诉大家,怎么看这30行代码。

记得刚才我们说过吗?我们是用一个模板来实现的游戏!模板体现在哪些地方呢?这里老师将每个游戏程序中不变的那些东西都给同学们画出来了。

我们理解代码,不应该一个字一个字地看,而应该一段一段地看,每一段里再一行一行地看。先理解一整段的功能,再逐步细化到每一行的功能。

这里老师来告诉大家,这些段分别是什么意思。

凡是空行的地方,就表示一段结束了。那么如果按这个标准的话,同学说我们的程序一共有多少段?

可以数出来,有7段。有的段只有一行,有的段却有好多行。

每一段是什么意思,什么作用呢?我们大概来看一下。

第一段,import arcade,这个表示告诉计算机,我要用arcade这个游戏库来编程了。

第二段,class MyGame(arcade.Window):

这里是要告诉计算机,我正在设定游戏窗口的内容。

但是这第二段并不完整,后面紧跟着的4段,都用def开头对不?并且前面都还空了4个空格。所以说第二段一直到第六段,其实是一个真正的大段。这个大段表示设定游戏窗口里的内容。

而从第三到第六段,这些以def开头的句子,表示什么意思呢?

def __init__(self):

这一段,表示的是游戏一开始运行时,要处理的一些事情。如果学过Scratch的同学,可以更好地理解了,它是当鼠标点击小绿旗后,真正的游戏代码还没有开始运行前,需要进行的一些初始化设置。

def on_draw(self):

这一段,只要同学们认识这个单词draw,就能知道这一段代码大概的用处了。它是用来在屏幕上画东西,让这些角色、文字显示出来的。

def on_mouse_motion(self, x, y, dx, dy):

这一段,我们这里有三个单词非常关键:on、mouse、motion,它们分别是“当”、“鼠标”、“运动”的意思,因此合起来就是要处理当鼠标在屏幕上运动时需要做什么。

最后一段每七段,

window = MyGame()

arcade.run()

表示把刚才的设置生效,并且让程序运行起来。

总结一下刚才的方法。这段代码虽然只有30行,但是对同学们来说,一下子掌握还是比较困难。不过我们可以提纲挈领,先理解每一段的大概意思、作用,再理解每一段中的。

后面所有的游戏程序,都是用类似今天这节课这样的模板来写的。

同学们看到,在这些代码中,有好多是英文单词。为了真正学会这些内容,咱们一定得知道这些单词才行。

这里为了方便大家理解,老师把重要的单词给大家列在这里了。(列出一段代码中用到的单词,也可以用编程的方法完成哦!以后我们会学到。)

(展示单词表)

import 导入、引用

arcade (一种类型的)游戏

class (编程语言中的)类

my 我的

game 游戏(通称)

window 计算机中的窗口(窗体)

def/define 定义

init/initialize 初始化

self 自身

super 超级、父类

set 设定、设置

background 背景

color 颜色

blue 蓝色

white 白色

player 玩家

sprite 角色精灵

center 中心

coin 金币

result 结果

on 当

draw 绘制、画

start 开始

render 渲染

text 文本

mouse 鼠标

motion 运动

update 更新

delta 希腊字母Δ,一般表示增量、改变量

time 时间

if 如果

check 检查

for 为……目的

collision 碰撞

you 你

win 赢

run 运行

在课前老师给同学们发过了,以后也会这样,每节课需要用到什么单词,老师都会提前几天发给大家,希望同学们能够查一查,背一背,搞懂这些单词的意思。

当然大家一下子记不住那么多单词,也没关系,只要将这个词表放在一旁,老师讲到某个单词的时候你不知道,直接看一看,加深印象,多来这么几次,相信大家都会熟悉起来的!

4. 步步为营

为了让同学们也能写出来刚才的捡金币游戏,我们可以将游戏采用分步的方式实现。

第一步:设置窗口

第二步:显示角色

第三步:让角色动起来

第四步:添加金币

第五步:判断角色是否碰到金币,更新游戏状态

第一步:设置窗口

import arcade



class MyGame(arcade.Window):



    def __init__(self):

        super().__init__(800,600,"捡金币")

        arcade.set_background_color(arcade.color.BLUE)



    def on_draw(self):

        arcade.start_render()



window = MyGame()

arcade.run()

请同学们跟着老师把上面的代码输入。注意在写的时候,def的前面有四个空格,跟def在同一段里的下面的行,前面有八个空格。这是Python语言的语法规定。

这里的代码仍然分为三个大段:import、class、run三个部分。只不过游戏窗口的部分只有两个def。

我们看代码里,800是窗口的宽,600是窗口的高,"捡金币"是窗口标题的名字。

现在我们运行代码,可以得到一个窗口,背景是蓝色的。

(查看运行图片)

这里老师要让同学们改一个宽1200,高900的窗口,也没有问题吧?

如果要改一下背景的颜色,只需要将BLUE换成你能说出来名字的颜色单词就可以了。注意要大写,比如RED、ORANGE、PINK都没问题。

第二步:显示角色

好,刚才有了窗口的基础了,这里我们接着在上面添加上角色。角色其实是一个图片,这个图片我们要把它放到咱们跟代码在同一个文件夹下才行,名字就叫me.png。

import arcade



class MyGame(arcade.Window):



    def __init__(self):

        super().__init__(800,600,"捡金币")

        arcade.set_background_color(arcade.color.BLUE)

        self.player = arcade.Sprite("me.png",0.5)

        self.player.center_x = 400

        self.player.center_y = 300



    def on_draw(self):

        arcade.start_render()

        self.player.draw()



window = MyGame()

arcade.run()

我们在添加背景颜色后面,加了三行代码,分别表示生成一个角色,用me.png的图片,大小为原图的0.5倍也就是一半,它的x和y坐标分别为400、500。

但这时运行程序仍然不会显示出角色。这是因为在Arcade程序里,任何的角色都需要手动用代码让它显示。这里需要在on_draw下面添加这样一行:self.player.draw()。

有了这一行代码后,再运行,就能看到角色了!

(查看运行图片)

第三步:让角色动起来

刚才的角色是显示出来了,但是还不能动,于是我们要让它动起来。

要达到这个目的,我们需要在on_draw下边新增加一个def。

    def on_mouse_motion(self, x, y, dx, dy):

        self.player.center_x = x

        self.player.center_y = y

注意在写的时候,def 要与上面的def对齐,前面四个空格不能多也不能少。

这段代码就相当于定义了在鼠标运动时,角色的x和y坐标要分别跟着鼠标的x和y坐标走。

运行之后,就能看到效果了。

(查看运行图片)

第四步:添加金币

这时我们用同样的方法,添加金币。

import arcade



class MyGame(arcade.Window):



    def __init__(self):

        super().__init__(800,600,"捡金币")

        arcade.set_background_color(arcade.color.BLUE)

        self.player = arcade.Sprite("me.png",0.5)

        self.player.center_x = 400

        self.player.center_y = 300

        self.coin  = arcade.Sprite("coin.png", 0.25)

        self.coin.center_x = 100

        self.coin.center_y = 100



    def on_draw(self):

        arcade.start_render()

        self.player.draw()

        self.coin.draw()



    def on_mouse_motion(self, x, y, dx, dy):

        self.player.center_x = x

        self.player.center_y = y



window = MyGame()

arcade.run()

上面添加金币的代码,接在添加玩家的角色代码后。on_draw下面也要使用self.coin.draw()将金币画出来才可以看到。

运行后效果就有了。

(查看运行图片)

第五步:判断角色是否碰到金币,更新游戏状态

这一步我们要判断角色在移动过程中,是否碰到了金币,如果碰到了,就更新一下游戏状态:从“Gaming...”(游戏进行中……)到“You Win!”(你赢了!)。并且这个状态要在屏幕上显示出来。(不设置字体时只能用英文)

在创建角色的代码下面,我们添加游戏结果显示,一开始为Gaming:

self.result = "Gaming..."

要判断角色与金币是否碰到,我们需要添加一个新的def:

    def on_update(self, delta_time):

        if arcade.check_for_collision(self.player,self.coin):

            self.result= "You win!"

有了这一段代码后,就能判断两个角色什么时候碰到了。如果想让self.result中的英语显示出来,还需要在on_draw里用一行代码把它显示出来:

arcade.draw_text(self.result, 10, 20, arcade.color.WHITE, 14)

这里括号中有5个参数,第一个是要显示的内容,第二个是要显示位置的x坐标,第三个是要显示位置的y坐标,第四个是显示的文字用什么颜色,第五个是字体大小。

这时完整的代码如下:

import arcade



class MyGame(arcade.Window):



    def __init__(self):

        super().__init__(800,600,"捡金币")

        arcade.set_background_color(arcade.color.BLUE)

        self.player = arcade.Sprite("me.png",0.5)

        self.player.center_x = 400

        self.player.center_y = 300

        self.coin  = arcade.Sprite("coin.png", 0.25)

        self.coin.center_x = 100

        self.coin.center_y = 100

        self.result = "Gaming..."



    def on_draw(self):

        arcade.start_render()

        self.coin.draw()

        self.player.draw()

        arcade.draw_text(self.result, 10, 20, arcade.color.WHITE, 14)



    def on_mouse_motion(self, x, y, dx, dy):

        self.player.center_x = x

        self.player.center_y = y



    def on_update(self, delta_time):

        if arcade.check_for_collision(self.player,self.coin):

            self.result= "You win!"



window = MyGame()

arcade.run()

点击运行,程序出来的效果就跟我们一开始展示的一样了。

(查看运行图片)

5. 结语

今天课程的主要目的是让同学们知道Python编程是怎么一回事儿。

大家照着老师的代码,写出了自己的游戏,非常了不起!虽然很多地方还似懂非懂,但没关系,后面我们会一点一点地给大家细化。

老师不希望同学们一开始就进入太多的细节不能自拔,慢慢来!

为了学好Python,建议大家一定要下功夫把打字的速度提高,把每节课提前发的英语单词表拼写会,搞懂意思。

好,咱们下次课再见!

参考资料:

1. Python Arcade游戏库特性介绍

2. 建议收藏!Scratch与Python Arcade对比整理,解锁Python入门正确姿势

3. Python Arcade Library官网:https://arcade.academy/

— OVER —

与非学堂

与非学堂

专注青少年信息技术教育,探讨少儿编程的教与学,交流技巧、分享资源。

公众号

一份自家广告,长期有效|咨询&合作


公众号对话框回复「HELP」更多精彩

喜欢就请「分享「点赞「在看」吧!

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 我可以帮你使用Pythonarcade库来创建一个平台类游戏arcade库提供了一个简单而强大的API,可以帮助你创建2D游戏。它还有一个文档,可以帮助你开始创建游戏,并且拥有许多示例代码,可以让你学习如何使用这个库。 ### 回答2: 使用Pythonarcade库可以很方便地制作平台类游戏arcade库提供了许多内置函数和类,用于处理游戏循环、精灵、碰撞检测等常见的游戏开发任务。 首先,我们需要创建一个游戏窗口。通过arcade库提供的Window类,我们可以创建一个指定大小的窗口,并设置背景颜色。 接下来,我们可以创建角色或者其他游戏中的物体,这些物体被称为精灵。arcade库提供了Sprite类用于创建精灵。我们可以设置精灵的外观、位置、大小等属性。 在游戏循环中,我们可以监听用户输入,例如键盘按键、鼠标点击等事件。通过事件处理函数,我们可以根据用户的操作来更新精灵的状态。 在平台类游戏中,通常会涉及到角色的跳跃、移动、碰撞检测等功能。arcade库提供了一些内置函数和方法来处理这些功能。例如,我们可以使用移动函数来控制角色的水平和垂直移动。我们还可以使用碰撞检测函数来判断角色是否与其他物体发生了碰撞。 此外,arcade库还可以处理音效、动画等高级功能,以及绘制背景、地图等元素。它还提供了一些内置的工具函数,用于计算距离、旋转等常见操作。 总的来说,使用Pythonarcade库可以实现一个简单而又有趣的平台类游戏。通过利用arcade库提供的丰富功能,可以很方便地创建精灵、处理用户输入、实现碰撞检测等游戏开发任务。无论是新手还是有经验的开发者,都可以轻松上手使用arcade库制作自己的平台类游戏。 ### 回答3: 使用Pythonarcade库可以很方便地制作平台类游戏。首先,我们需要导入arcade库。然后创建一个继承自arcade.Window的类,作为游戏窗口。 在窗口类中,我们可以定义一些属性,比如玩家的位置和角色模型等。然后,我们可以使用arcade库提供的绘图函数来渲染游戏界面。 接着,我们可以定义一些事件处理函数,比如按键事件或鼠标事件。根据不同的事件,我们可以更新游戏状态,比如移动玩家或触发一些特殊的效果。 在游戏循环中,我们可以使用arcade库提供的定时器函数来设定游戏帧率。每一帧,我们可以调用draw函数来绘制游戏界面,并在需要时更新游戏状态。 此外,我们可以使用arcade库提供的物理引擎功能,比如重力或碰撞检测,来增加游戏的真实性和挑战性。 最后,当玩家达到游戏的胜利条件或失败条件时,我们可以显示游戏结束画面,并提供一些重新开始或退出游戏的选项。 总的来说,使用Pythonarcade库可以很方便地制作一个平台类游戏。通过定义游戏窗口、绘制游戏界面、处理事件和更新游戏状态等步骤,我们可以创建一个有趣且具有挑战性的游戏体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值