Java小游戏

小游戏 - 异世界打工人

Object-Oriented Programming (1002) 课程作业。Java Swing 单 JFrame + CardLayout + 对象序列化存档。 作者:Sarzn


世界观

你是某大厂程序员。某天加班到凌晨,最后一个回车一按下去,屏幕一闪被传送到了 「大厂奇幻大陆」

奇幻大陆由 5 座以国内大厂为原型的城邦 组成(Tencent / Alibaba / ByteDance / Meituan / Pinduoduo),最deep 的地方是「需求又改了」圣殿。每个城邦都是一片外表奇幻、内核依旧是 KPI、OKR、加班、画饼 的诡异世界。你必须在这些城邦之间冒险,打败职场怪物,攒够年终奖回家,或者干脆把这一切的根源 ——「需求又改了」之神击败


玩法逻辑

介绍

游戏没有任务系统,不是开放世界。 只有两个概念:城邦阶段

  • 城邦 是 一个大关卡,对应一家大厂, 通过 map 可以看到
  • 阶段 是 城邦里的一个小关卡,每个阶段就是一场战斗

每个普通城邦固定 3 个阶段:2 个小怪关 + 1 个 Boss 关。打通 Boss 即解锁下一城邦。Final Tower(需求又改了神殿) 只有 1 个阶段,那就是终极 Boss。

阶段推进规则

  • 进入某个城邦后,从该城邦的阶段 1 开始
  • 当前阶段胜利, 自动存档, 自动前往下一阶段
  • 死亡, 读取上次存档, 从那个阶段重新开始

训练模式(Train)

主界面 Battle 卡上除了 Fight Stage 还有一个 Train 按钮, 可以在Boss 关之前可以用来刷小怪

  • 随机重打一场当前城邦中已通过的小怪关
  • 可以获得经验、金币
  • 不推进城邦进度(不会被算作正式通关阶段)
  • 结束自动 HP/MP 回满

切换城邦(地图传送)

主界面进入 World Map,可跳到任意已解锁的城邦, 回到旧城邦刷经验/刷钱时可以保留

  • 当前城邦的阶段进度重置(但解锁状态保留)
  • HP/MP 回满
  • 装备、经验、金币、背包全部保留
  • 存档位置更新为新城邦

回合制战斗

触发方式:在主界面点击 Fight Stage 进入当前阶段,或点 Train 进入训练。不会在地图随机遇敌

每回合两段

阶段 内容
玩家回合 在以下行动里选 1 个:普通攻击 使用技能(耗 MP)逃跑(Boss 战禁用)
敌人回合 每只敌人按自己的 AI 自动行动

特别说明:使用药水(Use Item)是免费动作! 不会消耗你的回合,也不会触发敌人行动。一回合内可以连灌多瓶药水后再普攻或放技能

胜负判定: - 胜利:所有敌人 HP ≤ 0 → 获得金币 + 经验(Boss 必掉装备) - 失败:你的 HP ≤ 0 → 触发”死亡”(见下文)

伤害计算

1
2
3
4
普通攻击伤害 = max(1, 自身攻击 + 武器加成 − 敌人防御)
暴击伤害 = 普通伤害 × 1.5(按职业暴击率判定)
技能伤害 = 各技能独立公式
真伤 = 无视防御(Coder 的 Debug、终极 Boss 的「需求又改了」)

战斗中还可能触发:眩晕(跳过回合)、攻防 Debuff(持续若干回合)、Designer 的”灵感爆发”使下次伤害翻倍、PM 的”召唤助手”普攻额外追加 50% 伤害(持续 3 回合)等。


角色说明

升级

  • 击败敌人获得 经验(EXP)
  • 每 N → N+1 级需要 100 × N 点经验(1→2 需 100,2→3 需 200…)
  • 等级上限:20 级
  • 每升一级自动:HP 上限 +20、MP 上限 +10、攻击 +3、防御 +2,HP/MP 回满

