|
一、作品简介 本作品是一款基于迪文 T5L 智能屏与 C51 内核实现的经典休闲游戏《黄金矿工》。系统以 DGUS 变量存储器为界面与底层程序之间的数据通道,玩家通过控制钩子的摆动与发射,在限定时间内抓取足够分数的金子与钻石完成关卡目标;若误抓石头或时间耗尽,则判定游戏失败。作品完整实现了开始界面、游戏界面、过关结算和失败界面等流程,并加入了多关卡设计、随机矿物分布、得分统计和倒计时等功能,具有良好的可玩性和交互体验。 二、工作原理 界面交互与底层通信:迪文屏通过 DGUS 变量地址与 C51 程序交换数据,程序中使用 money_addr(0x1200)、goal_addr(0x1202)、time_addr(0x1204)、level_addr(0x1206) 等地址分别管理金钱、目标分数、时间和关卡信息;钩子角度通过hook_vp(0x1002) 控制,矿物图标通过vp_mine(x) (0x1100+2*x) 动态显示,实现界面层与逻辑层的联动。 钩子运动控制:系统采用极坐标方式描述钩子位置,以角度g_hook_angle 控制钩子左右摆动(0°~360°),发射时根据角度计算方向向量(k_x, k_y),采用参数方程 x = origin_x + k_x * distance、y = origin_y + k_y * distance实时计算钩子坐标,并通过 DGUS 绘图指令draw_line() 绘制绳索。 碰撞检测与得分逻辑:程序采用矩形碰撞检测算法,当钩子坐标进入矿物包围盒 (mine.x < x < mine.x+mine.w, mine.y < y < mine.y+mine.h) 时判定为抓取成功。不同矿物对应不同分值(小金子 50、中金子 100、大金子和钻石 500、小石头 20 等),抓取后根据矿物类型计算收回延迟shrink_time,模拟重量差异。 关卡与难度设计:系统预设 5 种不同的矿物分布模板(g_mine_dist1~5),每关开始时通过伪随机数生成器选择一种布局,保证游戏的新鲜感;关卡目标分数依次递增(900→1800→2600→3400),每关限时 40 秒,过关后自动进入下一关。 三、设计思路 根据"黄金矿工"的经典玩法确定系统功能,将工程划分为界面显示、触摸输入、游戏逻辑、钩子运动和结果反馈几个部分,保证结构清晰、便于调试。 在软件实现上,采用模块化思路编写 C51 程序,主循环game_loop() 负责状态机管理(GAME_BEGIN/GAME_ONGOING/GAME_PAUSE/GAME_SETTLEMENT),钩子运动函数launch_hook() 负责发射与收回逻辑,独立函数完成矿物初始化、碰撞判断、界面刷新和过关判定。 在部署方式上,将 DGUS 工程生成的界面资源与 Keil 编译得到的底层程序共同烧录到对应运行环境中,实现迪文屏显示资源与 C51 控制逻辑的协同运行。 四、演示视频
五、工程
|