基于小安派AiPi-Eyes-Rx的N合1触摸屏游戏

news2024/9/25 10:41:56

基于小安派AiPi-Eyes-Rx的N合1触摸屏游戏

目前存在的游戏:

  • 植物大战僵尸:demos/pvz
  • 羊了个羊:demos/yang
  • 消消乐:demos/xiaoxiaole
  • 华容道:demos/huarongdao

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)

1.硬件说明

硬件仅用到了:

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

在这里插入图片描述

2.软件说明

修改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);}	
}

3. 编译烧录

环境搭建安装参考:小安派 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下载器烧录

这不得不吐槽一下,我看电路板还有挺大的空间的,为啥不将下载模块设计在上面呢?到时一根Typec连接电脑就能烧录了,难道是为了推广专用下载器吗,,,

4.后续计划

  • 移植更多的游戏

  • 看看能不能把背景音乐也添加上

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2163322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在多态的方法调用中为什么会出现“左边编译左边运行”的现象?多态创建的对象到底是谁属于父类还是子类?通过深扒集合remove方法调用理解其原理

目录 “左边编译左边运行”的两个原因&#xff1a; 什么是“编译看左边&#xff0c;运行看右边”&#xff1f; 为什么会出现“左边编译左边运行”现象&#xff1f; 1. 子类没有重写父类的方法 2. 重载与重写的混淆&#xff08;重难点&#xff09; 问题&#xff1a;编译器是…

JAVA开源项目 体育馆管理系统 计算机毕业设计

本文项目编号 T 048 &#xff0c;文末自助获取源码 \color{red}{T048&#xff0c;文末自助获取源码} T048&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

每日论文1——应用于65nm CMOS锁相环完全电流匹配的电荷泵

《A Charge Pump with Perfect Current Matching Applied to Phase-Locked Loop in 65nm CMOS》2021 IEEE 14th International Conference on ASIC 电荷泵PLL的结构框图如图&#xff0c;其中CP的充放电电流不匹配会引起PLL的频率误差和杂散。 传统的电荷泵结构在输出处的电平…

强烈推荐的10款企业文件加密软件|2024企业办公文件加密

随着信息安全威胁的不断增加&#xff0c;企业文件加密成为保护敏感数据的重要手段。在2024年&#xff0c;有多款文件加密软件可供选择&#xff0c;帮助企业提高数据安全性。以下是十款强烈推荐的企业文件加密软件。 1.安秉加密软件 安秉加密软件专为企业设计&#xff0c;主要用…

【Web】初识Web和Tomcat服务器

目录 前言 一、认识web 1. 软件架构模式 2. web资源 3. URL请求路径&#xff08;统一资源定位符&#xff09; 二、Tomcat服务器 1. 简介 2. tomcat服务器的目录结构 3.使用tomcat服务器启动失败的常见原因 3.1 端口冲突 3.2 jdk环境变量配置出错 三、使用Tomcat发布…

OpenSSH9.7升级至OpenSSH9.9(openssh7以后所有版本升级均可使用该方法)

1、查看当前openssh版本&#xff0c;使用命令ssh -V 2、开启当前主机的telnet和ftp service xinetd start #开启telnetservice vsftpd start #开启ftp 3、下载openssh最新版 下载地址: OPENSSH下载地址https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/ 4、开始安…

【Redis入门到精通五】Java如何像使用MySQL一样使用Redis(jedis安装及使用)

目录 Jedis 1.jedis是什么 2.jedis的安装配置 3.jedis的基础命令操作展示 1.set和get操作&#xff1a; 2.exists和del操作&#xff1a; 3.keys和type操作&#xff1a; 4. expire和ttl&#xff1a; Jedis Java 操作 redis 的客⼾端有很多&#xff0c;其中最知名的是 jedi…

大模型备案和互联网算法备案的区别?

最近&#xff0c;接到很多客户的电话咨询大模型备案和互联网算法备案&#xff0c;好多人搞不清楚这两个有什么关系&#xff1f;有什么区别&#xff1f;我们先来看下全国大模型备案和互联网算法备案通过的情况是怎么样的&#xff1f; 截至写稿之时&#xff0c;全国通过大模型备…

2024最新最全【Qubes Linux系统安装下载】零基础入门到精通!

Qubes Linux的安装和设置过程非常简单。它也是一个以安全为中心的桌面操作系统&#xff0c;旨在通过隔离提供安全性&#xff0c;这对于系统管理员、记者和有道德的黑客来说是一个很好的卖点。 Qubes是一个使用Xen的 Linux 发行版&#xff0c;这是一种虚拟化技术&#xff0c;它…

