0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用小安派 AiPi-Eyes-R2 玩植物大战僵尸

AIoT行业洞察 2024-11-06 16:10 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

以下作品由安信可社区用户

mgodmonkey制作

游戏均移植自:

【老虎爱 3D-bilibili】

目前存在的游戏:

植物大战僵尸:demos/pvz

羊了个羊:demos/yang

消消乐:demos/xiaoxiaole

华容道:demos/huarongdao

源码见:

https://github.com/MGod-monkey/AiPi-Eyes-Rx

https://gitee.com/mgod_wu/AiPi-Eyes-Rx

PVZ 功能展示可见:

羊了个羊:

消消乐:

华容道:

基于官方示例文档修改的,适用于 4 寸电容屏的小安派 R1 和 R2,R1 和 R2 的区别和修改如下:

小安派 - Eyes-R1 带外置 ES8388 音频芯片,支持两路音频输入输出。

小安派 - Eyes-R2 采用内置 CodeC,支持单路音频输入输出。

如果是编译带 8388 的开发板(AiPi-Eyes-R1)需要配置如下参数:

●修改 app_main.h #define DEF_USER_ES8388_EN (1)

●修改 proj.conf

●set(CONFIG_SOLUTION_FUNC_AUDIO_AUADC 0) ●set(CONFIG_SOLUTION_FUNC_AUDIO_AUDAC 0)

如果是编译不带 8388 的开发板(AiPi-Eyes-R2)需要配置如下参数:

●修改 app_main.h #define DEF_USER_ES8388_EN (0)

●修改 proj.conf

●set(CONFIG_SOLUTION_FUNC_AUDIO_AUADC 1) set(CONFIG_SOLUTION_FUNC_AUDIO_AUDAC 1)

01、硬件说明

硬件仅用到了:

  • 小安派 Rx
  • 4 寸 480*480 像素的电容屏
  • TTL 下载器

02、软件说明

修改 demos/lv_demos.h 即可体验不同的游戏(一次只能设置一个游戏为 1 然后编译)

#define LV_USE_GAME_PVZ 0
// #define LV_USE_GAME_2048 0
#define LV_USE_GAME_YANG 1
#define LV_USE_GAME_XIAOXIAOLE 0
#define LV_USE_GAME_HUARONGDAO 0

main.c 主程序说明如下:

lvgl 任务线程函数

static void user_task(void *pvParameters)
{
lv_task_handler();
printf("[LVGL] init success \r\n");
while (1) {
lv_task_handler();
bflb_mtimer_delay_ms(1);
}
}

●初试化 lvgl

/* lvgl init */
lv_init();
lv_port_disp_init(); //初试化显示屏
lv_port_indev_init(); //初试化触摸接口

●根据定义,设置不同的初试游戏函数(2048 等待后续移植)

#if LV_USE_GAME_PVZ
pvz_start()
#endif
#if LV_USE_GAME_2048
// 2048_start();
#endif
#if LV_USE_GAME_YANG
yang_game();
#endif
#if LV_USE_GAME_XIAOXIAOLE
xiaoxiaole();
#endif
#if LV_USE_GAME_HUARONGDAO
huarongdao();
#endif

简单解析一下 xiaoxiaole.c 的游戏初试化程序,大部分都是 lvgl 库中的知识,文档可以见 https://lvgl.100ask.net/master/index.html

