mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法...

23
Mud Mud 小小小小小 小小小小小

Post on 21-Dec-2015

323 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

MudMud 小遊戲程式小遊戲程式

Page 2: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

物件導向觀念物件導向觀念

靜態模擬 動態模擬

物件特性 屬性 方法

物件關係 繼承、結合 訊息

Page 3: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

物件程式物件程式• 先定義遊戲中的類別:

• (1) 玩家• (2) 怪物• (3) 地點場景

Page 4: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

物件的關係物件的關係

玩家

地點場景 怪物

玩家會和怪物戰鬥玩家處在某一地點

每個地點都有一個怪物

Page 5: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

定義類別定義類別(1) 先定義類別的靜態特性,也就是物件的屬 性 (Attribute)(2) 再定義該類別的動作,也就是物件的動態 特性,也就是物件的方法 (Method)

Page 6: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

““ 玩家” 類別的特性玩家” 類別的特性 (Attribute)(Attribute)

(1) 姓名 (2) 職業 (3)HP( 生命值 ) (4)Max_HP( 最大生命值 ) (5) 錢 (6) 經驗值 (7) 等級 (8) 攻擊力(9) 防禦力 (10) 敏銳度

(11) X 方位的坐標 (12)Y 方位的坐標

促使地點以及玩家之間產生關連

Page 7: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

““ 玩家” 類別的動作玩家” 類別的動作 (Method)(Method)(1) 建構子(2) 顯示玩家的基本資料(3) 戰鬥 ( 和怪獸戰鬥 ) 與怪獸類別之間的互動(4) 行動 ( 包括移動 , 觀察 ) 與地點場景之間的關係

類別的基本功能 ( get_...() , set_...() )(1) 獲得姓名、職業、 HP 、經驗值等等的值(2) 更改姓名、職業、 HP 、經驗值等等的值

Page 8: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

訊息關係訊息關係• 訊息相當於真實世界人說的話,藉由訊息的傳遞,

觸動物件的方法,然後產生動作。

物件導向 函數呼叫 物件名稱 成員函數名稱 引數

物件導向觀念

訊息 接收者 動作 資料

真實世界 真實世界的溝通

誰 做什麼 給予資訊

=

=

Page 9: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

玩家和怪物的關係玩家和怪物的關係 ____ 戰鬥戰鬥

• 物件:玩家• 成員函數:戰鬥• 引數:怪物資訊• 戰鬥動作:戰鬥模式,包括攻擊力的運算、

生命值的運算、勝利的動作

Page 10: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

玩家和地點場景的關係玩家和地點場景的關係 ____ 行動行動• 物件:玩家• 成員函數:行動• 引數:行動選擇 以及 場景資訊• 行動內容:選擇要移動,還是要觀察四週,

移動包括四個方位的移動

Page 11: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

““ 怪物” 類別的特性怪物” 類別的特性 (Attribut(Attribute)e)

(1) 怪獸名 (2)HP( 生命值 ) (3) 可獲得的金錢 (4) 可獲得的經驗值

(5) 攻擊力 (6) 防禦力

(7) 敏銳度

Page 12: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

““ 怪物” 類別的動作怪物” 類別的動作 (Method)(Method)類別的基本功能 ( get_...() , set_...() )(1) 獲得怪獸名字、 HP 、經驗值等等的值(2) 更改怪獸名字、 HP 、經驗值等等的值

Page 13: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

““ 地點” 類別的特性地點” 類別的特性 (Attribut(Attribute)e)

(1) X 方位的坐標 (2)Y 方位的坐標 (3) 東方是否可行走 (4) 西方是否可行走 (5) 南方是否可行走 (6) 北方是否可行走 (7) 敘述 (8) 擁有的怪物

Page 14: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

““ 地點” 類別的動作地點” 類別的動作 (Method)(Method)類別的基本功能 ( get_...() , set_...() )(1) 獲得地點坐標、 地點方向等等的值(2) 更改地點坐標、 地點方向等等的值

Page 15: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

結合關係結合關係• 用於描述各物件間相互連接的結構關係。

物件導向觀念透過結合概念,將可描述現實世界中的結構關係

• 例如一間公司可以由許多人組合—公司與人之間存在者公司由許多人組成的關係。

Page 16: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

地點場景 地點場景 vs. vs. 區域空間區域空間• 許多的地點場景組合成一個區域空間• 區域空間是由地點場景組合而成• 程式設計為 4*4 的區域空間,所以遊戲的空間

是由 16 個地點場景組成(0,3)

(1,3)

(2,3)

(3,3)

(0,2)

(1,2)

(2,2)

(3,2)

(0,1)

(1,1)

(2,1)

(3,1)

(0,0)

(1,0)

(2,0)

(3,0)

區域空間由這 4*4個地點組成

(x,y)括弧代表著 x和 y的坐標

