電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
[C++]基礎教學_類別(class)篇

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念
上一篇主題 :: 下一篇主題  
發表人 內容
mirror
散播福音的祭司


註冊時間: 2007-07-27
文章: 174

828.60 果凍幣

發表發表於: 2008-2-27, AM 11:52 星期三    文章主題: [C++]基礎教學_類別(class)篇 引言回覆

序:
話說我們的論壇老大
要我寫一篇類別(class)的教學
其實我也不會寫什麼教學來的
在外面所找的到的初學者教學書
都會有這一方面的教學
若要有更詳細的解釋可以去翻翻書籍或教學網站
我接著把一些基礎的東西
跟一些遊戲方面有關係的觀念丟進來


想當初我在學VB的時候,那時學類別時
看到的一個範例非常的有趣
那是一個公車的範例
一部公車包含司機在內最多可容納八個人
當公車在行駛的時候,乘客無法上下車
當公車在停止的時候,乘客才可以上下車
當總人數到達八個人的時候,就無法再繼續增加乘客
當司機下車的時候,公車便無法行駛


說了這麼多,想必大家還是搞不清楚類別是什麼東西
舉例來說呢,類別就像印鈔機的電版
電版本身雖然無法用來付帳,但是卻可以用來印製鈔票
所以印出來的鈔票就可以用來付帳使用了
至於鈔票的類型與使用方法
則要看電版本身的設計來定義
100元的電版代表製作100元的鈔票
1000元的電版代表製作1000元的鈔票
這樣大家大致了解了嗎?


再來說到類別的型態
我們可以透過類別的屬性修改
或者是繼承的方式來產成一個新的類別或物件出來
就拿人來說,人可分為地球人、火星人、台灣人、虛擬人物
再細分下去還可分成男人、女人、老人、小孩
當然類別能做的事還不止這一些
就拿遊戲的商店交易來說好了
可以先製作一個輸入與輸出的系統
就好比道具店的買賣功能,然後透過類別的屬性設定
然後它可以提供給買賣道具、裝備等的商店使用
或者衍生成另一種型態,好比銀行的儲金與領取、甚至是借貸等等


接下來談談類別的獨立性
以現在為主流的ARPG來說好了
每個魔物的生命值與魔力值的紀錄
這應該算是很簡單又容易做出來的功能
即使不用靠類別也可以輕易達到
但用類別則可以做的更獨立化
好比如說A魔物與B魔物是同一種魔物
而且等級也一樣,但素質則有差異
代碼:

例如:

A魔物
等級 10
生命 100/100
魔力 100/100
攻擊力 10
防禦力 10
技能 生命回復10

B魔物
等級 10
生命 101/101
魔力 98/98
攻擊力 8
防禦力 11
技能 生命回復10


簡單來說,這2種魔物是來自同一個類別
透過不同的屬性修改,來造成能力上的差異
再來技能也可以透過類別來製作各種獨立的功能
例如生命值低於多少便回復生命
當回復生命值大於最大生命值時
就將當前生命設定為最大生命值
能力的設計與判定等等都可獨立出來

當你們習慣用類別來開發遊戲的時候會發現
一些可能比較複雜的程式將簡單許多
回頂端
檢視會員個人資料 發送私人訊息
mirror
散播福音的祭司


註冊時間: 2007-07-27
文章: 174

828.60 果凍幣

發表發表於: 2008-2-27, AM 11:54 星期三    文章主題: 引言回覆

基礎教學:
一般來說,我們在製作類別時
會另外製作一個.h檔與.cpp檔
再交由有需求的程式引用
h檔本身是類別的定義
再交由cpp檔來設計類別裡的函數所放置的內容說明
大家所熟悉的內容,大致上看作
代碼:

class 類別名稱
{
private:
   ...
public:
   類別名稱()  //建構子
   {...}

   ~類別名稱() //解構子
   {...}

   ...
protected:
   ...
};

private: 不給隨意修改內容存取的屬性放這裡
public: 可提供給其它衍生類別與物件,存取與使用的函數及屬性放這裡

代碼:

h檔的定義,例如:

class 類別名稱
{
private:
  int MoneyTotal;
  int MoneyTotalMax;
public:
   類別名稱()
   {
     MoneyTotal = 0;
     MoneyTotalMax = 1000;
   }

   ~類別名稱(){}

   BOOT GetMoney(int GetGold);
};


代碼:

cpp檔的函數則以下列方法使用

[回傳變數類型][類別名稱]::[函數名稱](變數類型與名稱)
{...}

例如:
BOOT 類別名稱::GetMoney(int GetGold)
{
 if(GetGold <= 0) //若無獲取金額則失敗
   return false;
 
   MoneyTotal += GetGold;

 if(MoneyTotal > MoneyTotalMax) //若金額大於最大值,則取最大值
   MoneyTotal = MoneyTotalMax;

   return true;
}

使用方法如同變數,宣告一個命名即可使用。
例如:

類別名稱 物件A;
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作