C#開發WPF/Silverlight動畫及游戲系列教程(Game Course):(二十四) Be careful!前方怪物出沒
游戲的精靈框架到此為止算告一段落,讓我們一同來體驗它帶來的神奇效應。
一個安靜的黃昏,主角悠閒的甩著它帥氣的毛發獨跑於林陰大道。怎知天色已晚即將進入月亮的領地,嘿嘿,我們的故事就從這裡開始:Be careful,前方怪物出沒!
實在不忍心讓主角空有一身武藝而無處施展,本節為了不再讓它孤單,我將向游戲中加入可愛的妖精妹妹與之為伴:
好象在哪見過呢?對,就是她了,可愛吧(QXGameEngine中的怪物,^_^||難怪這眼熟)。
妖精怪物屬於精靈類型,因此要讓它在游戲中出現,我們只需創建QXSpirit的實例;這裡首先我添加一個刷怪方法InitMonster,接著循環添加怪物精靈實例及參數:
QXSpirit[] Monster;
/// <summary>
/// 初始化怪物(刷怪)
/// </summary>
/// <param name="num">怪物數量</param>
private void InitMonster(int num) {
Monster = new QXSpirit[num];
Random random = new Random(); //測試用,隨機數坐標
for (int i = 0; i < num; i++) {
if (CarrIEr.FindName("Magicer" + i.ToString()) == null) {
Monster[i] = new QXSpirit();
Monster[i].Name = "Magicer" + i.ToString();
CarrIEr.RegisterName(Monster[i].Name, Monster[i]);
Monster[i].Equipment[0] = 100;
Monster[i].Equipment[1] = 0;
……
Monster[i].X = 2000 - random.Next(1000);
Monster[i].Y = 1500 - random.Next(1000);
……
CarrIEr.Children.Add(Monster[i]);
}
}
}
代碼太多我就不一一羅列了,下面我提取部分重要的參數進行講解。首先我定義一個Random類型隨機函數用於隨機數值的產生,接著判斷每一個有名字的精靈是否存在,如果不存在則加入到游戲中。這裡為精靈注冊名字的目的是為了以後方便管理,例如精靈死掉了,我們需要找到它的實例並將之移除,而惟有通過它的名字或ID之類的方能將之捕獲;同時,在定時刷怪的機制下,我們得首先判斷某精靈是否還存在,如果存在則不可能再多刷一個,就好比網絡游戲中大家是否都有過蹲點等刷BOSS暴裝備的經歷,一個蘿卜一個坑,同一點上刷出兩個雙胞胎BOSS,這是很匪夷所思的事。那麼定義完怪物的名字後,我們接著還需要定義它的身體圖片代號,本例中它的代號為100(為了與主角類精靈用的身體圖片區別,我以0-99代表主角類身體(衣服)代號范圍,100-N代表怪物(NPC)類身體代號范圍),最後通過前面的random來定義它們的初始坐標:以(2000,1500)為中心邊長為1000的正方形范圍內的隨機位置。
就這麼完啦?對,簡單吧,還是那句老話,拓展性優良的架構是經得起全方位的考驗滴。嘿嘿,刷它30個怪(InitMonster(30))測試一下: