当前位置: 首页 > news >正文

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

基于小安派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_PVZpvz_start()
#endif#if LV_USE_GAME_2048// 2048_start();
#endif#if LV_USE_GAME_YANGyang_game();
#endif#if LV_USE_GAME_XIAOXIAOLExiaoxiaole();
#endif#if LV_USE_GAME_HUARONGDAOhuarongdao();
#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

相关文章:

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

基于小安派AiPi-Eyes-Rx的N合1触摸屏游戏 目前存在的游戏&#xff1a; 植物大战僵尸&#xff1a;demos/pvz羊了个羊&#xff1a;demos/yang消消乐&#xff1a;demos/xiaoxiaole华容道&#xff1a;demos/huarongdao PVZ功能展示可见&#xff1a; 羊了个羊&#xff1a; 消消…...

Java List sort() 排序

sort是java.util.List接口的默认方法。 List的排序方法在Java 8中被引入。 排序方法接受比较器作为参数&#xff0c;并根据指定的比较器对这个列表进行排序。 default void sort(Comparator<? super E> c) 示例代码&#xff1a; import java.text.Collator; import …...

Vue.js 与 Flask 或 Django 后端配合

Vue.js 与 Flask 或 Django 后端配合是一种常见的全栈开发方式&#xff0c;用于构建动态且响应迅速的 Web 应用程序。Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架&#xff0c;而 Flask 和 Django 是 Python 语言的两个非常流行的 Web 框架。下面将分别介绍 Vue.js …...

抽奖拼团卷轴模式系统开发小程序源代码解析

在当今的互联网商业环境中&#xff0c;抽奖、拼团与卷轴模式等创新玩法被广泛应用于小程序开发中&#xff0c;旨在通过多样化的互动方式吸引用户参与&#xff0c;提升用户粘性和平台活跃度。本文将围绕“抽奖拼团卷轴模式系统开发小程序源代码”这一主题&#xff0c;探讨其技术…...

MySql语言操作数据库---增删改查数据库,表,数据

思维导图 SQL语言共分为四大类&#xff1a; 数据定义语言DDL:数据定义语言DDL用来创建数据库中的各种对象-----[库]、[表]、[视图]、[索引]、 数据操纵语言DML:(1) 插入&#xff1a;INSERT (2) 更新&#xff1a;UPDATE (3) 删除&#xff1a;DELETE 数据查询语言DQL:数据查询语…...

C++深入学习string类成员函数(2):容器管理

引言 C 标准库中的容器&#xff08;如 std::string、std::vector、std::list 等&#xff09;都提供了一系列容器管理成员函数&#xff0c;用于处理容器的大小、容量、清空等操作。容器管理成员函数可以分为几类&#xff0c;主要包括容量查询、修改容器大小、清空容器等操作。 …...

MariaDB 和 MySQL 全面对比:选择数据库需要考虑这几点

谁在使用 MySQL 和 MariaDB&#xff1f; MySQL 和 MariaDB 都发布了各自的用户名单。 使用 MySQL 的有 Facebook、Github、YouTube、Twitter、PayPal、诺基亚、Spotify、Netflix 等。 使用 MariaDB 的有 Redhat、DBS、Suse、Ubuntu、1&#xff06;1、Ingenico 等。 功能比较…...

Python 实现图形学几何变换算法

目录 Python 实现图形学几何变换算法几何变换介绍变换矩阵Python 实现几何变换代码解释总结 Python 实现图形学几何变换算法 在计算机图形学中&#xff0c;几何变换是非常重要的概念。它们允许我们对对象的位置、大小、方向进行操作&#xff0c;比如平移、缩放、旋转、反射等。…...

接口测试|超详细面试题【附答案】

今天给姐妹们整理了一套超详细的附答案的接口测试面试题&#xff0c;姐妹们快学起来吧~ 接口测试的重要性&#xff0c;相信不用我多说了。接口测试是现在软件测试工程师一个加分项。因为很多朋友一开始做了几年的软件测试都是在做功能测试&#xff0c;做界面UI的测试&#xff…...

Qt网络编程——QTcpServer和QTcpSocket

文章目录 核心APITCP回显服务器TCP回显客户端 核心API QTcpServer用于监听端口和获取客户端连接 名称类型说明对标原生APIlisten(const QHostAddress&, quint16 port)方法绑定指定的地址和端口号&#xff0c;并开始监听bind和listennextPendingConnection()方法从系统中获…...

CentOS 7 aarch64制作openssh 9.9p1 rpm包 —— 筑梦之路