换装备

  • 装备槽位:1 件武器 + 任意件护甲(护甲可叠穿,加成累加!)
  • 武器换装:旧武器自动回背包
  • 护甲:每装备一件就增加防御值
  • 卸下也可以一键回背包;丢弃 (Drop) 已装备的物品会先卸下,对应 buff 自动消失
  • 背包容量:20 格(药水可堆叠,装备每件 1 格,已装备的不占槽)

死亡与存档

自动存档

游戏是单存档制 + 自动存档。在以下时机自动保存:

  • 每次战斗胜利后
  • 每次商店交易后
  • 每次切换城邦后
  • 退出游戏时

死亡规则 - 死亡半不掉落

当 HP 为零:

  1. 弹对话框:“You have been defeated. Loading the last save…”
  2. 读取最近一次存档
  3. HP/MP 回满,金币/经验/装备都回到存档时的状态
  4. 当前死掉的那场战斗不算数,要从该阶段重新打

通关条件

二选一即可胜利:

  1. 金钱路线:累计赚取 1,000,000 金币(年终奖通关)
  2. 战斗路线:击败终极 Boss 「需求又改了」之神

首次触发任一条件时会播放一段滚动字幕, 之后可以从 How to Play 页面的 Credits 按钮回看


游戏图鉴


地图与阶段配置

线性解锁

1
2
3
4
5
6
7
8
9
10
11
12
Shenzhen Park (Tencent)
击败 Boss 996
Hangzhou Plaza (Alibaba)
击败 PUA Leader
Beijing Loop (ByteDance)
击败 Urgency Boss
Wangjing Hub (Meituan)
击败 Delivery Director
Shanghai Tower (Pinduoduo)
击败 Slash King
Final Tower(终极关)
击败「需求又改了」之神 播放 通关动画

  • 每个普通城邦统一 3 个阶段(2 小怪 + 1 Boss)
  • Boss 关之前可用 Train 按钮反复刷怪

第一关:Shenzhen Park(Tencent)

阶段 名字 敌人配置
阶段 1 Onboarding Lobby Bug Monster × 1
阶段 2 Open Office Bug Monster + Revision Monster
阶段 3 All-Hands Meeting Boss 996

第二关:Hangzhou Plaza(Alibaba)

阶段 名字 敌人配置
阶段 1 Pitch Room Revision Monster × 1
阶段 2 Stand-Up Revision Monster + Urgency Monster
阶段 3 Performance Review PUA Leader

第三关:Beijing Loop(ByteDance)

阶段 名字 敌人配置
阶段 1 Hotfix Channel Urgency Monster × 1
阶段 2 Sprint Crunch Urgency Monster + Delivery Rider
阶段 3 Launch Day Urgency Boss

第四关:Wangjing Hub(Meituan)

阶段 名字 敌人配置
阶段 1 Dispatch Floor Delivery Rider × 1
阶段 2 Quota Wall Delivery Rider + Slash Monster
阶段 3 Director’s Office Delivery Director

第五关:Shanghai Tower(Pinduoduo)

阶段 名字 敌人配置
阶段 1 Side Hustle Cafe Slash Monster × 1
阶段 2 Brand Workshop Slash Monster + Urgency Monster
阶段 3 Throne Room Slash King

终极关:Final Tower

阶段 名字 敌人配置
阶段 1 Top of the Tower 「需求又改了」之神

职业图鉴

属性 Coder 码农 PM 产品经理 Designer 设计师
定位 战士 · 高生存 法师 · 远程魔法 刺客 · 高暴击
初始 HP 120 80 100
初始 MP 30 80 50
初始攻击 15 10 12
初始防御 10 6 7
暴击率 5% 10% 20%

武器和护甲不区分职业,任何职业都能装备。

技能列表

Coder 码农 - Debug —— 真伤,无视防御。MP 10 - Reboot —— 回复 40% 上限 HP,重启大法好。MP 8 - Ctrl+Z —— 撤销敌人最近一次造成的伤害。MP 12

