一. 作品简介
利用迪文T5L开发板,实现的一款8-bit像素风动作生存类游戏——像素骑士
玩家通过屏幕上的方向键控制骑士四向移动,用攻击键与不断涌来的地下城怪物展开战斗。游戏内置“简单、一般、困难”三种内置难度,对应不同刷怪速率和通关击杀目标。
达成击杀目标即可胜利,血量归零则判定失败。
二. 工作原理
1. 游戏启动
程序初始化,加载开始页面。利用按键返回控件,实现跳转至难度选择页。
图2.1 开始页面
2. 难度选择 利用图标页面平移和滑动图标选择,实现滑动选择难度功能,并跳转至战斗主场景。 不同难度图标各有一按键返回控件,变量地址2080,键值分别为1、2、3,以实现不同难度对应不同的刷怪速率、怪物移速和击杀目标。
3. 战斗场景 主角为一个变量图标显示,描述指针3000变量地址3100,”48 主角.icl“用以存储四向行走图片;方向键为四个增量调节控件,变量地址分别为3001、3002,用以实现主角XY方向的移动;
攻击按键为一个按键返回控件,变量地址4200键值1,用以实现攻击功能;三个变量图标显示,描述指针2100、2200、2300,变量地址2240、2250、2260,实现怪物的刷新(同屏怪物上限为3),
和自动追踪主角;另外三个变量图标显示,用以实现血量的显示和扣除。
图2.3 战斗场景
4.结算页面
根据条件判定胜负,跳转至不同结算页面,结算页有一按键返回控件,用以实现跳转至开始页面,方便玩家重新开始一局游戏。
三. 设计思路 1. UI设计 采用8-bit像素风格,以中世纪暗黑地下城为视觉基调,整体配色以深紫、暗蓝为主,契合游戏的地牢主题。 所有背景图片、人物素材、按键图标均由ai辅助生成。
2. 代码设计 1.初始化与状态管理:游戏开局或触发“重试”时,调用Init_Game()将所有怪物位移至2000 像素外的隐藏区域,重置血量、连击计数与时间Tick。根据难度改变spawn_limit(刷怪上限间隔)和kill_target(目标击杀数),构成完整的难度分级。 2.输入采集与双击击杀机制:主循环不断轮询玩家的屏幕XY坐标来刷新当前位置。攻击系统采用“双击判定”:首次检测到攻击信号启动10个Tick(0.5秒)的判定窗口期,若此期间达成 2 次击打且怪物在角色攻击距离(绝对值坐标差<60)内,则判定怪物被击杀。 3.碰撞伤害与容错缓冲:利用宏定义的 ABS 求差算子构建矩形包围盒以测算距离。当主角处于怪物伤害范围内,计时器开始累加。仅当连续处于范围内大40个Tick(2秒)后才会扣除1点生命,避免了接触即死体验感差。生命值耗尽后则改变0x0084地址的值跳转至失败页。 4.动态帧动画演算:判断(current_x != last_x)提取位移方向(上/下/左/右)。结合p_anim_tick 计数器实现每2帧自动切换下一个步态贴图ID(0到6循环)。仅在人物状态发生变化时才向迪文屏发送UI串口更新指令,极大地节约了串口带宽。 5.对象池与简单的自动寻路:预分配大小为 3的数组作为怪物对象池。定时器触发时,激活闲置空槽并在指定坐标域内叠加随机数刷出怪物。怪物会自动根据主角坐标进行 X/Y单轴趋近。为了避免两只怪物重合时,造成的鬼畜,当两只怪物间距小于30时会触发反向坐标运算进行相互推挤。
工程文件:
演示视频:
|