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

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

3天内不再提示

Kitronik ARCADE游戏手柄实现连连看

电子森林 来源:硬禾学堂 作者:硬禾学堂 2021-09-08 11:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

连连看相信大家都玩过,但这个用Kitronik AR CADE游戏手柄来玩连连看的项目你相信是一个高一学生做的吗?没错,这位来自重庆一所中学的高一学生经过他哥哥的推荐来参加我们的Funpack10期活动,并且他和他哥哥一人设计了一个游戏,属于自己的小游戏。下面就来看看连连看这款小游戏如何设计的吧。

项目链接:https://www.eetree.cn/project/detail/474 ,代码已开源在电子森林。

实现功能

本次FunPack活动可大致分为两个任务

移植或者设计一款游戏

设计一款摩斯密码练习器

在确定参加这期活动之后一直在纠结是按键游戏还是设计摩斯密码练习器,如果按键游戏又在游戏主题上摇摆不定,摩斯密码练习器又感觉是一个很麻烦的任务。恰巧在网络上乱翻时看到了连连看的算法思路,就选定了在Kitronik ARCADE上实现一款连连看游戏。

实现思路及代码介绍

连连看是一种很受大家欢迎的小游戏。下面四张图给出了最基本的消除规则:

f0fceb7e-0fe6-11ec-8fb8-12bb97331649.png

图 A 中出现在同一直线上无障碍的圈圈可以消除;图 B 中两个圈圈可以通过一次转弯消除;图 C 和图 D 中,两个圈圈可以通过两次转弯消除。

由于Kitronik ARCADE的屏幕一次只能完整显示10*7个图块,所以将地图设计为10*7大小。在游戏中使用数组的方式表示地图信息,使用不同的值表示不同的图块,0表示此位置为空,作为一个平面游戏,使用二维数组来保存地图信息最好理解,但由于makecode中函数接口只提供了一维数组。所以只能使用一维数组表示二维信息。创建一个大小为70的一维数组,对于数组中的数据,索引值index/10就是图块行Y的值,index%10即为图块列X的值。

图形显示以及选择实现

对于连连看这款游戏,大家多多少少都知道怎么玩,所以这里不介绍玩法。

一、地图创建以及显示

连连看游戏由不同的图块组成,上面介绍到地图信息确定为大小70的一维数组表示,且不同X、Y坐标位置的数值索引值都已经确定,则这里就会想到通过不同的值表示不同的图块,在游戏中一共使用了7个不同的图块,需要在设置图块地图时添加进入。

1、地图的创建

通过函数InitLevelOneImage,InitLeveTwoImage。。。初始化数组的方式初始化不同关卡地图信息。

2、地图的显示

遍历地图数组

通过索引位置确定图块位置信息

通过数组值将不同的图块放到确定的位置上

二、选择框的移动、消除、更新

1、选择框的创建

创建一个SelectBox对象用于表示选择框,将选择框与左上角第一个图块重叠(图块的大小为16*16,然后地图行列的间隔都是16,所以(8,8)为第一个图块位置)

2、选择框的移动

1)上

判断SelectBox对象是否在第一行(posY = 8),若在第一行则将图块移动到最后一行(第7行,posY = 104),若不在最上一行则直接往上移动一行(将posY减16)

2)下

与向上移动同理,判断SelectBox对象是否在最后一行(第七行,posY = 104),若在最后一行则将图块移动到第一行(posY = 8),若不在第七行则直接往下移动一行(将posY加16)

3)左

判断SelectBox对象是否在第一列(posX= 8),若在第一列则将图块移动到最右一列(第10列,posX = 152),若不在第一列则直接往左移动一列(将posX减16)

4)右

与左移同理,判断SelectBox对象是否在最后一列(第10列,posX= 152),若在最后一列则将图块移动到第一列(posX = 8),若不在最后一列则直接右移一列(将posX加16)

三、选定、取消、消除条件、消除完成判断、关卡更新