PM 产品经理 - Vision Pitch —— 群体魔法攻击,对所有存活敌人造成 1.2 × 攻击伤害。MP 15 - Demand —— 召唤一个需求怪当帮手,3 回合内你的普攻追加 50% 伤害。MP 20 - PPT Bombardment —— 单体 1.5 × 攻击伤害 + 眩晕 1 回合。MP 12

Designer 设计师 - Aesthetic Strike —— 单体 1.5 × 攻击,必定暴击(×1.5)。MP 8 - Palette Heal —— 回 30% HP + 10 MP,配色让人平静。MP 10 - Inspiration Burst —— 下一次造成伤害 ×2。MP 15


怪物图鉴

小怪(MinorMonster)

5% 暴击率,25% 概率使用招牌技,否则普攻。

名字 招牌技 出没地 HP / ATK / DEF
Bug Monster(小小 Bug) Stack Overflow(栈溢出,×1.3) Tencent 40 / 8 / 3
Revision Monster(改稿怪) Scope Creep(需求蔓延,DEF -2 持续 2 回合) Alibaba 50 / 10 / 4
Urgency Monster(催进度怪) Rush Hour(赶工时刻,×2.0) ByteDance 35 / 14 / 2
Delivery Rider(外卖骑手) Express Delivery(极速送达,×1.5 + 眩晕 1 回合) Meituan 45 / 9 / 5
Slash Monster(斜杠怪) Side Hustle(副业搞钱,×1.2 + 自疗 15%) Pinduoduo 55 / 11 / 6

中 Boss(MidBoss)

10% 暴击率。固定掉落对应装备。

名字 AI 模式 守关城邦 掉落
Boss 996(996 魔王) 每回合普攻 + 自身 ATK +2;每 3 回合 Overtime(强制加班,×2.5) Tencent MacBook Pro(苹果电脑)
PUA Leader(PUA 领导) 偶数回合 Belittle(贬低,伤害 ×0.8 + ATK -3 持续 3 回合);奇数回合 Performance Review(绩效面谈,×1.6) Alibaba Power Suit(西装)
Urgency Boss(催进度老板) 每回合 Hotfix Deadline(紧急上线,×1.5),每 4 回合必暴击 ByteDance Server Rack(服务器机柜)
Delivery Director(配送总监) 每回合 Quota Slam(配额砸下,×1.4);每 4 回合 Logistics Boost(调度增援,自疗 25%) Meituan Exoskeleton(外骨骼护腰)
Slash King(斜杠之王) 三相循环:Pivot(转型,必暴击)→ Hustle Stack(副业叠加,×1.8)→ Personal Brand(个人品牌,自疗 15%) Pinduoduo A100 GPU(A100 显卡)

终极 Boss(FinalBoss)

「需求又改了」之神(Requirements Changed Again) —— Final Tower(需求又改了神殿)守关。15% 暴击率,HP 800 / ATK 50 / DEF 25。

  • 每 4 回合:Requirement Changed Again(需求又改了) —— ×2.0 真伤,无视防御
  • 偶数回合:Edge Case(边界情况) —— ×1.6 伤害 + 玩家 DEF -4 持续 2 回合
  • 奇数回合:Final Review(最终评审) —— ×1.4 伤害,每 5 回合必暴击
  • 击败掉落 Quantum Cluster(量子计算集群,+60 攻击)

装备与道具图鉴

  • 武器、护甲不区分职业,任何职业都能装备
  • 武器只能装备一个, 人只能拿一个武器
  • 护甲可叠穿,加成累加

武器(Weapon)

名字 加成 价格 描述
Mechanical Keyboard(机械键盘) +5 攻击 100 g 咔哒咔哒
MacBook Pro(苹果电脑) +10 攻击 300 g 又薄又重,砸怪也行
Server Rack(服务器机柜) +20 攻击 800 g 一边扛烦恼,一边扛敌人
A100 GPU(A100 显卡) +35 攻击 2000 g 很烧, 很强
Quantum Cluster(量子计算集群) +60 攻击 5000 g 伤害处于叠加态

