如果你是嵌入式开发爱好者,想在 openvela 系统上体验有趣的打地鼠游戏,或者尝试对游戏进行个性化定制,那么这篇文章将为你提供详细的操作指南。我们将一步步带你完成打地鼠 Demo 在 QEMU 模拟器和 ESP32-S3-BOX 开发板上的构建、部署、运行,还会教你如何修改游戏资源和调整难度,让你轻松上手并玩转这个 Demo。

一、打地鼠 Demo 运行效果预览

在正式开始操作前,先让你对游戏运行效果有个直观了解。游戏界面会显示当前得分(score)和游戏时间(Whackmole time),比如可能出现 “score: 5 Whackmole time:5” 的显示,同时还有 “STAR” 相关标识,简洁明了的界面让你能专注于游戏操作。

在这里插入图片描述

二、构建与运行:从准备到启动的完整流程

(一)准备工作

在开启所有操作前,请务必确保你已处于openvela仓库的根目录,后续所有命令都将以此为起点执行,这是保证操作顺利进行的基础。

(二)步骤 1:配置项目

我们需要借助menuconfig工具启用 Whack-a-Mole 应用并完成相关设置,不同目标平台对应的命令有所不同:

  1. QEMU 模拟器:在终端输入以下命令启动menuconfig
./build.sh vendor/openvela/boards/vela/configs/goldfish-armeabi-v7a-ap menuconfig
  1. 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:编译项目

为避免潜在的构建错误,编译前建议先清理旧的构建产物,然后再执行构建操作。

  1. 清理构建产物(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
  1. 执行构建
    • 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 开发板上运行

  1. 烧录固件:首先确保 ESP32-S3-BOX 开发板通过 USB 连接到计算机,然后执行以下命令开始烧录。注意将/dev/ttyACM0替换为你的设备实际的串口端口号。
pushd nuttx && make -j8 flash ESPTOOL_PORT=/dev/ttyACM0 ESPTOOL_BINDIR=./ && popd
  1. 打开串口监视器:使用minicom或其他串口工具查看设备输出并进行交互,命令如下:
sudo minicom -D /dev/ttyACM0 -b 115200
  1. 启动游戏:在minicom的终端中,输入Whackmole命令,游戏就能成功启动。

三、应用定制:打造你的专属打地鼠游戏

如果你不满足于默认的游戏设置,想让游戏更具个性,可以从核心文件结构入手,进行资源图片修改和游戏难度调整。

(一)核心文件结构了解

  • Whackmole.c:这是包含游戏核心逻辑的文件,所有关于游戏功能的开发和修改工作都需要在此文件中进行。
  • Whackmole_main.c:它是应用程序的入口,主要负责创建并启动运行游戏逻辑的任务,在一般情况下,无需对该文件进行修改。

(二)修改资源图片

游戏中的图片和字体资源会被转换为 C 数组,然后直接编译到固件中,修改步骤如下:

  1. 找到资源路径:资源文件存放在pic/目录下,你可以在这里找到游戏当前使用的图片和字体相关文件。
  2. 使用转换工具:借助 LVGL 官方在线转换器,将你自己喜欢的图片或字体文件转换为所需的 C 格式。
  3. 替换旧文件并重新编译:生成新的 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,并根据自己的喜好对游戏进行定制。赶紧动手试试,开启你的嵌入式游戏开发之旅吧!

Logo

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

更多推荐