2D迷宫
迷宫游戏是许多小伙伴儿时经常做的游戏,它能锻炼我们的空间推理能力、逻辑力、耐心与恒心,也能带来许多欢乐。
让我们设计一个迷宫游戏,在DFRobot-行空板屏幕上体验一下吧!
任务目标
通过三轴加速度传感器获取加速度值,继而控制角色在地图上移动走出迷宫。
知识点
1、认识三轴加速度传感器
2、学习使用Pinpong库读取加速度值的方法
3、学习使用turtle库绘制迷宫的方法
材料清单
软件使用:Mind+编程软件x1
知识储备
1、什么是重力加速度与加速度传感器
地球表面附近的物体因受重力产生的加速度叫做重力加速度,也叫自由落体加速度,用g表示。
加速度传感器,是一种能够测量加速度,将其转换为电信号的设备。
行空板的加速度传感器是内置在板子上的,可以测量X,Y,Z三个方向的加速度,其中,X轴正方向为金手指一侧的方向,Y轴正方向为Home按键一侧的方向,Z轴垂直于板子,正方向为屏幕背面一侧的方向。
2、Pinpong库读取加速度值
Pinpong库的“pinpong.extension.unihiker”文件下“GD32Sensor_acc”类中的“get_x()”、“get_y()”、“get_z()”三个方法可以分别获取x/y/z三个方向的加速度值,并且由于在文件中已经对该类进行过实例化生成了一个accelerometer对象,因此,我们在使用时,可以直接通过“accelerometer.getx()”/“accelerometer.gety()”/“accelerometer.getz()”指令来获取各自方向的加速度值。当然,在这之前,我们需要先导入Pinpong库相关的文件并初始化板子。
from pinpong.board import Board # 从pinpong.board包中导入Board模块
from pinpong.extension.unihiker import * # 导入pinpong.extension.unihiker包中所有模块
Board().begin() # 初始化,选择板型和端口号,不输入则进行自动识别
x = accelerometer.get_x() # 获取x轴加速度值
y = accelerometer.get_y() # 获取y轴加速度值
其中,x和y是一个变量,分别用来存储检测到的x和y轴方向的加速度值。
3、turtle库屏幕控制的常见函数
turtle库中关于屏幕控制的函数有很多,我们只使用其中的一部分,编程时,通过“import turtle”导入库后可采用“turtle.函数名()”的形式来实现功能。
(1)bgpic()函数设置绘图窗口(画布)的背景颜色
通过bgpic()函数我们可为当前的窗口屏幕设置背景颜色。
turtle.bgcolor(“pink”) # 设置窗口背景颜色
其中,“pink”指的是粉红色。这里的颜色同样可以通过RGB值、十六进制值、固定值三种不同的方式来表示。
(2)clear()函数清空窗口
通过clear()函数我们可以将窗口上的内容清空掉。
turtle.clear() # 清空窗口
4、turtle库画笔运动的常见函数
(1)setheading()函数设置画笔当前的朝向
通过setheading()函数我们可使画笔朝向任何方位。0°表示正东方向,90°表示正北方向,180°/-180°表示正西方向,270°/-90°表示正南方向。
turtle.setheading(90) # 设置画笔的朝向为90°方向
其中,“90”指的是具体要指向的方位角度。可通过改变方位角度值来改变画笔的朝向。
(2)write()函数书写文字
通过write()函数我们可以使画笔在窗口屏幕上书写文字。
turtle.write(‘you win!’,font = (‘微软雅黑’, 30)) # 书写“you win!”
其中,“you win!”指的是具体要写入的文字内容,align指的是对齐方式,“center”表示中心对齐,font指的是字体,这里为大小30的微软雅黑字体。
动手实践
任务描述1:绘制迷宫
在屏幕上绘制一幅盘根错节的迷宫图。
1、硬件搭建
STEP1:通过USB连接线将行空板连接到计算机
2、程序编写
STEP1:创建与保存项目文件
启动Mind+,另存项目并命名为“005、2D迷宫”。
STEP2:创建与保存Python文件
创建一个Python程序文件“protract.py”,双击打开。
STEP3:程序编写1
在这个任务中,我们将绘制一幅迷宫图,由于迷宫图的绘制过程比较复杂,因此,我们将其单独编写在protract程序文件中,以便在后续直接调用。
(1) 导入所需功能库
这里,我们需要使用turtle库来绘制迷宫,因此,我们需要先导入它。
import turtle # 导入turtle库
(2) 创建图形窗口
为了能使迷宫显示在屏幕上,我们需要先创建一个和屏幕大小一致的图形窗口,而后在图形窗口中创建一块画布,设置好相应的大小尺寸和背景颜色,并设置屏幕延迟为0,避免卡顿。
turtle.setup(240, 320) # 设置图像窗口大小
turtle.bgcolor(“pink”) # 设置窗口背景颜色
turtle.delay(0) # 屏幕延迟
(3) 设计迷宫路线方案
对于迷宫图的绘制,我们分两步进行。首先,我们设定一个宽和高都为20像素的小方格作为一堵墙,之后,以此小方格为一个单位来设定整体的迷宫,由于屏幕的宽为240像素,高为320像素,在横向上,我们可绘制13个方格(屏幕显示为11个整块方格+2边各一个半块方格),而在纵向上,我们也够绘制13个方格。
这里,我们以“0”和“1”来表示小方格的有无,并通过列表嵌套的形式来表示迷宫的路线。
迷宫列表
maze_list = [
[0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0], # 第0行
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], # 第1行
[0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0], # 第2行
[0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], # 第3行