遊戲的趣味是遊戲生命的重要組成部分,其重要性甚至凌駕於任何元素,包括畫面之上,之所以大家不太想得到,是因為這是個比較難定量的東西,難以直接用個什麼方法測量出來。那麼支援遊戲趣味的是什麼呢?是規則和智慧。
規則是遊戲的玩法,比如圍棋,儘量擴大自己的領地;比如俄羅斯方塊,把不同的方塊組合起來,不留縫隙;再比如粘土世界,把小球連起來到達目的地。這就是遊戲規則的具體體現,好的規則簡單讓人很容易理解,但是又能產生足夠多的變化讓我們無法窮盡它的方方面面。書寫好的規則是天才或者乾脆上天干的事,本系列文章還無法觸及,請讀者自己修煉了……
我們要學習遊戲的另外一個支撐物,智慧,或者帥氣一點稱為AI(Artificial Intelligence,人工智慧,因為遊戲裡的智慧肯定是人賦予的)。玩家操作我們自己的角色,那麼NPC(nonplayer characters)呢?交由AI去操作,所以如果遊戲中有何你相同地位的角色存在的話,你就是在和AI對壘。智慧意味著對抗,“與人鬥其樂無窮”,就是因為人足夠聰明,要想“玩遊戲其樂無窮”,我們都得賦予遊戲足夠的AI。
為遊戲建立人工智慧
也許你希望能在Pygame中發現一個pygame.ai模組,不過每個遊戲中的智慧都是不同的,很難準備一個通用的模組。一個簡單的遊戲中並不需要多少AI程式設計的程式碼,比如俄羅斯方塊,你只需要隨機的落下一個方塊組合,然後每次下降完畢掃描一下落下的方塊就好了,這甚至不能稱為AI。但比如魔獸爭霸,這裡面的AI就非常的複雜,一般人都要學習一段時間才能打敗電腦,可想而知其高度了。
儘管一般遊戲中的人工智慧都是用來對付人類的,不過隨著遊戲發展,AI也可能是我們朋友,甚至AI互相影響從而改變整個遊戲世界,這樣的遊戲就有了更多的深度和未知,無法預知的東西總是吸引人的不是麼?
遊戲的AI程式設計不是一件簡單的事情,幸運的是AI程式碼往往可以重用,這個我們以後再講。
我們接下來要講述遊戲AI的技術,賦予遊戲角色以生命,應該說人工智慧是很高階的技術,花費幾十年都未必能到達怎麼的一個高度,所以這裡的幾章還是以講解重要概念為主。作為參考,個人推薦Mat Buckland的《AI Techniques for Game Programming》,中文版《遊戲程式設計中的人工智慧技術》由清華大學出版社出版,很不錯的一本入門書籍。
什麼是人工智慧
出於嚴謹性,我們應該給人工智慧下一個定義。每個人都會對智慧有一個概念,但又很難給它下一個確切的定義。著名的美國史丹佛大學人工智慧研究中心尼爾遜教授對人工智慧下了這樣一個定義:“人工智慧是關於知識的學科――怎樣表示知識以及怎樣獲得知識並使用知識的科學。”而另一個美國麻省理工學院的溫斯頓教授認為:“人工智慧就是研究如何使計算機去做過去只有人才能做的智慧工作。”這些說法反映了人工智慧學科的基本思想和基本內容。即人工智慧是研究人類智慧活動的規律,構造具有一定智慧的人工系統,研究如何讓計算機去完成以往需要人的智力才能勝任的工作,也就是研究如何應用計算機的軟硬體來模擬人類某些智慧行為的基本理論、方法和技術。但這些說辭太麻煩了,我覺得,人工智慧就是自我感知和反應的人造系統,足矣。
智慧是一件玄妙的事情,在遊戲中的人工智慧更是如此,我們用程式中的一些資料結構和演算法就構築了NPC的大腦,聽起來太酷了!更酷的是,Python非常適合用來編寫人工智慧。
人工智慧初探
舉超級瑪麗為一個例子,那些走來走去的老烏龜,我們控制英雄踩到它們頭上就能殺死它們,而平時,它們就在兩根管子之間走來走去(這樣的人生真可悲……),如果我們開啟它們的腦袋看一下,可能會看到這樣的程式碼:
無比簡單,向前走,一撞牆就回頭,然後重複。它只能理解一種狀態,就是撞牆,而一旦到達這個狀態,它的反應就是回頭。
在考慮一個會發子彈的小妖怪,它的腦袋可能是這麼長的:
它就有了兩個狀態,搜尋和鎖定。如果正在搜尋,就隨處走動,如果發現目標,就鎖定他,然後靠近並試著向其開火,而一旦丟失目標(目標走出了視線範圍或者被消滅),重新進入搜尋狀態。這個AI也是很簡單的,但是它對玩家來說就有了一定的危險性。如果我們給它加入更多的狀態,它就會變得更厲害,遊戲的趣味性也就可能直線上揚了。
OK,這就是我們下一次要講的主題,狀態機。