Skip to content

Repository files navigation

a cpphomework work with Gemini

Last Command - Modded | 最后指令 - 改版

这是一项基于 C++SFML 3.x 开发的 2D 动作弹幕游戏(STG)。本项目深度融合了“贪吃蛇”的成长机制与“弹幕射击”的动作性,致敬并模仿了原作《Last Command》的核心体验。


🎮 基础控制与核心玩法 (Controls & Gameplay)

按键 功能 详细描述
移动 控制自机(蛇头)的移动方向。
Space (长按) 聚焦减速 牺牲速度换取走位精度,移速大幅降低。
D (长按) 解析模式 蓄力攻击。体长越长,蓄力越快。蓄力满自动锁定攻击。
L-Shift / F 冲刺 瞬间位移,附带 0.4s 的无敌帧。
Q 冲击波 消耗能量,生成扩张圆环,震碎接触到的所有敌方弹幕。
Esc 暂停/设置 呼出暂停菜单,可实时调整中/英语言与音量。

🐍 玩家内部数据设定 (Player Entity Stats)

1. 基础属性

  • 生命值 (HP):初始 3 点,上限 5 点。
  • 移动速度:基础 239.6 | 聚焦减速 82.9 | 冲刺 1290.2
  • 能量系统 (Energy):上限 100 点,每秒自动恢复 12 点。每次释放冲击波 (Q) 消耗 35 点。
  • 冲刺充能:上限 2 次,每消耗 1 次需等待 2.5s 冷却恢复。

2. 特殊机制

  • 屏幕穿梭 (Screen Wrap):玩家触碰屏幕边缘并向外移动时,可从屏幕另一侧穿出。
    • 冷却时间15s
    • 惩罚:冷却期间撞墙会触发强制减速,且屏幕四周闪烁蓝色高亮警告框。
  • 断尾求生 (Tail Cut)
    • 敌方子弹击中蛇头或前两节身体,扣除 1 点 HP。
    • 敌方子弹击中第 3 节及之后的身体,不扣血,但会直接切断受击点之后的所有数据尾巴。
    • 穿透属性:敌方子弹击中尾巴后不会消失,如果走位失误,子弹会像电锯一样连续切割身体。
  • 数据散落 (Data Drop):无论是掉血还是断尾,丢失的额外数据节数会以 60%(向上取整) 的比例转化为橙色数据点散落在周围 40px~100px 的随机范围内,玩家可重新拾取。

3. 解析与伤害公式 (Parsing & Damage Math)

  • 解析触发条件:当前总长度 $\ge 3$
  • 解析速度:基础解析速度为 30%/s。第 3 节之后,每多 1 节额外数据,解析速度增加 15%/s
  • 自动锁定:解析达到 100% 瞬间,子弹会自动计算并死锁当前距离玩家最近的 Boss,且带有制导追踪(基础初速度 400,最大追踪速度 700)。
  • 伤害倍率:消耗的数据量 $n = \text{总长度} - 2$
    • $n \le 3$ 时:单发伤害 $= n \times 6$
    • $n > 3$ 时:单发伤害 $= n \times 10$ (极大鼓励长尾巴极限输出)。

👾 敌方机制与攻击设定 (Boss Mechanics)

1. 全局与通用设定

  • 阶段血量 (HP per Phase):简单模式 35 | 正常模式 65 | 困难模式 100
  • 阶段划分:每个 Boss 均有 3 个阶段 (Phase 0, 1, 2),每次血条归零进入下一阶段,血量回满。
  • 普通弹幕发射频率:根据难度动态调整:困难 0.16s | 正常 0.24s | 简单 0.36s
  • 普通弹幕形态
    • Phase 0:360度环形螺旋扩散弹幕,子弹速度 180
    • Phase 1:十字型四向风车弹幕,每次旋转 18°,子弹速度 220
    • Phase 2:双螺旋交叉弹幕,每次旋转 35°,子弹速度 280
  • 环境特攻 (急速泡泡)
    • 触发间隔:全局每 20s 触发一次。
    • 生成数量:2 + 当前阶段数
    • 机制:从屏幕四周随机边缘刷出,贯穿屏幕。红线预警 0.8s,预警宽度 50px,泡泡飞行极速 1800
    • 防重叠判定:同一批次的泡泡出生点强制相距 $\ge 80px$,绝不重叠秒杀玩家。

2. Boss 1:静态核心 - Honest (蓝色)

  • 本体碰撞半径 (Hitbox)35.f
  • 特攻 A (天降水晶)
    • 触发间隔:每 10s 触发一次。
    • 生成数量:3 + 当前阶段数
    • 机制:在屏幕顶端生成垂直向下的红线预警,预警 1.5s 后子弹以 500 的速度砸下。预警线宽度 30px,出生点横向防重叠距离 $\ge 80px$
  • 特攻 B (预判狙击三连发)
    • 触发机制:开局延迟 15s 后触发,此后每 12s 触发一轮。
    • 攻击模式:每轮发射 3 发高速狙击水晶,每发间隔 1.0s
    • 预判逻辑:每次瞄准的不仅是玩家当前位置,而是玩家头部位置 + (当前运动方向 $\times$ 100px)
    • 参数:预警宽度 30px,预警 1.5s,子弹速度 650

