用Python和Pygame寫遊戲-從入門到精通(13)

本文轉載自:http://eyehere.net/2011/python-pygame-novice-professional-13/


我們已經學習了遊戲的圖像和輸入編程,接下來是什麼?聲音?沒錯,不過我們要晚一點再說聲音。遊戲中還有什麼那麼重要?哦是的,趣味性。

遊戲的趣味是遊戲生命的重要組成部分,其重要性甚至凌駕於任何元素,包括畫面之上,之所以大家不太想得到,是因爲這是個比較難定量的東西,難以直接用個什麼方法測量出來。那麼支持遊戲趣味的是什麼呢?是規則智能

規則是遊戲的玩法,比如圍棋,儘量擴大自己的領地;比如俄羅斯方塊,把不同的方塊組合起來,不留縫隙;再比如粘土世界,把小球連起來到達目的地。這就是遊戲規則的具體體現,好的規則簡單讓人很容易理解,但是又能產生足夠多的變化讓我們無法窮盡它的方方面面。書寫好的規則是天才或者乾脆上天干的事,本系列文章還無法觸及,請讀者自己修煉了……

我們要學習遊戲的另外一個支撐物,智能,或者帥氣一點稱爲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,這就是我們下一次要講的主題,狀態機


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章