本篇文章还是基于开源项目openssh-rpms制作。 https://github.com/boypt/openssh-rpms.git 官方发行说明&#xff1a; OpenSSH: Release Notes 1. 修改version.env 2. 下载源码包 openssl网站改版&#xff0c;下载地址和之前不一样了 # 下载openssl1.1.1w源码包cd downlo…...

Flink和Spark的区别

1、设计理念不同 flink&#xff1a;Flink是基于事件驱动的&#xff0c;是面向流的处理框架, Flink基于每个事件一行一行地流式处理&#xff0c;是真正的流式计算. 另外他也可以基于流来模拟批进行计算实现批处理。 spark&#xff1a;Spark的技术理念是使用微批来模拟流的计算,…...

以太网开发基础-MAC和PHY

直接参考&#xff1a; 以太网基础-MAC和PHY-CSDN博客 路由器上一般有三类MAC地址 给一个范例: 00:0C:E5:4B:F2:85 这个地址就可以作为LAN MAC地址 00:0C:E5:4B:F2:86 这个地址就可以作为WAN MAC地址 00:0C:E5:4B:F2:87 这个地址就可以作为无线 MAC地址 通常&#xff0c;路由器…...

Java 发布jar包到maven中央仓库(2024年9月保姆级教程)

文章目录 前言一、账号准备1. 注册登录账号2. 新建命名空间3. 验证命名空间4. 生成令牌5. 为 maven 设置令牌二、GPG准备1. 下载GPG2. 发布证书2.1 新建证书2.2 发布证书到服务器2.3 验证发布三、发布jar包到中央仓库1. 编辑项目pom文件2. 打包上传3. 发布jar包4. 搜索我们的ja…...

Pandas和Seaborn可视化详解

1.Pandas绘图-单变量 概述 pandas库是Python数据分析的核心库 它不仅可以加载和转换数据&#xff0c;还可以做更多的事情&#xff1a;它还可以可视化 pandas绘图API简单易用&#xff0c;是pandas流行的重要原因之一 可视化小技巧: 如果是类别型 柱状 饼图 (类别相对较少 5-…...

【Python】Windows下安装使用FFmpeg

FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。之前为了MP3转wav&#xff0c;需要pip安装并import AudioSegment&#xff0c;但是会报错&#xff1a;FileNotFoundError: [WinError 2] 系统找不到指定的文件。 因为FFmpeg需要另…...

LLM - 使用 XTuner 指令微调 多模态大语言模型(InternVL2) 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142528967 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 XTuner…...

【Python】数据可视化之热力图

热力图&#xff08;Heatmap&#xff09;是一种通过颜色深浅来展示数据分布、密度和强度等信息的可视化图表。它通过对色块着色来反映数据特征&#xff0c;使用户能够直观地理解数据模式&#xff0c;发现规律&#xff0c;并作出决策。 目录 基本原理 sns.heatmap 代码实现 基…...

个人博客系统测试(selenium)

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …...

【速成Redis】01 Redis简介及windows上如何安装redis

前言&#xff1a; 适用于&#xff1a;需要快速掌握redis技能的人&#xff08;比如我&#xff09;&#xff0c;在b站&#xff0c;找了个课看。 01.课程简介_哔哩哔哩_bilibili01.课程简介是【GeekHour】一小时Redis教程的第1集视频&#xff0c;该合集共计19集&#xff0c;视频…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

GraphRAG优化新思路-开源的ROGRAG框架

目前的如微软开源的GraphRAG的工作流程都较为复杂&#xff0c;难以孤立地评估各个组件的贡献&#xff0c;传统的检索方法在处理复杂推理任务时可能不够有效&#xff0c;特别是在需要理解实体间关系或多跳知识的情况下。先说结论&#xff0c;看完后感觉这个框架性能上不会比Grap…...

深度解析:etcd 在 Milvus 向量数据库中的关键作用

目录 &#x1f680; 深度解析&#xff1a;etcd 在 Milvus 向量数据库中的关键作用 &#x1f4a1; 什么是 etcd&#xff1f; &#x1f9e0; Milvus 架构简介 &#x1f4e6; etcd 在 Milvus 中的核心作用 &#x1f527; 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...

Heygem50系显卡合成的视频声音杂音模糊解决方案

如果你在使用50系显卡有杂音的情况&#xff0c;可能还是官方适配问题&#xff0c;可以使用以下方案进行解决&#xff1a; 方案一&#xff1a;剪映替换音色&#xff08;简单适合普通玩家&#xff09; 使用剪映换音色即可&#xff0c;口型还是对上的&#xff0c;没有剪映vip的&…...