在遊戲中如何讓隨機更加智慧型
dionysos 2014-3-12
遊戲**於生活,又高於生活。在遊戲中,設計人員一般會加入各種各樣的遊戲引擎,就是為了讓遊戲更加符合一些生活規律,不至於讓遊戲毫無支撐感。另一方面,遊戲又不能像生活一樣刻板、一成不變。因此遊戲中會加入各種新奇東西,讓遊戲據有刺激性、娛樂性等感覺,其中讓遊戲保持新奇性,是遊戲設計人員廣泛關注的乙個話題。為了讓遊戲保持新奇性,也就是新鮮感。我們通常會通過不同方式來實現,比方說不同的背景,不同的道路,不同的怪物等。但這些方法,歸根結底就是隨機問題。
看幾份策劃中的描述:
1. 1個寫有「射」 字的蜜罐隨機放在最低下的木板,1個蜜罐隨機放在第2層木板,其他3個蜜罐隨機分布在其他2條木板。每條木板有5個固定的放置位置,每條木板最多放置3個蜜罐,同一列不放置相鄰的兩個蜜罐。
2. 玩家在磚塊上走動,並不斷往下掉落,如果下面沒有磚塊,玩家掉到螢幕底部時,出囧的表情(分左右),生命值減1,然後在螢幕底部跟著正常的磚塊重新整理出來,遊戲繼續;
這是分別從策劃文件中抽取出來的兩句話,有時候策劃人員為了讓遊戲更加豐富,會專門要求一些道具的擺放問題或者地圖的設計。通常,策劃要求的就那麼一兩句話,但真正讓程式實現起來,就不是一兩條**的問題了。
我們分析一下隨機常用的一些方法。
1. 最簡單傳統的隨機:rand()
這個方法通常是用在對隨機的結果無特殊要求只需要返回乙個可用值的情況下,比較適合,但在隨機結構有一定比例和特殊要求的結果下,這個方法就捉襟見肘了。
2. 區間概率隨機:(隨機值區間轉換)
這個方法是在第乙個方法上的一種延伸,同樣是通過rand()函式來返回乙個值,然後判斷這個在哪個範圍,返回相應的值。這個方法比較適合有比例要求的情況下。比方下面一段策劃:「本關乙個螢幕內最多出現3架敵機,可以折線飛行。**時有50%概率出現物品,物品為a、b、c、d,比例為2:2:1:1」。因此,我最初設定是rand的返回值如果是0、1,就出a,2、3出b的方式來解決這個隨機問題。
不過後來,測試科發了兩個bug,徹底讓我無語了。乙個bug是「飛機**,一直出現不了a道具,致使本關時間過長,不協調」;另乙個bug是「經常出現a道具,遊戲太容易過關,請改正」。
後來分析下,這個問題的根源在於rand()概率問題,同時這兩個bug暴露出了這個方法的侷限性:這個方法適用於大資料隨機,不適用於小資料隨機,容易失真。
3. 資料隨機:
就是將隨機結果值按一定的比例放入乙個指定大小的陣列中,然後打亂整個陣列,按照陣列順序(迴圈)取值。
這個方法是目前我在遊戲中經常採用的一種隨機方法,將要出現各種資料存放在陣列中,將陣列打亂,在一次取出,同時在打亂的過程中,還可以做一些特別處理。
這個方法在很多方面比較適合:1. 在遊戲中需要按一定比例出現指定的漢字字卡;
2.將定量的東西隨機放在定量的位置;3.一些有特殊要求的隨機地圖的生產,比方說要求首位相連等要求。有這種要求的典型遊戲,有很多如:《是男人就下一百層》等,猜想《神廟大逃亡》遊戲的地圖也是這樣生成的。
但這個方法,也有其侷限性,就是資料可能要求比較大,限制有時候比較多,而且不能窮舉所有的可能性。同時當結果值太多且比例大小相差很大的時候,需要用乙個大陣列去裝載比例結果值,尤其大資料隨機。
在遊戲中如何使用LUA指令碼語言
當你希望在你的遊戲開始的時候讀取一些資訊,以配置你的遊戲,這些資訊通常都是放到乙個文字檔案中,在你的遊戲啟動的時候,你需要開啟這個檔案,然後解析字串,找到所需要的資訊。是的,或許你認為這樣就足夠了,為什麼還要使用lua呢?if player is dead then do something els...
童年匯 在遊戲中教與學
聽到身邊的媽媽總是問,哪家早教好,要送寶寶去哪個學習更好?說什麼人家的寶寶都上早教了,我們也不能落別人太多什麼的。其實,我覺得家 長應該端正心態,並不是寶寶不上早教就落後別人很多,很多媽媽覺得寶寶上早教課就一定要學到什麼,從而來判定這家早教中心怎麼樣?其實真正 的早教課是給寶寶乙個快樂的學習思維,讓...
Fifa12遊戲中隨機退到桌面
3dm 7g版本。kick off模式,踢不完全場,就會退出。系統 xp sp3系統,蘿蔔家園 精簡ghost。硬體配置 速龍4000 3g ddr2 667 320g 希捷ide 藍寶石hd4830 大水牛400w 更換系統到win7 sp1 旗艦版,自帶net3.5,安裝vc2008發行包,dx...