卫星图片地面目标识别检测数据集 1500张 yolo数据集 已增强

卫星图像地面目标识别数据集&#xff08;Satellite Image Ground Target Recognition Dataset, SIGTRD&#xff09; 摘要 SIGTRD 是一个专门为卫星图像中的地面目标识别而设计的数据集&#xff0c;它包含了一系列常见的基础设施和交通工具类型。该数据集提供了1500张卫星图像…

基于单片机的指纹打卡系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52RC&#xff0c;采用两个按键替代指纹&#xff0c;一个按键按下&#xff0c;LCD12864显示比对成功&#xff0c;则 采用ULN2003驱动步进电机转动&#xff0c;表示开门&#xff0c;另一个…

电脑桌面归纳小窗口如何设置?电脑桌面一键整理工具分享!

电脑桌面归纳小窗口如何设置&#xff1f;日常使用电脑的过程中&#xff0c;随着文件、应用程序的不断增加&#xff0c;桌面往往会变得杂乱无章&#xff0c;这不仅影响了美观&#xff0c;也降低了工作效率。幸运的是&#xff0c;现代技术为我们提供了多种桌面整理工具&#xff0…

【QA-MISRA】解决使用命令行扫描项目后看不到报告的问题

1、 文档目标 解决使用命令行扫描项目后看不到报告的问题 2、 问题场景 客户使用命令行扫描项目后看不到报告&#xff0c;原因是客户未设置和勾选报告格式就导出了DAX文件进行命令行直接扫描。 3、软硬件环境 1、软件版本&#xff1a; QA-MISRA23.04 2、机器环境&#xff1…

李宏毅2023机器学习作业HW07解析和代码分享

ML2023Spring - HW7 相关信息&#xff1a; 课程主页 课程视频 Kaggle link 回来了 : ) Sample code HW07 视频 HW07 PDF 个人完整代码分享: GitHub | Gitee | GitCode P.S. HW7 的代码都很易懂&#xff0c;可以和 2024 年的新课&#xff1a;生成式AI导论做一个很好的衔接&#…

开源 AI 智能名片与 S2B2C 商城小程序:嫁接权威实现信任与增长

摘要&#xff1a;本文探讨了嫁接权威在产品营销中的重要性&#xff0c;并结合开源 AI 智能名片与 S2B2C 商城小程序&#xff0c;阐述了如何通过与权威关联来建立客户信任&#xff0c;提升产品竞争力。强调了在当今商业环境中&#xff0c;巧妙运用嫁接权威的方法&#xff0c;能够…

一款前后端分离设计的企业级快速开发平台,支持单体服务与微服务之间灵活切换(附源码)

前言 当前软件开发面临诸多挑战&#xff0c;诸如开发效率低下、重复工作多、维护成-本高等问题&#xff0c;这些问题在一定程度上阻碍了项目的进展。针对这些痛点&#xff0c;我们迫切需要一款既能提升开发效率又能降低维护成-本的处理方案。由此&#xff0c;一款基于前后端分…

HDMI20协议解析_Audio_Clock_Regeneration

HDMI20协议解析_Audio_Clock_Regeneration 1.版本说明 日期作者版本说明20240918风释雪初始版本 2.概述 当通过HDMI传输音频信号时&#xff0c;Audio Clock Regeneration&#xff08;ACR&#xff09;是必须要传输的数据包之一&#xff1b; HDMI传输过程中&#xff0c;音频采样…

数学建模-线性规划讲解(Matlab版本)

引言 相信不少小伙伴刚开始接触数学建模时&#xff0c;第一个学习的算法就是运筹学的重要分支--数学规划&#xff0c;而数学规划当中重要的分支就是线性规划了。在这里笔者参考了司守奎和孙玺菁老师的《数学建模算法与应用》(第三版&#xff09;这本书&#xff0c;以此来讲讲关…

同等学力申硕英语多少分及格

同等学力申硕全国统考与往年的分数线一样&#xff0c;英语、学科综合均为60分合格通过制&#xff0c;满分均100分。 单科分数未达到及格线的考生&#xff0c;次年5月可以参加单科的补考 同等学力申硕的意义和作用 授予同等学力人员硕士学位是国家为同等学力人员开辟的获得学位…

前端——阿里图标的使用

阿里图标 将小图标定义成字体&#xff0c;通过引入字体的方式来展示这些图标 1.打开阿里图标库 https://www.iconfont.cn/ 2.登录 / 注册一个账号 3.选中你需要使用的图标 并且把它加入购物车 4.全部选择完之后 点击右上角 购物车 然后下载代码 5.解压后你下载的文…