游戏中通过A按键选定图块,与选择框类似,只需要A按下时若当前位置不为空,且不为Choice精灵,则在当前选择框的位置创建Choice精灵即可,由于需要选择两个图块,所以A键按下时需要判断是否已经存在了一个Choice精灵(创建ChoiceBoxNums变量表示Choice精灵的数量),若存在则创建第二个Choice精灵,同时运行函数判断是否能被消除。

A按下(选定)

1)判断是否为空

2)若不为空且ChoiceBoxNums == 0时在当前位置创建ChoiceOne精灵,ChoiceBoxNums置1

3)若不为空且ChoiceBoxNums == 1且当前位置不为ChoiceOne位置,则创建ChoiceTwo精灵

消除条件

当ChoiceBoxNums == 2时,表示已经选定了两个图块,此时调用消除函数进行判断与消除。

消除完成判断及关卡更新

当地图数组全为0时表示消除完成,在每次进行判断消除之后进行一次判断是否消除完成,使用遍历数组然后相加的求和的方式得到和,若为0,则表示消除完。若消除完则根据关卡信息决定是进入下一关还是结束游戏。

地图初始化(关卡更新)

更新关卡只需要修改地图数组,然后更改一些特定的值即可完成新地图的载入,Levels表示当前关卡

消除算法

算法参考链接:https://blog.csdn.net/qq_41551359/article/details/82983513,并进行了简单的移植和更改。

设计函数isBlocked 表示x,y位置是否有图块(有无障碍),实现思路为查找数组Y*10+X索引处的值是否为0,若为0则表示此处为空,否则有障碍。

1、水平检测

水平检测用来判断两个点的纵坐标是否相等,同时判断两点间有没有障碍物。

定义函数horizon直接检测两点间是否有障碍物。

先判断A、B是否为同一个点

判断是否为水平关系

确定前后关系

使用循环遍历A、B中间的位格,若有一个为有图块则不能水平消除

2、垂直检测

垂直检测用来判断两个点的横坐标是否相等,同时判断两点间有没有障碍物。

与水平检测原理一致,定义函数vertical直接检测两点之间是否有障碍物

先判断A、B是否为同一个点

判断是否为垂直关系

确定上下关系

使用循环遍历A、B中间的位格,若有一个为有图块则不能水平消除

3、一个拐角检测

一个拐角检测可分解为水平检测和垂直检测,当两个同时满足时,便两点可通过一个拐角相连。即:

一个拐角检测 = 水平检测 && 垂直检测

A 点至 B 点能否连接可转化为满足任意一点:

A 点至 C 点的垂直检测,以及 C 点至 B 点的水平检测;

A 点至 D 点的水平检测,以及 D 点至 B 点的垂直检测。

定义函数 turn_once 用于一个拐角检测

判断A、B两点是否为同一点

判断C(X1,Y2)点是否为空

C、B水平检测&&A、C垂直检测,都满足则返回1

判断D(X2,Y1)是否为空

A、D水平检测&&B、D垂直检测,都满足则返回1

都不满足则返回0,表示不能一个拐点消除

4、两个拐角检测

两个拐角检测可分解为一个拐角检测和水平检测或垂直检测。即:

两个拐角检测 = 一个拐角检测 && (水平检测 || 垂直检测)

水平、垂直分别穿过 A B 共有四条直线,扫描直线上所有不包含 A B 的点,看是否存在一点 C ,满足以下任意一项:

A 点至 C 点通过水平或垂直检测,C 点至 B 点可通过一个拐角连接。(图中用 C 表示)

A 点至 C 点可通过一个拐角连接,C 点至 B 点通过水平或垂直连接。(图中用 C 下划线表示)

创建函数turn_twice用于两个拐角检测:

判断A、B两点是否为同一点

对地图数组进行遍历(temp_x 0-9,temp_y 0-6)

如果C点跟A、B两点都不为水平或者垂直关系,则跳过

若C点坐标为A或者B点,跳过

判断C点是否为空,若为空则跳过

