|
一、作品简介 本作品是一套单屏触摸互动游戏系统,以迪文 T5L 智能显示模块(800×480 彩色触摸屏)作为人机交互界面,并承载全部运算,不需要外加单片机、独立按键与扬声器;画面渲染、触摸响应、游戏规则、计时计分全部在屏内完成。玩家在主界面点击「开始游戏」进入选关页,从 3×3(9 洞)、4×4(16 洞)、5×5(25 洞)三种布局中任选一关;地鼠按波次从洞中冒出,玩家在它回洞前点中即得分,累计击打 30、50、100 只可依次过关,遗漏数超出上限则本局失败。作品包含动态难度曲线与四维强化(地鼠降速、地鼠数量、失败惩罚、锤子升级),锤子升到 10 级后解锁清屏技能「巨力锤」;适合展台演示、课堂互动等场景,结构简洁,上手即玩。 二、工作原理 系统由四部分组成:GUI 核、OS 核、变量存储器(VP)和触摸屏本体。GUI 核运行 DGUS II 图形系统,负责页面调度、控件渲染与触摸采集;OS 核是芯片内部的 8051 兼容 CPU,运行 C51 程序,负责游戏规则、计时与计分。两核之间没有函数调用,只通过 VP 交换数据。 - 界面部分:用 DGUS GUI 工具绘制 9 个页面(主界面、选关、强化、工具、三个关卡页、通关页、失败页),并配背景库 32 与图标库 42;控件在工程里绑定 VP 地址。
- 触摸部分:菜单按钮把键值写入 0x1000;每个洞口是一个独立触摸控件,按键值 0x0100+i 写入 0x1002,因此一次触摸就同时带回了“哪个洞”。
- 逻辑部分:C51 以 1 ms 定时器为时基;中断负责回洞倒计时、遗漏判定与特效递减。主循环读出非零键值后立即回写 0 完成握手,再判断命中、计算金币、检查是否达标。
- 显示部分:逻辑侧改写 VP 地址即刷新数值,图形控件只写图标序号。切页时先写 0x0085,再向 0x0084 写 5A 01,并分别设置 1000 毫秒(通关)和 700 毫秒(失败)的触摸保护期,以消除抬手产生的余波。
图解说明:一块屏就是全部硬件;GUI 核对内渲染画面、对外采集触摸,OS 核按 VP 契约读写数据,形成“触摸输入→规则判定→变量写回→画面刷新”的完整闭环,单次交互在数十毫秒内完成。 三、设计思路 设计过程 - 前期学习迪文屏开发教程,熟悉 DGUS 组态、触控控件与变量显示功能,完成 9 个页面以及背景、图标资源的制作。
- 规则设计:确定三关的洞数、目标击打数、出洞间隔、停留时间、遗漏上限与强化价格,整理成常量参数表,并规划击打与遗漏、金币、技能、洞位的画面分区。
- 接口与编码:由界面工程导出接口头文件 gui_map.h,集中登记页面号、按键值、变量地址与每关洞数;程序分三层实现:硬件抽象(sys.c)、业务逻辑(game.c)、主循环调度(main.c)。
- 系统联调:把固件与资源合成 DWIN_SET 资源包下载到屏;借助工具页注入金币、借助心跳计数定位问题,逐项排查变量覆盖、触摸余波、出洞判空等问题,完成二次开发优化。
创新点 - 以 VP 为唯一数据边界的双核解耦:界面侧只认变量地址,逻辑侧只认同一套地址,因此换肤、换布局、加页面都不需要改动游戏规则代码。
- 单字读改写机制:由于 32 位总线访问会连带相邻变量,所以写前先读,只改目标半字,再整体写回,避免“金币显示正常、强化等级莫名归零”的串扰。
- 差分刷新与双时间域调度:影子变量比对后只写变化项,每帧写操作从 30 余次减少到 0–3 次;1 ms 中断负责时间语义,主循环负责人机事件,再配合 volatile 在裸机上获得确定时序。
- 动态难度与经济闭环:出洞节奏随本局时间线性加快,配合四维强化与满级巨力锤,使“打得更准—赚得更多—打得更快”形成正反馈。
|