openvela之打地鼠(Whackmole)应用示例
本文详细介绍了在openvela系统上运行和定制打地鼠游戏Demo的完整流程。主要内容包括:1)游戏运行效果预览;2)从项目配置、编译到部署运行的详细步骤,支持QEMU模拟器和ESP32-S3-BOX开发板两种平台;3)游戏定制指南,涵盖资源图片修改和游戏难度调整方法。通过修改资源图片和调整定时器周期,开发者可以轻松实现游戏个性化定制。文章提供了具体命令和代码示例,适合嵌入式开发爱好者快速上手体验
如果你是嵌入式开发爱好者,想在 openvela 系统上体验有趣的打地鼠游戏,或者尝试对游戏进行个性化定制,那么这篇文章将为你提供详细的操作指南。我们将一步步带你完成打地鼠 Demo 在 QEMU 模拟器和 ESP32-S3-BOX 开发板上的构建、部署、运行,还会教你如何修改游戏资源和调整难度,让你轻松上手并玩转这个 Demo。
一、打地鼠 Demo 运行效果预览
在正式开始操作前,先让你对游戏运行效果有个直观了解。游戏界面会显示当前得分(score)和游戏时间(Whackmole time),比如可能出现 “score: 5 Whackmole time:5
” 的显示,同时还有 “STAR” 相关标识,简洁明了的界面让你能专注于游戏操作。
二、构建与运行:从准备到启动的完整流程
(一)准备工作
在开启所有操作前,请务必确保你已处于openvela仓库的根目录,后续所有命令都将以此为起点执行,这是保证操作顺利进行的基础。
(二)步骤 1:配置项目
我们需要借助menuconfig
工具启用 Whack-a-Mole 应用并完成相关设置,不同目标平台对应的命令有所不同:
- QEMU 模拟器:在终端输入以下命令启动
menuconfig
./build.sh vendor/openvela/boards/vela/configs/goldfish-armeabi-v7a-ap menuconfig
- ESP32-S3-BOX:输入以下命令启动
menuconfig
./build.sh nuttx/boards/xtensa/esp32s3/esp32s3-box/configs/lvgl-3 menuconfig
启动menuconfig
界面后,按/键打开搜索功能,找到并启用以下两个配置项:
LVX_USE_DEMO_WHACKMOLE=y
LVX_WHACKMOLE_DATA_ROOT="/data"
如果在运行过程中遇到界面卡顿或显示不流畅的问题,可进行可选操作:搜索lv_cache_def_size
,将其值设置为20000000,以此增加 LVGL(Light and Versatile Graphics Library)的缓存大小,改善显示效果。完成配置后,保存并退出menuconfig
。
(三)步骤 2:编译项目
为避免潜在的构建错误,编译前建议先清理旧的构建产物,然后再执行构建操作。
- 清理构建产物(distclean)
- QEMU 模拟器:
./build.sh vendor/openvela/boards/vela/configs/goldfish-armeabi-v7a-ap distclean -j8
- ESP32-S3-BOX:
./build.sh nuttx/boards/xtensa/esp32s3/esp32s3-box/configs/lvgl-3 distclean
- 执行构建
- QEMU 模拟器:
./build.sh vendor/openvela/boards/vela/configs/goldfish-armeabi-v7a-ap -j8
- ESP32-S3-BOX:
./build.sh nuttx/boards/xtensa/esp32s3/esp32s3-box/configs/lvgl-3 -j8
(四)步骤 3:部署与运行
编译成功后,就可以将固件部署到目标平台并启动应用了,同样分为两种情况:
选项 A:在 QEMU 模拟器中运行
在openvela
根目录下,执行以下命令启动模拟器:
./emulator.sh vela
耐心等待openvela终端(显示为openvela-ap>
)出现后,输入Whackmole
命令,即可启动打地鼠游戏。
选项 B:在 ESP32-S3-BOX 开发板上运行
- 烧录固件:首先确保 ESP32-S3-BOX 开发板通过 USB 连接到计算机,然后执行以下命令开始烧录。注意将
/dev/ttyACM0
替换为你的设备实际的串口端口号。
pushd nuttx && make -j8 flash ESPTOOL_PORT=/dev/ttyACM0 ESPTOOL_BINDIR=./ && popd
- 打开串口监视器:使用
minicom
或其他串口工具查看设备输出并进行交互,命令如下:
sudo minicom -D /dev/ttyACM0 -b 115200
- 启动游戏:在minicom的终端中,输入Whackmole命令,游戏就能成功启动。
三、应用定制:打造你的专属打地鼠游戏
如果你不满足于默认的游戏设置,想让游戏更具个性,可以从核心文件结构入手,进行资源图片修改和游戏难度调整。
(一)核心文件结构了解
Whackmole.c
:这是包含游戏核心逻辑的文件,所有关于游戏功能的开发和修改工作都需要在此文件中进行。Whackmole_main.c
:它是应用程序的入口,主要负责创建并启动运行游戏逻辑的任务,在一般情况下,无需对该文件进行修改。
(二)修改资源图片
游戏中的图片和字体资源会被转换为 C 数组,然后直接编译到固件中,修改步骤如下:
- 找到资源路径:资源文件存放在pic/目录下,你可以在这里找到游戏当前使用的图片和字体相关文件。
- 使用转换工具:借助 LVGL 官方在线转换器,将你自己喜欢的图片或字体文件转换为所需的 C 格式。
- 替换旧文件并重新编译:生成新的 C 文件后,将其替换到pic/目录下,覆盖旧文件,之后重新编译项目,新的资源就能在游戏中生效。
(三)调整游戏难度
游戏难度由地鼠出现的频率决定,而这个频率是通过一个定时器来控制的。在pop_random_mole函数中,游戏会根据剩余时间game_time动态调整定时器的周期,周期越短,地鼠出现速度越快,游戏难度也就越高。相关代码如下:
// Gophers appear randomly
static void pop_random_mole(lv_timer_t *timer) {
// ... (代码省略) ...
// Adjust the frequency of gophers
if (game_time < 40) {
lv_timer_set_period(timer, 800); // 周期设置为 800 毫秒
}
if (game_time < 20) {
lv_timer_set_period(timer, 600); // 周期设置为 600 毫秒
}
}
若想调整游戏难度,只需修改lv_timer_set_period
函数的第二个参数值:
- 降低难度:增大周期值,比如将
800
改为1000
毫秒,这样地鼠出现间隔变长,游戏难度降低。 - 增加难度:减小周期值,例如把
600
改为500
毫秒,地鼠出现更频繁,游戏难度随之升高。
按照以上步骤操作,你就能在 openvela 系统上顺利运行打地鼠 Demo,并根据自己的喜好对游戏进行定制。赶紧动手试试,开启你的嵌入式游戏开发之旅吧!

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐
所有评论(0)