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

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

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

任务目标
在屏幕上进行贪吃蛇小游戏。

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

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

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

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

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

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

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

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

2、什么是pygame库
pygame是专为电子游戏设计的跨平台Python库。通过它,我们可以设计包含图像、声音等元素的电子游戏。pygame做游戏开发的优势在于不需要过多地考虑底层相关的内容,而可以把重心放在游戏逻辑上,例如,pygame中集成了很多和底层相关的模块,如访问显示设备、管理事件、使用字体等。关于pygame常用的一些模块可参考下表。

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

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.col _15 # 定义小方格距离左边缘的距离
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 中常用的游戏事件,可参考下表:

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

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

其中,键盘事件会涉及到大量的按键操作,比如游戏中的上下左右,或者人物的前进、后退等操作,这些都需要键盘来配合实现。
键盘事件提供了一个 key 属性,通过该属性可以获取键盘的按键。pygame 将键盘上的字母键、数字键、组合键等按键以常量的方式进行了定义,对于部分常用按键的常量,可参考下表:

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

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

Original: https://blog.csdn.net/SFME008/article/details/125065046
Author: 创客生活
Title: 蘑菇云「行空板Python入门教程」第六课:贪吃蛇小游戏

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/783466/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 命名元组

    1、命名元组也叫具名元组 可以通过名称来访问序列中的元素,摆脱对位置的依赖,他本身是一个工厂函数 2、应用1 实例化元组返回的类,其内存占用要比普通类实例要小的多,因为前者实例的属…

    Python 2023年10月31日
    028
  • ChatGPT微信小程序

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年11月4日
    045
  • 字符串转换篇

    atof(将字符串转换成浮点型数)相关函数: atoi,atol,strtod,strtol,strtoul表头文件: #include定义函数: double atof(cons…

    Python 2023年11月6日
    024
  • 使用 swagger-ui 可视化 Kubernetes API 文档

    在工作中,你可能需要基于 Kubernetes 提供的 API 进行开发,比如开发适合自己的控制台,Kubernetes 官方提供的 API 文档,有两个问题: 非常的不直观,这个…

    Python 2023年6月6日
    065
  • FFmpeg进阶: 转码输出视频文件中的音频

    很多时候为了方便收听视频文件中的音频信息,我们会将视频文件中的音频流转码输出成音频文件,方便在对应的平台上进行播放。这里就介绍一下如何通过FFmpeg将视频文件中的音频流转码成特定…

    Python 2023年9月7日
    083
  • 探究Presto SQL引擎(4)-统计计数

    作者:vivo互联网用户运营开发团队 – Shuai Guangying 本篇文章介绍了统计计数的基本原理以及Presto的实现思路,精确统计和近似统计的细节及各种优缺…

    Python 2023年10月16日
    036
  • 这将使你见过最全面的Python制作GUI学生管理系统教程

    表弟大学快毕业了,学了一个学期Python居然还不会写学生管理系统,真的给我丢脸啊,教他又不肯学,还让我直接给他写,我真想两巴掌上去,最终还是写了给他,谁让他是我表弟呢,关键时候还…

    Python 2023年5月24日
    075
  • 从零开始写博客系统——获取博客列表

    开始 从现在开始,我们就要开始进行后台的开发了,首先我们要用 Flask开启我们的第一个接口。 参考大部分博客的情况,打开博客首页的时候都会需要展示博客的列表。因此我们的第一个后台…

    Python 2023年8月13日
    033
  • numpy 下载安装

    在安装 numpy 之前,必须要先安装 python,而且 numpy 与 python 的版本是对应的。 numpy 与 python 版本对应关系链接 ; 1. 下载和安装 p…

    Python 2023年8月23日
    049
  • Python装饰器

    一、装饰器介绍 软件设计应遵循开放和封闭的原则,即对扩展开放,对修改封闭: [En] The design of the software should follow the pr…

    Python 2023年5月25日
    074
  • 图数据挖掘:小世界网络模型和分散式搜索

    1 六度分隔理论 先来看两个有趣的例子。我们建立一个好莱坞演员的网络,如果两个演员在电影中合作或就将他们链接起来。我们定义一个演员的贝肯数(bacon number)是他们与演员凯…

    Python 2023年10月16日
    050
  • Python爬取图片

    爬取网站 https://image.baidu.com/ 先打开页面 然后点击动物图片 当然选择哪个都可以我这里只是喜欢动物的所以选择这个分类 爬取任何数据 第一步就是先确定数据…

    Python 2023年8月2日
    061
  • pandas数据组合

    数据组合常用的方法有concat方法、append方法和merge方法,根据数据的特点不同,有不同的连接方式。 1、添加行 通过concat方法添加行,列相同时添加的行会在原来的列…

    Python 2023年8月19日
    023
  • 【Python】一文弄懂Numpy中的深拷贝和浅拷贝

    引言 深拷贝和浅拷贝是Python中重要的概念,本文重点介绍在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理。闲话少说,我们直接开始吧! 浅拷贝 2.1 问题引入 我们来举个…

    Python 2023年8月27日
    041
  • 可恶,又是个线上问题

    这几天,在搞 ShardingSphere,这不又来了一个问题嘛,启动的时候报了一个NPE出来。 好在,这个问题不影响使用,只是启动会报点错,接下来,又是辛苦的排查过程。 直接定位…

    Python 2023年10月20日
    035
  • 面试题之Redis是否支持事务

    联想软开暑期实习 一面 一、问题 刚说了MySQL事务,说一下Redis是否支持ACID 我:balabal…. 面试官:中间原子性说错了 注:以下为一些不太完整的总结…

    Python 2023年6月16日
    072
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球