void xiaoxiaole()
{
// 根据屏幕尺寸来灵活设置图片的放大倍数
// lv_disp_get_hor_res(lv_disp_get_default())获取默认显示屏的水平像素
if(lv_disp_get_hor_res(lv_disp_get_default())>=lv_disp_get_ver_res(lv_disp_get_default()))
{screen_ratio=(float)lv_disp_get_ver_res(lv_disp_get_default())/400;}
else
{
screen_ratio=(float)lv_disp_get_hor_res(lv_disp_get_default())/480;
}
// screen_ratio放大倍数
// 移除屏幕滚动条
lv_obj_clear_flag(lv_scr_act(), LV_OBJ_FLAG_SCROLLABLE);
screen1=lv_tileview_create(lv_scr_act());
lv_obj_set_style_bg_color(screen1,lv_color_hex(0x000000), LV_PART_MAIN);
lv_obj_clear_flag(screen1, LV_OBJ_FLAG_SCROLLABLE);
//背景图片(如果很卡的话,把这个背景图片删掉)
//////////////////////////////////////////////////////////////////////////////////////
bgmap=lv_img_create(screen1);
lv_img_set_src(bgmap, &xiaoxiaole_bg_img);
lv_img_set_pivot(bgmap,0,0);
lv_img_set_zoom(bgmap,256*1.5*1.2);
lv_obj_clear_flag(bgmap, LV_OBJ_FLAG_SCROLLABLE);
///////////////////////////////////////////////////////////////////////////////////
//注册消消乐滑块窗口的地方
game_window=lv_tileview_create(screen1);
lv_obj_set_style_bg_color(game_window,lv_color_hex(0x000000), LV_PART_MAIN);
lv_obj_set_style_bg_opa(game_window,200, LV_PART_MAIN);
lv_obj_clear_flag(game_window, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_style_outline_width(game_window, 6, LV_PART_MAIN);
lv_obj_set_style_outline_color(game_window, lv_color_hex(0xbb7700), LV_PART_MAIN);
lv_obj_center(game_window);
lv_obj_set_size(game_window,280*screen_ratio,280*screen_ratio);
// 定义刷新按钮
refs_btn=lv_img_create(screen1);
lv_img_set_src(refs_btn, &refs_btn_img);
// lv_obj_set_align(refs_btn,LV_ALIGN_RIGHT_MID);
lv_obj_align(refs_btn,LV_ALIGN_RIGHT_MID,8,0);
lv_obj_add_flag(refs_btn, LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(refs_btn,map_refs,LV_EVENT_CLICKED,0);
lv_img_set_zoom(refs_btn, 150);
// 定义退出按钮(退出按钮的事件函数还没有用到)
exit_btn=lv_img_create(screen1);
lv_img_set_src(exit_btn, &exit_img);
lv_obj_align(exit_btn,LV_ALIGN_TOP_RIGHT,10,-20);
// lv_obj_set_align(exit_btn,LV_ALIGN_TOP_RIGHT);
lv_obj_add_flag(exit_btn, LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(exit_btn,exit_game_cb,LV_EVENT_CLICKED,0);
lv_img_set_zoom(exit_btn, 130);
// 定义硬币图片
coin=lv_img_create(screen1);
lv_img_set_src(coin, &coin_img);
lv_img_set_zoom(coin, 130);
lv_obj_align(coin,LV_ALIGN_TOP_LEFT,10,-20);
// 定义得分
score=0;
score_lable=lv_label_create(screen1);
lv_label_set_text_fmt(score_lable,"SCORE:%d",score);
lv_obj_set_style_text_font(score_lable,&lv_font_montserrat_20,0);
lv_obj_set_y(score_lable,40);
lv_obj_set_style_text_color(score_lable, lv_color_hex(0x00aaff), LV_PART_MAIN);
game_init();
}
static void game_init()
{
int i, j;
lv_obj_refr_size(game_window);
// 生成一个8*8的不同颜色的方块
for(j=0;j< 8;j++)
{
for(i=0;i< 8;i++)
{
game_obj[j][i].x=i;
game_obj[j][i].y=j;
game_obj[j][i].alive=1;
game_obj[j][i].color_index=rand()%7;
game_obj[j][i].obj=lv_btn_create(game_window);
lv_obj_set_pos(game_obj[j][i].obj,i*35*screen_ratio+1,j*35*screen_ratio+1);
lv_obj_set_size(game_obj[j][i].obj,35*screen_ratio-2,35*screen_ratio-2);
lv_obj_set_style_bg_color(game_obj[j][i].obj,lv_color_hex(color_lib[game_obj[j][i].color_index]),0);
game_obj[j][i].obj- >user_data=&game_obj[j][i];
lv_obj_add_event_cb(game_obj[j][i].obj,move_obj_cb,LV_EVENT_PRESSING,0);
lv_obj_add_event_cb(game_obj[j][i].obj,move_obj_cb,LV_EVENT_RELEASED,0);
}
}

// 每次方块填满都会进行检测,是否有可以消除的方块

if(map_is_full()&&same_color_check()){same_color_flash();lv_obj_clear_flag(refs_btn, LV_OBJ_FLAG_CLICKABLE);}

}

03、编译烧录

环境搭建安装参考:小安派 R2 初体验 - 开箱 + 环境搭建 + 编译烧录

编译:make BL_SDK_BASE=E:/Aithinker_Ai/AiPi-Open-Kits/aithinker_Ai-M6X_SDK,BL_SDK_BASE 后面为自己的 aithinker_Ai-M6X_SDK 文件夹存储地址

烧录:

make flash COMX=

COM5 BL_SDK_BASE=

E:/Aithinker_Ai/AiPi-Open-Kits/aithinker_Ai-M6X_SDK

注:目前连接显示屏烧录的时候经常会失败,原因是 TTL 下载器供电不稳,因此有以下两种解决方式:

  • 不连接显示屏烧录
  • 连接显示屏,但需要连接 TYPE-C 供电,然后用 TTL 下载器烧录

后续,笔者也会尝试移植更多的游戏,并试试看看能不能把背景音乐也添加上,可以关注原贴:【DIY电子作品】基于小安派AiPi-Eyes-R2的N合1触摸屏游戏https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=45318&extra=page%3D1&_dsign=82a1e54b

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源硬件
    +关注

    关注

    8

    文章

    228

    浏览量

    31151
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    小安立式桌摆外壳设计制作

    小安-Eyes-R2,但是一直没什么时间好好的研究一下。近期学习了一下相关例程,感觉的很难受,大概是因为屏幕排线比较短且板子和屏幕不好固定,以及烧录两个按键必须要俩手按,于是考虑
    的头像 发表于 09-09 17:20 611次阅读
    <b class='flag-5'>小安</b><b class='flag-5'>派</b>立式桌摆外壳设计制作

    【开源硬件】小安AiPi-Eyes-R2详细测评+DIY天气时钟

    以下作品由安信可社区用户 小浪先生 制作 产品开箱 首先谢谢安信可官方送的开发板,安信可AiPi-Eyes-R2包含清单如下: AiPi-Eyes-R2开发板   腔体喇叭-2pin间距1.25mm
    的头像 发表于 08-12 16:23 617次阅读
    【开源硬件】<b class='flag-5'>小安</b><b class='flag-5'>派</b><b class='flag-5'>AiPi-Eyes-R2</b>详细测评+DIY天气时钟

    小智AI正式授权!安信可小安语音AI开发板更新啦

    语音交互开发板,专为轻量级智能语音场景设计。 AiPi-PalChatV1 基于安信可 Ai-WB2-12F 模组主控,具备高集成度、高性价比等特性,支持离线语音唤醒与语音打断功能。 此款开发板
    的头像 发表于 07-15 15:06 647次阅读
    小智AI正式授权!安信可<b class='flag-5'>小安</b><b class='flag-5'>派</b>语音AI开发板更新啦

    上手体验安信可小安AI开发板,如何接入Home Assistant?

    以下作品由安信可社区用户 无垠的广袤 制作 感谢安信可社区的支持,免费领到了安信可的最新产品 小安AI - AiPi-PalChatV1 语音开发板。 原贴地址: 【AiPi-PalChatV1语音
    的头像 发表于 07-08 10:34 4161次阅读
    上手体验安信可<b class='flag-5'>小安</b><b class='flag-5'>派</b>AI开发板,如何接入Home Assistant?

    树莓自动灌溉系统:植物的智能保姆!

    树莓自动灌溉系统让植物在你长期缺席时仍生机盎然RedditorPeppeatta建立了一个自动灌溉系统,以确保他们珍贵的辣椒在他们不在的时候活着。即使在理想的条件下,保持植物存活也是困难的。与宠物
    的头像 发表于 05-27 15:35 437次阅读
    树莓<b class='flag-5'>派</b>自动灌溉系统:<b class='flag-5'>植物</b>的智能保姆!

    功德+1,小安-Eyes-S1做一个电子木鱼

    2024积德累功,心想事成!接下来看看如何用小安-Eyes-S1做一个电子木鱼。01GUI-Guider页面设计先新建一个工程。直接进入UI设计界面,这里用到了两个
    的头像 发表于 04-09 18:38 808次阅读
    功德+1,<b class='flag-5'>用</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes</b>-S1做一个电子木鱼

    洗脑了!基于小安的“萝莉摇”可爱摆件

    小安摆件 由安信可社区用户(ID:feilong)制作 前言 不知道有多少人和笔者一样,被一首“萝莉摇”洗脑过?打开短视频总会看到这首BGM和MV的二创。 于是笔者萌生了制作一个相关摆件的想法
    的头像 发表于 02-19 14:23 717次阅读
    洗脑了!基于<b class='flag-5'>小安</b><b class='flag-5'>派</b>的“萝莉摇”可爱摆件

    基于小安的可爱摆件

    小安摆件   前言 不知道有多少人和笔者一样,被一首“萝莉摇”洗脑过?打开短视频总会看到这首BGM和MV的二创。   于是笔者萌生了制作一个相关摆件的想法,这些就用小安派来做个“萝莉摇”摆件,让
    的头像 发表于 02-18 14:57 606次阅读
    基于<b class='flag-5'>小安</b><b class='flag-5'>派</b>的可爱摆件

    零基础开发小安-Eyes-S1 进阶篇 ——通过屏幕输入连接 Wi-Fi

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP摄像头接口,外置ES8388音频编解码芯片以及预留TF卡座,并且引出USB接口,可接入USB摄像头。 从零开始学习小安: 1、零基础开发
    的头像 发表于 01-16 09:47 785次阅读
    零基础开发<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes</b>-S1 进阶篇 ——通过屏幕输入连接 Wi-Fi

    零基础开发AiPi-Eyes-S1——通过屏幕输入连接Wi-Fi

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP摄像头接口,外置ES8388音频编解码芯片以及预留TF卡座,并且引出USB接口,可接入USB摄像头。 从零开始学习小安: 1、零基础开发
    的头像 发表于 01-15 09:27 1019次阅读
    零基础开发<b class='flag-5'>AiPi-Eyes</b>-S1——通过屏幕输入连接Wi-Fi

    小安 DSL做一个天气站

    前言 小安-DSL(AiPi-DSL) 是安信可开源团队专门为Ai-M61-32S设计的一款屏幕驱动开发板,支持2.8/3.5寸等30Pin SPI显示屏、2.4寸及1.28寸等18Pin SPI
    的头像 发表于 01-06 16:44 893次阅读
    <b class='flag-5'>用</b><b class='flag-5'>小安</b><b class='flag-5'>派</b> DSL做一个天气站

    零基础开发小安-Eyes-S1【进阶篇】——初识 LVGL 并搭建最小工程

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP摄像头接口,外置ES8388音频编解码芯片以及预留TF卡座,并且引出USB接口,可接入USB摄像头。 从零开始学习小安: 1、零基础开发
    的头像 发表于 01-06 16:14 1362次阅读
    零基础开发<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes</b>-S1【进阶篇】——初识 LVGL 并搭建最小工程

    零基础开发小安-Eyes-S1——初识LVGL并搭建最小工程

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP摄像头接口,外置ES8388音频编解码芯片以及预留TF卡座,并且引出USB接口,可接入USB摄像头。 从零开始学习小安: 1、零基础开发
    的头像 发表于 01-03 14:09 1367次阅读

    使用小安DSL制作天气站

    小安 DSL做天气站 用户分享DIY   前言 小安-DSL(AiPi-DSL) 是安信可
    的头像 发表于 01-03 11:18 865次阅读
    使用<b class='flag-5'>小安</b><b class='flag-5'>派</b>DSL制作天气站

    零基础开发小安-Eyes-S1 外设篇——DAC

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP摄像头接口,外置ES8388音频编解码芯片以及预留TF卡座,并且引出USB接口,可接入USB摄像头。 从零开始学习小安: 1、零基础开发
    的头像 发表于 12-27 10:55 1623次阅读
    零基础开发<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes</b>-S1 外设篇——DAC