Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SUPER PLATFORMER — 超级平台跳跃

一个用 C++17 + SDL2 从零手写的 2D 太空主题平台跳跃游戏。包含 10 个完整关卡、3 种敌方 AI、原创造型与音效,满分的手感调优(土狼时间 / 跳跃缓冲 / 可变跳跃)。

全部视觉素材为程序化绘制(原创,不使用任何马里奥素材),音效为运行时合成的波形(方波 / 正弦 / 噪声)。


✨ 特性一览

  • 扎实的手感:土狼时间、跳跃预输入、松开按键小跳、落地 squash 反馈、急停滑铲特效
  • 10 关难度曲线:从教学宽松关一路到熔岩边境与虚空决战,节奏递增
  • 3 种智能 AI:巡逻怪、追击怪(悬崖急停 / 尖刺回避 / 窄坑跳跃)、飞行怪(立体追踪)
  • 完整机制:盾牌格挡、激光射击、心数系统、金币计分、检查点、结算动画
  • 进度系统:存档 / 读档 / 标题屏选关 / 通关解锁,附防篡改校验和
  • 纯程序化渲染:固定 960×600 逻辑分辨率,深空渐变 + 视差星野 + 程序化天体
  • 合成音效:无外部素材,16 种波形音效由公式实时生成
  • CI 友好:--smoke 烟雾测试模式,静态关卡配表(.rodata,布局安全静态断言)

🎮 操作说明

按键 功能
A / D 左右移动
SPACE / W / ↑ 跳跃(按住跳更高,松开截断为小跳)
SHIFT 加速奔跑
E 射击(无限弹药,带预瞄虚线)
I / K 上 / 下瞄准
Q 举盾格挡(消耗护盾次数,移速降低)
P / ESC 暂停
R 重开当前关
F5 保存进度
F9 读取进度
M 静音切换

标题屏:ENTER 开始 / C 从存档继续 / X 清除存档 / 数字键 1-0 选择已解锁关卡。


📦 依赖

  • C++17 编译器(GCC / Clang)
  • CMake ≥ 3.10
  • SDL2 开发库(pkg-config sdl2 可查到)
  • Linux(其他平台请自行适配 SDL2 获取方式)

安装 SDL2(Debian / Ubuntu / Manjaro)

sudo apt install libsdl2-dev        # Debian/Ubuntu
sudo pacman -S sdl2                 # Arch/Manjaro

🔨 构建与运行

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)

./build/mario

Release 构建默认开启 -O3 -march=native 极致优化(自动向量化 + 当前 CPU 全部指令集,仅适用于本机执行)。

烟雾测试(无头自检)

SDL_VIDEODRIVER=dummy ./build/mario --smoke

自动输入约 4 秒后退出,若进程正常结束(退出码 0)说明程序运行无崩溃。


🗂️ 项目结构

.
├── CMakeLists.txt          # 构建配置(-O3 优化)
└── src/
    ├── main.cpp            # 入口:SDL 初始化 / 事件分发 / 固定步长调度
    ├── core/               # 核心:常量、实体、物理、游戏状态机
    │   ├── Common.hpp/.cpp # 全局常量、地图布局、物理手感参数
    │   ├── Entities.hpp    # 纯数据 POD 实体(Player/Goomba/Platform...)
    │   ├── GameLogic.hpp/.cpp  # 主状态机 + 玩家/敌人/子弹推进
    │   └── Physics.hpp/.cpp    # 碰撞检测、粒子系统
    ├── level/              # 关卡
    │   └── Level.hpp/.cpp  # 10 关静态配表 + 关卡生成
    ├── render/             # 渲染
    │   ├── Renderer.hpp/.cpp   # 全部程序化绘制(剔除、视差、特效)
    │   └── Font.hpp/.cpp       # 像素字体
    ├── audio/              # 音效
    │   └── Audio.hpp/.cpp  # 合成波形 SFX
    └── save/               # 存档
        └── Save.hpp/.cpp   # 文本进度存档 + 校验和

💾 存档格式

进度保存为工作目录下的 save.dat,单行文本:

MARIO1 <unlocked> <level> <score> <coins> <lives> <checksum>

每个字段乘以不同质数系数求和得校验和,读取时逐项校验 + 范围钳制,防篡改 / 防坏档。


🧠 设计要点

  • 单向依赖:Entities(纯数据)→ Common(常量)→ GameLogic(状态机),杜绝循环引用;main.cpp 瘦身为纯调度
  • 固定步长循环:Accumulator 模式,物理以 60Hz 恒定步长推进,渲染不受其卡顿拖累
  • 编译期安全:关卡配表 static_assert 标准布局 / 可平凡拷贝;地图行高统一定义于 Common.hpp
  • 性能知觉:激进的可见性剔除、粒子上限、低逻辑分辨率、PRESENTVSYNC 防撕裂

📜 许可证

版权所有 (c) 2026 Shawn-Yu。保留所有权利。

本仓库中的代码仅供公开查看、个人学习和技术审查。

未经原作者明确的书面许可,任何人:

  1. 不得将本软件(或其任何修改版本)进行二次分发、发布、转售或传播。
  2. 不得将本软件(或其衍生作品)用于任何商业用途。
  3. 仅允许在本地进行私下修改和运行,且仅限于个人学习或测试目的。

本软件按“原样”提供,原作者不承担任何形式的担保或责任。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages