迪文科技论坛

 找回密码
 立即注册
搜索
查看: 18|回复: 0

【分享】15组作品“舟了个舟”

[复制链接]

1

主题

0

回帖

20

积分

新手上路

Rank: 1

积分
20
发表于 4 天前 | 显示全部楼层 |阅读模式
一、作品简介

        本作品是一款基于迪文 T5L 系列屏(C51 内核)开发的“羊了个羊”风格三消游戏。游戏共三关,每关卡牌堆叠方式不同,玩家需点击顶层卡牌将其移入卡槽,当卡槽内出现三张相同类型的卡牌时自动消除。游戏提供撤回、洗牌、移出等辅助功能,卡槽满且无三消时游戏失败,清空所有卡牌则通关。
        本作品完全基于迪文 DGUS 开发,使用 C51 语言编写,充分利用了 DGUS 的 VP/SP 变量进行卡牌位置和类型管理,实现了完整的游戏逻辑、触摸交互、页面跳转和进度存储。

二、工作原理

1.硬件平台
        迪文 T5L 系列屏,内置 C51 单片机作为主控,通过 DGUS 变量接口与 GUI 交互。
2.卡牌管理
        每张卡牌在 DGUS 中对应两个地址:VP(存放卡牌图标编号,1~10 为明亮图标,11~20 为灰暗图标,0 为已消除)和 SP(存放卡牌在屏幕上的 X、Y 坐标)。游戏过程中,所有卡牌的状态(类型、区域、覆盖计数、坐标等)在内存 Card 结构体数组中同步维护。每次状态改变(移动、消除、洗牌等)都会通过 write_dgus_vp 和 write_dgus_vp 更新屏幕显示。
3.堆叠与覆盖
        每一关的卡牌按从底层到顶层的顺序构建到 cards 数组中,第一关索引小的是顶层,第二、三关索引小的是底层。calcCoverage() 函数根据当前关卡方向,通过矩形重叠判断上层卡牌对下层卡牌的覆盖,并更新 cover_cnt。cover_cnt == 0 的卡牌为可点击(明亮),否则为灰暗。
4.游戏流程
        触摸检测:GetTouchAnction 获取点击坐标,判断点击区域(按钮或卡牌)。
        卡牌移动:将可点击卡牌移入卡槽数组 slot_cards,更新区域和坐标,触发覆盖重新计算和消除检测。
        三消机制:tryEliminateSlot 循环检查卡槽中是否有同一类型数量 ≥3,执行消除并压缩卡槽。
        胜负判定:卡槽满且无三消则失败;所有卡牌类型为 0 则胜利,并调用 levelChangePage 更新进度和显示。

三、设计思路
1.模块化设计
        将游戏逻辑拆分为独立的静态函数:关卡构建(buildLevel1/2/3)、覆盖计算(calcCoverage)、卡槽管理(addToSlot、tryEliminateSlot)、辅助功能(undoMoveToSlot、shuffleNormalCards、moveOutToRemoved)等,便于调试和维护。
2.可解性保证
        在构建每个关卡时,先通过 generateSolvableTypes 生成每种类型数量为 3 的倍数的随机卡牌类型数组,然后打乱分配,确保游戏必定可解,避免最后剩余无法消除的卡牌。
3.堆叠方向适配:
        第一关和第二、三关的索引与层级的对应关系不同,calcCoverage 中根据 current_level 分别处理覆盖计数的增加方向,保证顶层卡牌可点击。
4.内存优化:
        使用 code 关键字将爱心掩码等常量数组。卡牌数组大小固定为 72(最大卡牌数),通过 card_count 控制遍历范围,避免越界。

四、演示视频


五、附件上传


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2026-4-18 21:48 , Processed in 0.040637 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表