护甲(Armor)

名字 加成 价格 描述
Company T-shirt(公司文化衫) +3 防御 80 g 入职时的大礼包,主要成分是涤纶
Tech Hoodie(程序员卫衣) +7 防御 200 g 程序员标配
Patagonia Vest(巴塔哥尼亚马甲) +15 防御 500 g VC 制服,意外地耐打
Power Suit(西装) +25 防御 1500 g 人模狗样
Exoskeleton(外骨骼护腰) +40 防御 4000 g 妙界小护腰

药水(Potion,可堆叠)

名字 效果 价格
Coffee(咖啡) +30 HP 30 g
Red Bull(红牛) +20 MP 50 g
Lunch Box(盒饭) +50 HP / +10 MP 80 g
Elixir(神药) +200 HP / +50 MP 300 g

药水在战斗中不消耗回合,可以连灌之后再出手。


商店

  • 位置:主界面的 Shop 入口,随时可用金币购买
  • 库存:4 种药水永久在架 + 3 件随机武器 + 3 件随机护甲(每次进入商店随机洗牌)
  • 卖出:背包里的任何物品都可卖,回收价 = 原价 × 50%
  • 支持按名字 / 描述 / 类别 搜索
  • 支持按价格 升序 / 降序排序
  • 金币不足或背包满会弹专门的提示,购买失败会自动退款

成就列表

总共 10 条,全部用 Set 去重,只在首次满足时解锁

成就 ID 名字 解锁条件
first_blood First Blood(初战告捷) 一血
city_clear Office Veteran(职场老兵) 通关第一城
five_cities Big Tech Survivor(大厂幸存者) 通过全部 5 个城邦
max_level Senior Engineer(高级工程师) 达到 20 级
rich Stock Vested(股票兑现) 累计金币 ≥ 100,000
millionaire IPO Day(上市日) 累计金币 ≥ 1,000,000
final_boss Spec Locked(需求锁定) 击败「需求又改了」之神
streak_5 Sprint Champion(冲刺冠军) 连胜 5 场
kill_50 Bug Hunter(Bug 猎人) 累计击败 50 个敌人
hoarder Hoarder(仓鼠癖) 背包占满 20 格

数据面板(Statistics)

主界面点 Statistics 显示:

  • 基础统计:玩家名 + 职业 + 等级 / 当前金币 / 总游戏时长(HH:MM:SS)/ 通过阶段数 / 总击杀 / 战斗胜场 / 当前连胜与历史最佳连胜
  • 击杀分布:按击杀次数从高到低排序的敌人 JTable
  • 技能使用 Top 10:按使用次数排序
  • 成就进度:10 条成就的解锁 / 锁定状态,未解锁的灰显

工程实现


技术栈

  • 语言:Java 标准库
  • GUI:Java Swing, JFrame + CardLayout
  • 存档java.io.Serializable + ObjectOutputStream,写入 save/game.dat
  • 风格:背景 #F5F1E8、强调 #C96442、文字 #3D2E1F

OOP 架构

  • 抽象类CharacterPlayerEnemyMinorMonsterMidBossItem
  • 接口CombatableSaveableLevelableTradeable
  • 方法重载Character.heal(int) / heal(int,int)Player.useSkill(int) / useSkill(int, boolean overcharge)Inventory.add(Item) / add(Item, int)
  • 方法重写:每个怪物都重写 chooseAction(turn)、各职业重写 rollCritical / useSkill
  • 多态BattleSystem 只面向 Enemy.chooseAction / Combatable 编程,所有具体子类多态分发
  • 自定义异常SaveCorruptedExceptionInventoryFullExceptionInsufficientGoldException
  • 集合:背包、城邦、商店、统计使用 ArrayList / LinkedHashMap / HashSet