程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#開發WPF/Silverlight動畫及游戲系列教程(Game Course):(二十四)(1)

C#開發WPF/Silverlight動畫及游戲系列教程(Game Course):(二十四)(1)

編輯:關於C語言

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))測試一下:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved