迪文科技论坛

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

【分享】陈泽宇-邹金飞-赵梓伊-怀旧版黄金矿工

[复制链接]

1

主题

0

回帖

28

积分

新手上路

Rank: 1

积分
28
发表于 3 天前 | 显示全部楼层 |阅读模式
一、作品简介
本作品是一款基于迪文 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 控制逻辑的协同运行。
四、演示视频

五、工程

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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