3. Boss 2:移动标靶 - Hime (红色)

  • 本体碰撞半径 (Hitbox)45.f(受击面积更大)。
  • 特攻 A (水平巨扇)
    • 触发间隔:每 12s 触发一次。
    • 生成数量:2 + 当前阶段数
    • 机制:从屏幕左右两侧随机生成水平红线,预警 1.5s 后巨大扇子以 600 的速度横扫屏幕。预警宽度高达 130px,出生点纵向防重叠距离 $\ge 80px$
  • 特攻 B (三向扇子散射)
    • 触发机制:每 12s 触发一次。
    • 攻击模式:一发精准锁定玩家躯干中心;另外两发强制在主炮轴线的 +35°-35° 方向同时发射,形成大面积封锁。
    • 参数:预警宽度 130px,预警 1.5s,子弹速度 650

4. Level 3 专属逻辑:双生核心联动 (Dual Core Logic)

在第三关中,两位 Boss 会同时在场,并根据阶段叠加产生复杂的阵型走位:

  • Phase 0 (换位):每 15s 触发一次换位。Boss 移动轨迹采用 Cosine 平滑插值,在 2.0s 内互换左右位置。
  • Phase 1 (正弦波悬浮):双 Boss 在 y 轴上呈反相的 Sine 正弦波上下浮动(振幅 150px,周期 4.0s)。
  • Phase 2 (四角巡航):采用 24s 的大周期循环。双 Boss 在屏幕四个角落呈矩形轨迹顺时针/逆时针移动,移动过程采用二阶平滑插值(Smoothstep),在角落停留输出。

5. 精确碰撞半径字典 (Collision Radius Dictionary)

冲击波消除以及玩家受击判定,严格遵守视觉贴图大小:

  • 普通弹幕 (Bullet01/02):12.f
  • 玩家追踪子弹 (解析发射):18.f
  • 急速泡泡 (Bubble):25.f
  • Honest 竖向水晶特攻:15.f
  • Hime 巨型扇子特攻:65.f

🛠️ 开发者调试模式 (Developer Debug Mode)

在游玩状态 (Playing) 下,可随时按下以下按键进行测试与调试:

  • F1强制秒杀。瞬间清空在场所有 Boss 当前阶段的血量。
  • F2时空减速 (子弹时间)。按下后全局时间流逝速度 timeScale 降为 0.25x。再次按下恢复 1.0x。
  • F3状态重置。玩家生命值瞬间回满至 5 滴血,并播放回血音效。
  • F4数据注入。强行给蛇增加 1 节尾巴数据(无视拾取),最高不超过 10 节。
  • F5全屏清场。强行 clear() 清空场上所有敌方子弹以及尚未发射的红线预警区,并以玩家为中心释放一次免费的清场冲击波。

💀 死亡与复活机制 (Death & Revive System)

当 HP 归零触发 Game Over 后,不再是单纯的重新开始,提供两种友好的复活选择:

  1. 当前状态复活 (Revive: Current State)
    • 原地满血(3点 HP)复活,赋予 3.0s 极长无敌时间。
    • 释放一次全屏冲击波清空周围弹幕。
    • 保留当前 Boss 的血量、阶段和时间轴进度。
  2. 阶段重置复活 (Revive: Restart Phase)
    • 满血复活,所有玩家数据清零,场上掉落物清空。
    • 强制将所有 Boss 重置回当前所在阶段的初始状态(包括满血、初始站位、重置所有大招的计时器)。
  • C++ 标准: C++20 及以上。
  • 依赖库: SFML 3.x (由于 SFML 3 取消了 sf::Uint8 等自定义类型,代码中已全面重构为标准库的 std::uint8_t,请确保您的包含路径配置正确)。
  • 资产目录 (Assets):请确保编译后的可执行文件同级目录下存在 assets/ 文件夹(存放贴图)以及 Cubic.ttf(游戏主要字体文件)。

💾 数据统计 (Endgame Statistics)

无论是系统崩溃 (Game Over) 还是任务完成 (Win),结算界面都会永久记录本局的真实表现。多次复活不会清空该数据,而是持续累加

  • Time (通关耗时):局内有效操作总时长。
  • Max Length (最大长度):本局游戏曾达到过的最高体长记录。
  • Damage Taken (受到伤害):蛇头或前两节躯干被击中导致扣血的总次数。
  • Data Lost (数据丢失):被切断尾巴或受击掉血导致丢失的额外数据块总和,直观反映玩家的“走位战损”。

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages