
發布
注冊
/
登錄游戲的案例
王亮游戲AI探索之旅——從alphago到moba游戲
今天分享的課題是游戲AI探索之旅。本次分享分為四部分,第一部分,什么是游戲AI,游戲AI為什么對現在的游戲非常重要;第二部分,業界和工業界對于做游戲AI主要的方法,以及現在業界一些主流的游戲上的進展。第三部分,結合基于公司自有的MOBA游戲,分享一下我們做的一些探索研究及現在的進展;第四部分,會簡單介紹一下基于深度學習方法來做游戲AI,對于游戲開發者來說需要提供哪些環境便于AI的開發。希望通過今天的分享能給大家之后工作或者接下來學習上帶來一些的啟發和思考。
什么是游戲AI,對于游戲開發者而言是要增進用戶體驗,提升游戲玩家的活躍度,方法主要是基于一些人工規則的方式。而對于學術界來說目標是最大化贏的概率,而現在主要是基于學習的方法。
幾乎每款游戲都有自己的游戲AI。棋片卑類的(深藍、Alphago)、體育類的足球籃球、角色扮演類游戲……越復雜的游戲對AI的依賴程度越高。AI在游戲中常用的方式:人機對戰:AI為游戲提供一種玩法,玩家可以選擇與游戲AI對戰去熟悉游戲;平衡性測試:輔助游戲設計開發,如:游戲數值改變,AI可以用于驗證測試數值變化帶來的影響;對于射擊類的游戲,AI可以用于探索地圖的探索等。
通用的游戲AI的設計,包含三部分: 感知系統、決策系統、導航系統;游戲AI的決策操作基于一定的時間粒度進行循環工作。
展開 游戲玩家福音:飛利浦照明與Razer達成合作,營造全新游戲沉浸感
全球照明領導者飛利浦照明8日宣布,與全球領先的游戲玩家生活方式品牌雷蛇(Razer)就Philips Hue Entertainment服務達成首個合作伙伴關系。為了給游戲玩家提供全新的空間沉浸感,兩家公司已將飛利浦Hue娛樂API、工具與Razer Chroma照明生態系統進行整合。
筆記本電腦,鍵盤,鼠標和鼠標墊等Razer Chroma幻彩產品將能夠與飛利浦Hue智能照明系統同步變換照明色彩,游戲玩家便可享受可增強游戲性和內容的燈光效果。游戲開發者將能夠創建在游戲過程中動態變化的燈光效果。游戲玩家在玩“Overwatch”,“Quake Champions”和其他熱門游戲時已經可以享受這些游戲中的燈光效果。
為了解鎖飛利浦Hue功能并享受更豐富的游戲體驗,消費者需要使用Philips Hue V2 Bridge控制設備,飛利浦Hue彩色燈泡和最新的飛利浦Hue應用軟件。Razer Chroma用戶只需通過Razer Synapse 3軟件添加Philips Hue功能。
雷蛇Chroma產品(包括游戲手提電腦,外圍設備和配件)將與同步的Philips Hue燈并行點亮。飛利浦照明與Razer的合作還為玩家在不玩游戲時提供了更豐富的照明體驗。他們可以將智能照明與裝備同步,并選擇任一燈光設置,以創造一個完美的氛圍。
Razer聯合創始人兼首席執行官Min-Liang Tan表示:“Razer Chroma是全球最大的游戲設備照明生態系統,與飛利浦Hue的整合正在改變家庭的游戲體驗,將游戲沉浸感提升到一個前所未有的全新水平。
來源:新材料技術前沿
傳播最新最全的材料科學技術,包括金屬材料成形、熱加工、陶瓷冶金,機械加工、粉末冶金、表面處理技術、熱處理、3D打印技術等相關材料科學技術。
展開 游戲AI進化簡史
圍棋和《星際爭霸》都可以輸,畢竟狼人殺才是人類在游戲上的最后陣地,等 AI 能玩狼人殺了,那時候才需要恐慌。
“刺激戰場黃金段位以下,一局 80 個 AI。”對于“吃雞”手游來說,這是一個繞不開的話題。
且不論“吃雞”手游是不是真的快涼了,畢竟這類百人在線手游,用機器人湊數加快匹配節奏也沒什么可稀奇的。但為什么,幾乎所有玩過刺激戰場的人都會不約而同地發出質疑:“這都是機器人吧?”答案也顯而易見,里面用來湊數的機器人實在是傻得沒邊。
不搜集裝備、不找掩體、槍法奇差、反應遲鈍……在一個人人機關算盡的游戲中,這些特殊玩家就像送裝備的快遞員,異常突兀。這是否是為了照顧新手玩家的游戲體驗,我們不清楚,但在高端局中同樣會遇到這類“傻白甜”,這就讓人不禁想問:這些 AI 難道就不能做得聰明一點嗎?
今天,我們就聊聊在游戲發展過程中,AI 玩家的過去、現在和未來。
游戲 AI 進化史
電子游戲誕生伊始就有了游戲 AI 的影子,無論是最早的示波器網球還是井字棋,尤其是在多人在線游戲還受困于網絡技術難以普及的過去,單機游戲中的 AI 成了玩家最可靠的陪伴,也成了彼時游戲世界的絕對霸主。
從某種意義上來說,經典街機游戲《吃豆人》中,就已經出現了游戲 AI 的原型。在當時,游戲中的
AI 正在世界范圍內開始興起,而當時的《吃豆人》則是在這方面做出了一個奇妙的嘗試。游戲中一共存在 4
種不同顏色的怪物,并且每一種怪物都擁有不同的追擊算法,且為所有的怪物設定了包圍追擊的統一目標。所以在當時的游戲中,那些怪物并沒有排著隊來追擊玩家,而是從不同的路徑和方式對玩家進行圍追堵截,在每個路口都可能有不同的選擇。這一機制讓《吃豆人》為現代電子游戲
AI 做出了一次有意義的嘗試,也讓《吃豆人》成為了游戲玩家心中的經典。
展開 Python制作外星人入侵小游戲
具體的代碼實現如下:
最后就是把一些游戲相關的數據實時顯示在游戲界面上以供玩家參考:
Step3:定義游戲結束界面
我們只需要根據玩家是否取得了游戲勝利來展示游戲結束界面即可:
All Done!完整源代碼詳見相關文件。

