SZD/ 02
English
SZD/ 02 项目
English

研究索引

课程项目 / SI100B: Introduction to Information Science and Technology

SAVE MY LINEAR ALGEBRA:Pygame Roguelike 游戏项目

一个小组合作完成的 SI100B: Introduction to Information Science and Technology Pygame 期末项目。

SI100B: Introduction to Information Science and Technology · 上海科技大学 · 2024 Fall

  • SI100B: Introduction to Information Science and Technology
  • Pygame
  • Python
  • 2D Roguelike Game
  • 课程项目
  • 场景设计
  • 碰撞系统
  • NPC 对话
裁切后的 GURDY Boss 房游戏封面图。
优化后的封面:居中的 Boss 房游戏画面裁切,用于项目卡片和详情页。

SI100B

项目概述

SAVE MY LINEAR ALGEBRA 是 SI100B: Introduction to Information Science and Technology 的期末项目。该项目是一个使用 Pygame 实现、受《以撒的结合》启发的 2D Roguelike 原型:玩家操纵 Isaac 发射子弹、放置炸弹、击杀怪物、获取奖励、与 NPC 对话,并最终击败 Boss。Isaac 的血量有限,血量清零时游戏结束。

摘要

  • 该项目定位为 SI100B 课程期末项目,而不是商业游戏。
  • 游戏原型和素材明确来自 / 参考《以撒的结合》。
  • 核心玩法包括房间探索、射击、放置炸弹、清理怪物、NPC 奖励和最终 Boss 战。
  • 报告作者列为潘佑邦、宋梓冬和吴俊阳。
GURDY Boss 房截图,包含生命 UI 和 Boss 房间提示。
项目截图:GURDY Boss 战,包含生命、资源和 Boss 房间提示。

玩法设计

玩家循环围绕房间探索与战斗展开:Isaac 从 StartRoom 出生并学习操作,随后进入奖励房或战斗房,清理敌人后解锁房门,并根据 Boss 房间提示前往最终战斗。

玩法

角色控制

  • W、A、S、D 控制 Isaac 移动,并通过移动向量支持斜向移动。
  • 方向键控制 Isaac 向不同方向发射 tear,子弹攻击力和形态可以在游戏中增强。
  • LShift 用于加速移动,E 键放置炸弹;炸弹可以伤害敌人,也可能误伤 Isaac。

玩法

房间推进

  • StartRoom 展示移动、攻击和放置炸弹等基本操作。
  • 战斗房在战斗过程中会关闭房门,只有清除所有敌人后才会重新打开。
  • 每轮游戏有且仅有一个 BossRoom,击败 Boss 后进入胜利结算画面。

玩法

奖励与失败状态

  • Lucky Room 中的抽奖机会消耗金币,并给予血量、攻击力或金币增益。
  • NPC Room 中玩家可以与 Trainer 或 Merchant 对话,获得隐藏奖励或进行交易。
  • Isaac 血量清零时死亡,游戏进入结束状态。

实现设计

实现内容覆盖房间场景、房门逻辑、障碍物、场景切换、角色行为、二叉树地图结构、碰撞处理、资源 UI、NPC 决策、菜单场景和音效反馈等细节。

系统

场景、房门与转场

  • 游戏包含 StartRoom、奖励房、战斗房和一个 BossRoom。
  • 门可能出现在上、下、左、右四个方向,门的类型决定即将进入的房间类型。
  • 房间切换时使用过渡动画,使镜头产生跟随移动的转场效果。

系统

地图与房间生成

  • 游戏通过二叉树存储地图结构,StartRoom 是根节点。
  • 地图向右方和下方延伸四层,总计 15 个房间。
  • BossRoom 保证在第四层生成,每个节点保存父节点和左右子节点,便于迭代和回溯。

系统

障碍物与碰撞

  • 房间中包含 Rock 和 Shit 两类障碍物,破坏规则不同。
  • 战斗房中 Rock 的位置随机,Shit 会从多种模式中随机生成。
  • 碰撞处理覆盖玩家与场景、子弹与场景、子弹与敌人、玩家与敌人、NPC 和道具交互,并包含像素级 mask 碰撞。

系统

NPC、资源与反馈

  • Trainer 提出数学问题,并可能回复血量或强化攻击方式。
  • Merchant 可用金币或 HP 交换治疗、炸弹、攻击力和攻击速度加成。
  • 生命、金币、攻击、炸弹和 Boss 房间提示会在 UI 中实时更新,动作会触发动画和音效。
展示二叉树房间生成结构的示意图。
设计示意图:从 Start Room 到 Boss Room 的二叉树房间结构。

设计补充

项目设计包括场景、房门、障碍物、碰撞、角色逻辑、NPC 对话、资源、UI、菜单动画、BGM 和隐藏效果等内容。

报告

角色与 Boss 设计

  • 普通敌人不会主动攻击玩家,而是在移动中与玩家碰撞造成扣血。
  • Bug 具有普通形态和冲刺形态,Fly 会进行无规则飞行。
  • Gurdy 拥有 100 点血量,会召唤 Fly 并向玩家方向发射子弹;实现上将 Boss 身体和攻击机制拆分为两个类。

报告

NPC / LLM Agent 系统

  • 玩家靠近 NPC 并按 Q 键进入对话框。
  • 对话历史和玩家当前状态会传入 NPC 决策流程。
  • Trainer 与 Merchant 会根据对话和资源状态产生不同奖励、惩罚或交易结果。

报告

UI、提示与隐藏效果

  • 游戏实时更新血量、金币、攻击力和炸弹数量。
  • 右上角 Boss Room 位置提示帮助玩家推断前往 Boss 房间的路径。
  • Isaac 被自己的炸弹炸伤时会触发分尸隐藏效果,头颅进行无规则飘动。

报告

代码组织

  • 报告描述了面向对象和模块化封装的实现方式。
  • GameManager 是主要总控部分,Characters、Scenes、TmpTools 和 UI 等目录分离不同功能。
  • Main.py 和 Statics.py 位于项目根目录,用于运行程序和保存共享数据。

我的贡献

作为团队项目的一部分,我的贡献主要集中在敌人逻辑、游戏管理、动画、UI / 场景以及 README 文档整理。

贡献

  • Enemies.py
  • GameManager.py
  • Animations
  • UI / Scenes
  • README.md

视觉展示

下方展示项目材料中的游戏截图和设计示意图。