A点与C点做一个拐角检测,C点与B点做水平检测或垂直检测,A、B两点关系都满足则返回1表示C点条件满足

B点与C点做一个拐角检测,C点与A点做水平检测或垂直检测,A、B两点关系都满足则返回1表示C点条件满足

否则返回0

5、算法整合

目前为止,连连看的基本算法都已经实现,整合创建一个remove函数判断相同图块的两点是否能通过以上四种算法消除。

判断两个点是否为同一图块

判断是否能水平消除,若能则将两个位置的数组内容置为0,表示空。

否则判断是否能垂直消除,若能则将两个位置的数组的内容置0

否则判断是否能一个拐点消除,若能则将两个位置的数组值置为0

否则判断两点能否两个拐点消除,若能则将两个位置的数组值置为0

不管是否消除两个图块,销毁两个选择框精灵,将选择框数量变量值置为0

演示说明

游戏开始,游戏地图初始化,开始倒计时。

按下A键选中方块,红框表示方框已选中,然后找到一个与此方块相同的方块,再次选中即可消除。

成功消除第一关全部方块后,自动开始下一关。

在规定时间内消除所有方块即可获胜

如果没有按时消除所有方块就会失败

心得体会

这是我第一次参加Funpack活动,这次活动使我感触很深,青少年可以低成本地通过Funpack的活动认识到游戏编译的乐趣,很有教育意义。

编辑:jq

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

    关注

    25

    文章

    5236

    浏览量

    175463
  • 开源
    +关注

    关注

    3

    文章

    4031

    浏览量

    45563
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66831
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73137
  • cade
    +关注

    关注

    0

    文章

    2

    浏览量

    6355

原文标题:Kitronik ARCADE游戏手柄实现连连看 - Funpack10项目分享二

