蘑菇云「行空板Python入门教程」第六课:贪吃蛇小游戏

在很久很久以前,手机屏幕都还是黑白的年代,有一款叫做“贪吃蛇”的游戏风靡了大街小巷,在那分辨率极低的屏幕上,几条扭扭曲曲的弧线似乎穿越了整个童年。
这节课上,就让我们用行空板来实现一下这款经典的游戏吧!
在这里插入图片描述

任务目标
在屏幕上进行贪吃蛇小游戏。
在这里插入图片描述
在这里插入图片描述

知识点
1、认识pygame库
2、学习使用pygame库创建游戏窗口的方法
3、学习使用pygame库绘制图形、绘制文本、更新屏幕显示的方法
4、学习使用pygame库实现键盘交互的方法
材料清单
硬件清单:
!行空板x1 ](https://img-blog.csdnimg.cn/b2addc3b38e74123879b7aa5019a41c8.png#pic_center)

Type-C&Micro二合一USB线x1

软件使用:Mind+编程软件x1
知识储备

1、贪吃蛇小游戏实现原理与逻辑
(1)实现原理
在这个贪吃蛇游戏中,我们将整个游戏区域划分成一个个的小格子,每一个格子的所在位置可以通过行列来表示,由一组连在一起的小格子组成“蛇”,“蛇”分为“蛇头”和“蛇身”两部分。“蛇头”用一个格子表示,“蛇身”用一个列表来存储,结合不同的颜色,这样一条“蛇”就出来了。“蛇”的移动则是将下一格的行列位置添加到列表开头,并移除列表的最后一个元素,就相当于“蛇”向前移动了一格。食物同样以格子的形式随机呈现,当“蛇头”与食物的位置重合,那么“蛇”就吃到了食物,而当“蛇”移动超出了范围亦或者“蛇头”撞在了“蛇身”上,那么游戏结束并计算食物数量。
在这里插入图片描述

(2)游戏逻辑图
由于游戏包含了蛇的移动、吃食物、事件监测、结束游戏等多个功能,在编程时,我们可以通过定义函数的方式,实现各个不同的功能部分,之后依据游戏逻辑在所需处调用即可。
在这里插入图片描述

2、什么是pygame库
pygame是专为电子游戏设计的跨平台Python库。通过它,我们可以设计包含图像、声音等元素的电子游戏。pygame做游戏开发的优势在于不需要过多地考虑底层相关的内容,而可以把重心放在游戏逻辑上,例如,pygame中集成了很多和底层相关的模块,如访问显示设备、管理事件、使用字体等。关于pygame常用的一些模块可参考下表。
模块名	功能
pygame.display	访问显示设备
pygame.event	管理事件
pygame.draw	绘制形状、线和点
pygame.key	读取键盘按键
pygame.mouse	控制鼠标事件
pygame.music	播放音频

3、pygame库常见函数
pygame库中的函数有很多,我们只使用其中的一部分,编程时,通过“import pygame”导入库后可采用“pygame.函数名()”的形式来实现功能。
(1)init()函数初始化pygame模块
通过init()函数我们可对pygame中的模块进行初始化,在编程时,我们需要将这条指令放在其他pygame指令之前,初始化后方可使用其中的模块。
pygame.init() # 初始化pygame

(2)quit()函数退出pygame库
quit()函数是与init()函数功能相反的一个函数,可以实现退出pygame,使pygame库结束工作。在编程时,我们通常在需要结束游戏时使用。
pygame.quit() # 退出pygame

4、pygame库display模块中的常用方法
pygame库display模块可用来访问显示设备,以便在设备上显示内容。其中的方法有很多,我们只使用其中的一部分,在编程时,可通过“模块名.方法名()”的形式来实现功能。
(1)set_mode()方法初始化一个准备显示的窗口界面
set_mode()方法可以实现游戏窗口的创建
size=(240,320) # 定义尺寸
window = pygame.display.set_mode(size) # 创建游戏窗口,尺寸为(240,320)
其中,size是我们设定的要显示的游戏窗口的尺寸大小,和行空板屏幕相同,window是一个生成的屏幕Surface对象,我们可以对它进行填充颜色、涂画、添加其他对象等各种操作。
如下,在填充颜色时,我们可通过“对象.fill()”的指令实现。
bg_color=(255,255,255) # 定义背景色为白
window.fill(bg_color) # fillcolor # 填充窗口的背景颜色
而要想将其他对象添加到窗口对象上,我们可通过“对象.blit()”指令来实现。
window.blit(score, (40,250)) # 在窗口上(40,250)处显示得分

(2)flip()方法更新屏幕
flip()方法可以将待显示的画面更新到屏幕上。通常,我们在使用pygame.display模块编写一些功能后,需要使用flip方法,才能将其更新显示到屏幕上。
pygame.display.flip() # Refresh all displays to the window # 更新所有待显示的内容到屏幕

5、pygame库draw模块中的常用方法
pygame库display模块可用来绘制各种不同的形状,其中的方法有很多,编程时,可通过“模块名.方法名()”的形式来实现功能。
(1)rect()方法绘制矩形
rect()方法可以实现矩形的绘制。
left=point.col15 # 定义小方格距离左边缘的距离
top=point.row
15 # 定义小方格距离上边缘的距离
pygame.draw.rect(window,color,(left,top,15,15)) # 在窗口上绘制矩形,颜色为color
其中,window表示矩形绘制在窗口上,color是指矩形的颜色,left和top分别指矩形距离窗口左边缘和上边缘的距离,用以表示矩形的位置区域。

6、pygame库font模块中的常用方法
pygame库font模块可实现字体的使用,其中的方法有很多,编程时,可通过“模块名.方法名()”的形式来实现功能。
(1)SysFont()方法创建字体对象
SysFont()方法可以实现字体对象的创建。
font = pygame.font.SysFont(‘Arial’, 20) # 设置字体
其中,Arial指的是具体的字体类型,20指的是字体大小,font是一个变量用于存储生成的字体对象。
而在创建好字体对象后,我们就可以在其上绘制具体的文本,以达到显示的效果,我们可通过“对象.render()”指令来实现。
score = font.render('Your Score is ’ , False, ‘pink’) # 计算得分
其中,'Your Score is '指的是具体绘制的文本,False表示无需抗锯齿,pink指的是文本的颜色,score是一个变量用于存储生成的文本。

7、pygame库中的事件、事件类型、键盘事件以及事件检测
事件(Event)是 pygame 的重要模块之一,它是构建整个游戏程序的核心,比如鼠标点击、键盘敲击、游戏窗口移动、退出游戏等等,这些都可以看做是“事件”,pygame 会接受用户产生的各种操作(或事件),这些操作随时产生,并且操作量可大可小,那么 pygame 是如何处理这些事件的呢?

pygame 定义了一个专门用来处理事件的结构,即事件队列,该结构遵循队列“先到先处理”的基本原则,通过事件队列,我们可以有序的、逐一的处理用户的操作(触发事件)。对于 pygame 中常用的游戏事件,可参考下表:
事件类型	描述	成员属性
QUIT	用户按下窗口的关闭按钮	None
KEYDOWN	键盘按下	unicode、key、mod
KEYUP	键盘放开	key、mod
MOUSEBUTTONDOWN	鼠标按下 	pos, button
MOUSEBUTTONUP	鼠标放开	pos, button

Tips:当使用 pygame 做游戏开发时,上述事件并非都会应用的到。

其中,键盘事件会涉及到大量的按键操作,比如游戏中的上下左右,或者人物的前进、后退等操作,这些都需要键盘来配合实现。
键盘事件提供了一个 key 属性,通过该属性可以获取键盘的按键。pygame 将键盘上的字母键、数字键、组合键等按键以常量的方式进行了定义,对于部分常用按键的常量,可参考下表:
常量名	描述
K_SPACE	空格键(Space)
K_RETURN	回车键(Enter)
K_0...K_9	0...9
K_a...Kz	a...z
K_UP	向上箭头(up arrow)
K_DOWN	向下箭头(down arrow)
K_LEFT	向左箭头(left arrow)
K_RIGHT	向右箭头(right arrow)

Tips :由于行空板在开发时已做处理,将按键a、b映射为键盘上的a、b按键,因此,在获取键

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值