Python制作推箱子小游戲
同時也應當自帶一個方法來判斷此地圖上的箱子是否都已經送到了指定位置(這樣子方便切換關卡):
Step3:定義游戲界面類
游戲界面類負責解析levels文件夾下的游戲各關卡的地圖文件,并利用游戲地圖類創建并顯示游戲地圖:
同時因為游戲地圖面積>游戲窗口界面, 所以該類需要增加根據人物位置滾動游戲地圖的功能:
Step4:定義某關的游戲主循環
主循環主要負責實例化游戲界面類,并根據按鍵檢測的結果對游戲界面類進行一些操作:
其中人物移動的邏輯為:
人移動的目標位置為空白格,則人移動;若撞到箱子,箱子可以和人方向一樣移動一格,則人和箱子均移動;其他情況人和箱子均無法移動。
Step5:定義游戲開始、切換和結束界面
做的比較簡陋,直接給源碼吧。
開始界面:
切換界面:
結束界面:
Step6:實現游戲主函數
把所有界面串起來就好啦:
All Done!完整源代碼詳見相關文件。
展開 Python制作復古地牢文字冒險游戲
巨洞冒險(Colossal Cave Adventure),又名 ADVENT、Clossal Cave 或 Adventure,是八十年代初到九十年代末最受歡迎的基于文字的冒險游戲。這款游戲還作為史上第一款“互動小說(interactive fiction)”類游戲而聞名。在 1976 年,一個叫 Will Crowther 的程序員開發了這款游戲的一個早期版本,之后另一位叫 Don Woods 的程序員改進了這款游戲,為它添加了許多新元素,包括計分系統以及更多的幻想角色和場景。
今天的技術發展已經遠遠超越了那個時代,但我仍然對那個年代的游戲充滿好奇。今天我就來用Python游戲實現一個復古風格的地牢文字冒險游戲。
游戲規則設計
游戲主要場景是迷宮,四周的#是墻壁,無法穿過。
M表示怪物,G表示哥布林,H表示玩家
遭遇怪物通常有幾率對你造成一定的傷害,并且遭遇怪物后怪物并不會消失,下一次再來到這個格子時還會再遭遇怪物
哥布林是友善的,遭遇不同類型的哥布林有幾率給你不同的增幅,加血,加小蘋果等,哥布林遭遇后會消失
移動一格需要消耗1點血量
血量歸零則游戲失敗
游戲的核心就是:玩家需要合理規劃路線,在血量歸零前遭遇所有的怪物即可獲得游戲勝利
勝利分數就是通關時剩余的小蘋果數量,小蘋果數量越多勝利分數越高。排行榜按照勝利分數排名。
地牢生成
地牢的生成算法是一個遞歸算法,算法過程有點類似分割房間。
展開 Python制作塔防小游戲
相關文件
關注公眾號:Python學習指南,回復“塔防”即可獲取相關文件
原理介紹
游戲規則簡介:
玩家通過建造箭塔抵御敵人的進攻。
每隔一段時間,將會有一波敵人從左上角的洞穴中誕生,并沖向右下角的城堡。玩家需要做的,則是通過建造箭塔射殺敵人,避免城堡受到敵人攻擊,同時,每當你射殺一個敵人,將獲得一定的金錢獎勵。
游戲失敗:
每有一個敵人沖進城堡,城堡的生命值下降一定的數值,當城堡的生命值為0時,則游戲失敗。
游戲勝利:
隨著時間的推移,敵人的實力會越來越強,數量也會越來越多,所以你是不可能勝利的,哈哈。
游戲界面說明:
T1-T3代表不同的箭塔類型,不同的箭塔類型具有不同的價格以及能力;
XXX代表出售箭塔(半價);
Pause代表暫停游戲;
Quit代表退出游戲。
玩家通過左鍵選中箭塔/出售箭塔標識,右鍵放棄當前選中的內容。鼠標中間箭用于控制箭塔射擊的方向,否則箭塔將自由射擊。
選中箭塔后,將其移動到你認為合適的位置,點擊鼠標左鍵即可在該位置建造一個箭塔(當然前提是你賬戶余額買得起箭塔,不然只能打怪攢錢了);選中出售箭塔后,將出售箭塔標識放在已建造的箭塔上,點擊鼠標左鍵,即可出售選中的箭塔。
逐步實現:
Step1:明確游戲主邏輯
游戲主邏輯應當是這樣的:
代碼描述如下:
Step2:實現游戲開始界面
這里的要點在于當檢測到鼠標移動到按鈕上時,執行按鈕變色操作,檢測到鼠標點擊按鈕位置時,跳出游戲開始界面。
展開 Python制作經典坦克大戰小游戲
Step3:實現游戲主循環
主循環的代碼比較長,不過邏輯很清晰。首先展示游戲開始界面,玩家在此界面選擇游戲模式后進入游戲;在游戲中,需要進行一系列的碰撞檢測以及觸發碰撞產生的一系列事件,并繪制當前存在的所有物體;最后,若游戲失敗,則顯示游戲失敗界面,若通關,則顯示游戲成功界面
All Done!
Python制作經典的吃豆豆小游戲
原理簡介
游戲簡介:
玩家通過↑↓←→鍵控制游戲的主角吃豆人吃掉藏在迷宮內的所有豆子,并且不能被鬼魂抓到。
若能順利吃完迷宮內的所有豆子并且不被鬼魂抓到,則游戲勝利,否則游戲失敗。
逐步實現:
Step1:定義游戲精靈類
首先,讓我們先來明確一下該游戲需要哪些游戲精靈類。
① 墻類
② 食物類(即豆豆)
③ 角色類
角色類包括吃豆人和鬼魂,鬼魂由電腦控制其運動軌跡,吃豆人由玩家控制其運動軌跡。
顯然,其均需具備更新角色位置和改變角色運動方向的能力,其源代碼如下:
Step2:設計游戲地圖
利用Step1中定義的游戲精靈類,我們就可以開始設計游戲地圖了。由于時間有限,我只寫了一個關卡的游戲地圖,有興趣的小伙伴可以在此基礎上進行擴展(在我的源代碼基礎上進行擴展是很方便滴~)。游戲地圖的設計包括以下四方面內容:
① 創建墻
② 創建門(一開始關幽靈用的)
③ 創建角色
④ 創建食物
因為食物不能和墻、門以及角色的位置重疊,所以為了方便設計游戲地圖,要先創建完墻、門以及角色后再創建食物:
Step3:設計游戲主循環
接下來開始設計游戲主循環。
展開 Wolfram:25個最好的猜單詞游戲
但是模擬整個游戲可能需要多達 26 個這樣的選擇,由于我想模擬 1500 萬個游戲,我花了幾分鐘時間使用 Wolfram Workbench 中的 Profiler 來了解時間的去向,結果得到了一個快 10 倍的版本。如果要重復或改進我的分析,此實施位于帖子的底部。
然后我用 gridMathematica 并行運行了它。如果我能夠使用 Wolfram-Alpha 的硬件,我將在幾分鐘內完成,但我只有幾臺閑置的辦公電腦,所以我讓它在周末運行。
我為字典中的每個詞做了 50 個游戲的初始運行。足夠收斂到真實結果的10% 以內,也足夠做一個粗略的排序。然后我對更有希望的詞進行了進一步的試驗,在 1000 個最佳詞的名單上共進行了 3000 場游戲。這足以讓我對它們的排序有相當的把握。
為了使其他人不必消耗 CPU 周期,我在這里包括了 50MB 的生成數據。
現在我們有了這些數據,我們就可以開始分析了:
以下是我對 "困難 "一詞得到的結果:
數據顯示了 50 場比賽中每場的猜錯次數。我們可以看到,"difficult"這個詞并不難,平均需要 3.3 次錯誤的猜測--這還不足以讓我的設計中開始畫人。在50場比賽中,該算法從未在10場比賽中失敗過,甚至在 13 場比賽中接近失敗。盡管如果它下的是 8 局棋,它就會輸一次。
讓我們來看看算法在從字典中隨機選擇的一個詞上的整體表現(最初的假設)。我們不能看平均失誤率,因為一個猜錯13個的游戲和一個猜錯 20 個 的游戲同樣是一個失敗者。我們關心的是勝率,而這些勝率取決于游戲的大小。
例如,如果我們在 13 場比賽中選擇 "貓",那么我們將有 23% 的時間擊敗算法。
展開 python制作拼圖小游戲
原理介紹
游戲簡介:
將圖像分為m×n個矩形塊,并將圖像右下角的矩形塊替換為空白塊后,將這些矩形塊隨機擺放成原圖像的形狀。游戲目標為通過移動非空白塊將隨機擺放獲得的圖像恢復成原圖像的模樣,且規定移動操作僅存在于非空白塊移動到空白塊。
例如下圖所示:
逐步實現:
Step1:游戲初始界面
既然是游戲,總得有個初始界面吧?
OK,我們先寫一個游戲初始界面:
效果是這樣子的:
根據玩家自身水平,可以選擇不同難度的拼圖游戲。
Step2:定義移動操作
定義移動操作的目的是為了移動拼圖(好像是廢話T_T),具體實現起來十分簡單:
Step3:游戲主界面
OK,有了前面的鋪墊,我們可以開始實現我們的游戲主界面了。
首先,我們需要打亂拼圖,但是隨機打亂很可能導致拼圖無解,因此我們通過隨機移動拼圖來實現打亂拼圖的效果,這也是我們先定義拼圖的移動操作的主要原因:
游戲主界面初始化:
最后實現主界面的顯示刷新以及事件響應等功能:
Step4:游戲結束界面
當玩家完成拼圖后,需要顯示游戲結束界面,和游戲初始界面類似,實現起來都比較簡單:
OK,大功告成!!!
展開 
Python自動玩"別再踩白塊了"小游戲
先睹為快
首先,在瀏覽器中打開下面這個游戲鏈接:
打開瀏覽器搜索4399小游戲
游戲加載完畢后,選擇該游戲的經典模式,游戲界面類似下圖所示:
在cmd窗口運行autoplay.py文件即可讓python自動玩這個小游戲了~
由于游戲主界面的位置隨電腦和瀏覽器的不同而不同,因此,若運行失敗,請自行調整下圖所示的bbox參數:
4個數字分別代表游戲界面左上頂點x坐標,y坐標和右下頂點x坐標,y坐標。
原理簡介
游戲規則:
原理介紹:
原理其實挺簡單的,主循環的代碼如下圖所示:
首先是截取游戲界面:
游戲規則:
原理介紹:
原理其實挺簡單的,主循環的代碼如下圖所示:
首先是截取游戲界面:
二值化游戲界面:
形態學處理:
實現輪廓檢測:
利用pyautogui模塊模擬點擊檢測到的黑塊就可以實現自動玩這個游戲了。
展開 Python制作寶石消消樂小游戲
原理簡介
游戲規則:
玩家通過鼠標交換相鄰的拼圖,若交換后水平/豎直方向存在連續三個相同的拼圖,則這些拼圖消失,玩家得分,同時生成新的拼圖以補充消失的部分,否則,交換失敗,玩家不得分。
玩家需要在規定時間內獲取盡可能高的得分。
逐步實現:
Step1:初始化
游戲初始化,并加載必要的游戲素材:
Step2:定義游戲精靈類
游戲中需要用到鼠標與拼圖塊之間的碰撞檢測,從而操作拼圖塊移動,因此我們定義一個拼圖塊游戲精靈類以方便實現這些功能:
Step3:實現游戲主循環
邏輯其實很簡單,就是不斷檢測是否有鼠標點擊事件發生,如果有,則判斷鼠標點擊時的位置是否在某拼圖塊的位置區域內,若在,則選中該拼圖塊,否則不選中。
當有第二塊拼圖塊被選中時,則判斷兩個拼圖塊是否滿足拼圖交換的條件,若滿足,則交換拼圖塊,并獲得獎勵,否則不交換并取消選這兩個拼圖塊的選中狀態。
源代碼如下圖所示:
Step4:游戲結束界面
游戲倒計時結束后,進入游戲結束界面,界面顯示用戶當前得分。同時,若用戶鍵入R鍵則重新開始游戲,鍵入ESC鍵則退出游戲。
源代碼實現如下:
All Done!完整源代碼詳見相關文件。
展開 基于Python的《瑪麗冒險》小游戲 ¥50
注意:在使用第三方模塊時,首先需要使用pip install命令安裝該模塊,可以在Python命令窗口中執行以下命令:
在PyCharm中運行《瑪麗冒險》即可進入如圖1所示的游戲主界面。
圖1 游戲主界面
具體的操作步驟如下:
(1)游戲主窗體界面顯示后,游戲的背景地圖將自動加載與移動,此時會隨機出現管道、導彈障礙物。當遇到障礙物時按下鍵盤中的空格按鍵,瑪麗將實現跳躍,如圖2所示。
圖2 小瑪麗跳躍
(2)每當越過一次障礙時,右上角的積分將自動增加1分。如圖3所示。
圖3 越過障礙增加積分
(3)如果瑪麗在移動的過程中不小心撞到了障礙物,此時游戲主界面的中間位置將顯示“Game Over”游戲結束的文字。如圖4所示。
圖4 游戲結束
游戲結束后,再次按下空格鍵將重新啟動游戲。(4)如果不需要播放游戲的背景音樂時,可以單擊左上角的音樂按鈕,背景音樂播放時,控制按鈕的運行效果如圖5所示。背景音樂停止時,控制按鈕的運行效果如圖6所示。
展開 Python代碼實現“FlappyBird”小游戲
原理介紹
FlappyBird游戲簡介:
玩家通過空格鍵控制一只小鳥,使其跨越由各種不同長度水管所組成的障礙物,當小鳥碰撞到障礙物或跌至屏幕最底端時,游戲結束。
逐步實現:
Step1:定義精靈類
為了方便實現小鳥和水管之間碰撞的檢測,我們先定義一些精靈類,包括:
① 小鳥類
隨著游戲時間的推移,小鳥應當具有更新自身位置的能力,即當玩家按下空格鍵時,小鳥向上跳躍,否則小鳥向下墜落。另外,為了使游戲場景更加真實,小鳥在向上跳躍或者向下墜落之前,應當先調整身體角度。具體代碼實現如下:
② 管道類
管道分為管道體和管道頭。管道頭:
管道體:
可先簡單定義如下:
顯然,一個管道頭和若干個管道體組成了一個管道障礙物,管道障礙物兩兩同列,兩者之間留有一定的空間供小鳥穿過,就像這樣:
因此,我們定義一個大的管道類,以便構建一個完整的管道障礙物,代碼實現如下:
其中,更新管道的作用為通過管道的左移來實現小鳥不斷右移的效果。
Step2:實現游戲主循環
先初始化,載入圖片、音樂、字體等文件,并定義一些必要的常量:
現在就可以開始定義游戲主循環了!游戲主循環的邏輯十分簡單,先顯示游戲背景,然后根據玩家的操作更新小鳥位置,自動更新管道位置,并通過碰撞檢測以及小鳥的縱坐標來判斷游戲是否結束,若游戲結束,則顯示游戲結束畫面。當然你也需要根據玩家通過的管道數量來實時更新玩家當前的分數,這一步需寫在最后,否則分數會被管道所遮蓋,這顯然是不合理的,具體實現如下:
All Done!
展開