文章出处:【微信号:xiaojiaoyafpga,微信公众号:电子森林】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    昆泰芯传感器赋予游戏手柄新生命

    昆泰芯3D霍尔技术通过非接触式磁场感应实现游戏手柄摇杆的精准操控,以16位分辨率、1000Hz刷新率及温漂抑制技术,彻底解决碳膜摇杆的磨损与漂移问题。
    的头像 发表于 10-27 09:56 316次阅读
    昆泰芯传感器赋予<b class='flag-5'>游戏</b><b class='flag-5'>手柄</b>新生命

    游戏手柄线性霍尔替代方案:以SC470X系列为核心的升级路径

    SC470X 系列是低功耗、高速线性霍尔传感器芯片,能构成比例的响应外部磁场的变化,其静态输出电压为 50%VCC。SC470X 系列的运行功耗低至 0.7 mA,使其非常适合用于电池供电类应用,如游戏手柄、手持云台等类型设备。
    的头像 发表于 08-30 10:35 938次阅读

    【技术贴】手柄芯片重新定义次世代交互体验,玩家:这物理外挂太逆天!

    随着游戏设备的升级,游戏手柄作为核心交互设备持续技术革新。在主机游戏中,高精度操作适配动作格斗、模拟驾驶等多种游戏类型,显著提升玩家沉浸感。
    的头像 发表于 08-11 15:30 685次阅读
    【技术贴】<b class='flag-5'>手柄</b>芯片重新定义次世代交互体验,玩家:这物理外挂太逆天!

    260款热门大型3A电脑单机游戏分享 全系列汉化+预装MOD+游戏运行环境

    分享 【金山文档 | WPS云文档】 安卓游戏全集5000+含安卓电视游戏+原生支持手柄的安卓游戏https://kdocs.cn/l/caGyGtXfn8hA 零希沃特 ZERO S
    发表于 07-29 16:35

    【VisionFive 2单板计算机试用体验】VisionFive 2复古游戏机改造

    → Language) 手柄映射(Controller Settings支持USB/2.4G无线手柄) WiFi联网(需外接USB网卡) 二、游戏ROM添加与管理 3 ROM传输方式 Samba共享 :PC
    发表于 07-22 20:58

    【VisionFive 2单板计算机试用体验】2、打造复古游戏机(Batocera镜像+FBNeo虚拟机, 多款游戏ROM分享)

    PC、ARM TV Box、Odroid、Rockchip 等 界面华丽,游戏列表支持图片+视频预览 内置游戏系统检测、手柄即插即用 适合 PC 用户做成复古主机 ❌缺点 : 系统比较重,运行在老设备
    发表于 07-17 21:58

    OVP IC应用案例 | 机械师G6Pro游戏手柄助力玩家顺畅通关

    近期,充电头网拆解了机械师G6Pro游戏手柄,该款产品使用的过压保护芯片来自Prisemi芯导科技,型号P14C13,是一颗高集成的过压保护芯片,过压保护点为6V,耐压为32V,内置MOS管导通电
    的头像 发表于 07-08 11:33 508次阅读
    OVP IC应用案例 | 机械师G6Pro<b class='flag-5'>游戏</b><b class='flag-5'>手柄</b>助力玩家顺畅通关

    【HarmonyOS next】ArkUI-X休闲益智连连看【进阶】

    连连看游戏为例,深度解析跨平台开发的核心优势。 一、ArkUI-X跨平台架构优势 图:ArkUI-X跨平台运行原理示意图 ArkUI-X通过以下设计实现\"一次开发,双端部署\"
    发表于 06-28 21:51

    单片机实例项目:FC小霸王游戏手柄资料

    单片机实例项目:FC小霸王游戏手柄资料,推荐下载!
    发表于 06-03 21:04

    鸿蒙5开发宝藏案例分享---一多开发实例(游戏

    十年前藏的现金一样惊喜!)这些藏在文档深处的\"武功秘籍\",能帮我们轻松实现分布式游戏、跨端协同这些听起来很酷的功能。快上车,带你解锁鸿蒙开发的正确姿势! 一、分布式游戏手柄
    发表于 06-03 18:22

    游戏手柄振动马达:沉浸式游戏体验的核心

    游戏手柄振动马达是现代游戏设备中不可或缺的一部分,它为玩家提供了更加沉浸式的游戏体验。通过精确的振动反馈,游戏
    的头像 发表于 05-17 00:05 657次阅读

    艾为电子芯片产品在游戏手柄中的应用方案

    随着游戏设备的升级,游戏手柄作为核心交互设备持续技术革新。在主机游戏中,高精度操作适配动作格斗、模拟驾驶等多种游戏类型,显著提升玩家沉浸感。
    的头像 发表于 04-15 09:42 1349次阅读
    艾为电子芯片产品在<b class='flag-5'>游戏</b><b class='flag-5'>手柄</b>中的应用方案

    手柄RFID手持机终端的特点和作用分析

    手柄设计是RFID手持机的重要特点。符合人体工程学的手柄设计,使操作更加舒适,减轻长时间使用带来的疲劳感。防滑手柄确保设备在潮湿或油污环境中的稳定握持,提升使用安全性。同时手柄配备快捷
    的头像 发表于 02-24 11:28 541次阅读

    使用适用于 Raspberry Pi Pico 的 Kitronik 迷你控制器控制您的 XRP 机器人

    作者:Travis Foss 一个反复提出的有趣问题是控制 XRP 的不同方法是什么。我碰巧发现了适用于 Raspberry Pi Pico 的 Kitronik 迷你控制器,Kitronik 有一
    的头像 发表于 01-26 17:37 858次阅读
    使用适用于 Raspberry Pi Pico 的 <b class='flag-5'>Kitronik</b> 迷你控制器控制您的 XRP 机器人

    FPGA打砖块小游戏设计思路

    HDL, Vivado 平台上开发打砖块小游戏并使用 PS2 与 VGA 的基本思路: 一、整体架构设计 1. 输入模块: • PS2 接口模块:负责与 PS2 设备(如游戏手柄)进行通信,接收
    的头像 发表于 12-09 16:57 1459次阅读