Page 17: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

地點場景 地點場景 vs. vs. 區域空間區域空間

•class Space{•public:• vector<Land> space;• ……•};

利 vector 用 <Land> 來表示地點場景的物件組合

Page 18: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

玩家類別玩家類別• class Player{• private:• string name;• string career;• double attack;• double defense;• double quick;• int hp;• int max_hp;• int exp;• int money;• int classes;• int x;• int y;

• public:• Player(string _name,char _career);• void Show_Information();• void Fight(Monster _monster);• void set_HP(int _hp){hp=_hp;}• void action(char choice,Space _action);• int get_HP();• };

Page 19: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

怪物類別怪物類別• class Monster{• private:• string name;• int hp;• int exp;• int money;• double attack;• double defense;• double quick;

• public:• int get_HP();• int get_EXP(){return exp;}• int get_Money(){return money;}• double get_Defense(){return defense;}• double get_Attack(){return attack;}• double get_Quick(){return quick;}• string get_Name(){return name;}• void set_HP(int _HP){hp=_HP;}• Monster(string _name,int _hp,int _money,int _exp,double _attack,doub

le _defense,double _quick);• };

Page 20: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

地點類別地點類別• class Land{• private:• int x;• int y;• bool n;• bool w;• bool s;• bool e;• string land_script;• Monster monster;•• public:• Land(int _x,int _y,bool _e,bool _w,bool _s,bool _n,string _land_script,M

onster _monster);• int get_X(){return x;}• int get_Y(){return y;}• bool get_N(){return n;}• bool get_E(){return e;}• bool get_S(){return s;}• bool get_W(){return w;}• string get_Script(){return land_script;}• Monster get_Monster(){return monster;}• };

Page 21: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

區域空間類別區域空間類別• class Space{• private:•• public:• vector<Land> space;• Land Find_Space(int _x,int _y);• void Add_Space(int _x,int _y,bool _e,bool _w,bool _s,bool _n,

string _land_script,Monster _monster);• };

Page 22: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

主程式上宣告怪物物件主程式上宣告怪物物件• Monster Devil(" 邪惡劍士 ",600,300,300,150,240,90);• Monster Mouse(" 兇惡的老鼠 ",40,20,20,20,20,20);• Monster Ghost(" 鬼魂 ",150,20,75,30,125,100);• Monster Killer(" 殺手 ",400,200,500,200,300,300);• Monster Bird(" 老鷹 ",800,500,1000,350,100,600);• Monster Fish(" 鯊魚 ",800,100,600,400,600,400);• Monster Little_Fish(" 小魚 ",600,100,200,300,200,500);• Monster Bear(" 熊 ",800,100,700,250,1000,50);• Monster God_1(" 山神 ",1200,500,1500,600,1000,600);• Monster God_2(" 河神 ",1500,550,1600,750,750,1000);• Monster Sea_Bird(" 海鳥 ",800,300,800,300,200,700);• Monster Final_Monster(" 邪惡的魔王 ",2000,800,2500,1000,1000,100

0);

Page 23: Mud 小遊戲程式. 物件導向觀念 靜態模擬動態模擬 物件特性屬性方法 物件關係繼承、結合訊息 物件程式 先定義遊戲中的類別: (1) 玩家 (2)

主程式上宣告地點物件主程式上宣告地點物件• space.Add_Space(0,0,true,false,false,false," 好漂亮的房間 ,你目前看到東邊有一條通道 ",G

host);• space.Add_Space(1,0,false,true,false,true,"北方有光線 ,好像可以通到室外 ",Devil);• space.Add_Space(1,1,true,true,true,true," 光線好亮呀 ,原來這是出口呀 , 四處都是通道 ",Ki

ller);• space.Add_Space(2,1,true,true,true,true," 很寬廣的草原 , 一望無際 ",Bird);• space.Add_Space(0,1,true,false,false,true," 前面有河流檔住了 ,死路一條 ",Fish);• space.Add_Space(3,1,false,true,true,true," 前面有一座山檔住路了 ",Bear);• space.Add_Space(2,0,true,false,false,true," 眼前皆是山壁 ,只能往東走了 ",Bear);• space.Add_Space(3,0,false,true,false,true," 完全是死路 ,只能往原路走回去了 ",God_1);• space.Add_Space(0,2,true,false,true,false," 眼前是一個湖 , 西邊是一條大溪 ,只能往東走了 ",God_2);

• space.Add_Space(1,2,true,true,true,false,"北邊是一個大湖 ,只有東西方有路可以通 ",Little_Fish);

• space.Add_Space(2,2,true,true,true,false," 出海口了 , 北方沒有路了 ",Sea_Bird);• space.Add_Space(3,2,false,true,true,false," 眼前就是最終的魔王 ,他正等待你來跟他挑戰 ",Final_Monster);