首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

DOS 文字 RPG 遊戲架構解析:模塊化頭文件設計

     編輯:關於C語言

專案概覽

一款基於控制台的文字角色扮演遊戲,約 1174 行代碼,採用模塊化頭文件劃分職責。雖為早期練習作,但清晰展示了「面向對象在 C++ 中的工程化實踐」:單一職責、依賴倒置、靜態成員管理全局狀態。

遊戲運行截圖

六大核心模塊職責

頭文件類名核心職責關鍵數據/接口
Character.hCharacter玩家屬性、裝備、背包、金錢、經驗靜態屬性變量;display()、view_properties()、show()
Enemy.hEnemy普通怪物與 BOSS 屬性配置set(name)、display();靜態 e_hp/att/def、boss_*
Fighting.hFighting戰鬥邏輯、傷害計算、對話顯示、隨機數display(mode)、hurt()、d_speed()、random()
Blacksmith.hBlacksmith鐵匠鋪:武器強化、前綴附魔display()
Select.hSelect主選單:進入戰鬥/鐵匠鋪/屬性/退出display()
Wait.hWait「大腳丫」等待動畫(過場特效)display(time)

設計亮點與模式

1. 靜態成員實現「單例式」全局狀態


// Character.h 片段
class Character {
    static int money, lv, exp_max, exp_min;
    static int life_max, life_min, magic_max, magic_min;
    static double b_attack, attack, b_defense, defense;
    static string name, b_weapons_name, b_prefix_name, b_clothes_name;
    static int b_weapons, b_prefix, b_clothes;
    // 庫存
    static string weapons_name[5]; static int weapons[5];
    static string prefix_name[4];  static int prefix[4];
    // ...
};

避免了全局變量污染命名空間,邏輯上屬於「玩家唯一實例」。

2. friend 打破封裝實現跨模塊協作


// Character.h
friend void Fighting::display(string);      // 戰鬥需讀寫玩家屬性
friend void Fighting::hurt(string);         // 傷害結算
friend void Blacksmith::display();          // 強化修改裝備屬性
friend void Select::display();              // 主選單顯示狀態
// Enemy.h
friend void Fighting::display(string);
friend void Fighting::hurt(string);

雖違純 OOP 原則,但在小型控制台項目中極大簡化了參數傳遞,屬實用主義取捨。

3. 介面依賴而非實現依賴

  • Select 僅前向聲明或包含 Fighting/Blacksmith,調用其靜態 display()。
  • Wait 作為純工具類,被 Fighting/Blacksmith 調用,無反向依賴。

4. 宏防衛與命名規範


#ifndef ONE   // Character.h
#define ONE
// ...
#define ONE
#endif

每個頭文件獨立宏名(ONE、ONE1…),防止重複包含。

潛在改進方向

  1. 去靜態化:改為單例模式或依賴注入,便於單元測試與多角色擴展。
  2. 數據驅動:裝備/怪物屬性外置 JSON/INI,修改無需重編譯。
  3. 狀態機:將 Select/Fighting/Blacksmith 封裝為狀態類,主循環驅動狀態轉換。
  4. 跨平台控制台:抽離 windows.h(Sleep、system("cls")),用 ANSI 轉義序列或 ncurses/PDCurses 適配 Linux。
  5. 隨機數現代化:替換 rand() 為 <random> 引擎(mt19937 + 分佈)。

總結

這組頭文件雖樸素,卻完整演示了「高內聚、低耦合」在 C++ 控制台遊戲中的落地:每個類單一職責、靜態成員承載領域狀態、friend 精準開放協作接口、宏防衛保障編譯衛生。對於初學者,是從「寫在 main 裏」走向「模塊化工程」的優秀範本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved