這篇遊戲開發資源大全由史丹福大學的amit整理。
這裡有什麼?
我喜歡由簡單的部分進行延伸。這個頁面包含了我在從事遊戲開發過程中收集的內容,這裡的內容並不是全部,而是代表了我需要了解的一些內容:幾個主題(並不是全部與遊戲開發有關),一般概念而不是特定平台的資訊(圖形、音訊、編譯),思路或者設計模式而不是源**(我發現從思想到**比從**到思想要容易),像gamedev tuts+、gamedev和gamasutra覆蓋的主題範圍比我的更廣。
最短路徑
在地圖上選擇行動路徑是乙個有趣的問題,有很多不同的方式,從簡單(比如直線行走直到遇到障礙)到複雜(啟發式路徑探索演算法)。這裡包含了一些常見的尋路演算法,其中一些偏向於a*:
這些頁面是尋路和物體移動的技術
a*a*是我當前最喜歡的演算法,因為它在各種空間中的花銷都不高,而且似乎比大多數的圖形搜尋演算法都要快。然而,它只是尋路問題的部分解。地圖設計和表示出現在a*之前,網格使用起來更方便,但有時得不到最優路徑。編隊、路徑跟蹤、移動、路徑修正、動畫出現在a*之後。很多遊戲根本不需要a*:它處理離散的移動而不是連續的,它應用在圖上,沒有充分利用空間相關性(比如乙個點與它的鄰居位置接近)或者時間相關性(比如幾秒前我們找到了乙個路徑,我們再試一次的結果可能是相似的)。如果遊戲內改變很頻繁,那就沒必要**的太遠。a*是乙個好的工具,但並不是唯一的選擇。
**和例子
a***的鏈結是第二版本,修復的一些bug,做了一些優化,對不同的啟發法和代價函式進行引數化處理。第乙個版本的**可以在steve woodcock的頁面獲得,這個版本可能更易讀和理解。
人工智慧
我玩遊戲的很多時候希望電腦對手能更強一點。有些時候電腦玩家給予了不同的規則,有些時候給予了更多的資源。結果就是遊戲讓人感覺不平衡了:很顯然電腦的智慧型不夠,本來應該是腦力對決的遊戲,卻變成了腦力和體力對決的遊戲。同時,我也不希望電腦的水平太高,如果那樣的話,它會經常擊敗我,我會很沮喪的。
計算機人工智慧常常被應用在電腦玩家上。然而,它也可以用在環境上(比如鐵路大亨中所有的交易),協助玩家上(比如文明中自動化的城市管理),或者是中立的遊戲角色上(比如角色扮演遊戲的非玩家角色)
人們在高談闊論將神經網路、遺傳演算法或者機器學習應用在遊戲開發上,在你這樣做之前先讀一下這個。我並不打算提供任何參考,我將指出一些最近談論太少的技術。
在為你遊戲中的人工智慧選擇技術時,記得越簡約越好。如果你知道答案,直接把答案寫在程式裡。如果你知道如何得到答案,那就把解答過程寫到程式裡。只有當你既不知道答案也不知道解決方案的時候,才有必要求助複雜的演算法(神經網路、模擬退火、遺傳演算法、包容結構、增強學習、遺傳程式設計)。這些技術在程式設計時間、遊戲效能、除錯難度、控制性等方面都要付出很高的代價。
遊戲設計
關於遊戲開發,如何選擇正確的設計是比較困難的一部分。什麼使得遊戲有趣?遊戲設計是一門藝術而不是一門科學,它包含的不僅僅是遊戲的規則,還有你與遊戲互動的方式。
區塊遊戲
資料結構
基本的區塊結構不依賴於你以2d、2.5d還是3d的方式呈現,這些文章是關於如何儲存你的資料。
區塊顯示
2d區塊的呈現方式有很多種。最直接的是自上而下或者側視。但是最近更常見的是2.5d和3d視角。這裡的大多數2.5d視角都不是真的,而是四邊形的。演算法
創世儘管地圖產生可以應用在非區塊世界上,但它更常應用在區塊上。在某個時刻觀察地圖上的某一點,產生的地圖質量很難跟人工繪製相比,然而它有三個優勢:(1)如果有許多世界需要繪製,它的花銷更少。(2)更多的復用資料因為下一次產生的世界會不同(3)遊戲演變過程中潛在的進化。
六角區塊
很多戰爭遊戲使用六角區塊而不是四角區塊。四角區塊與四個鄰居都有重合邊,但在某一時刻也與四個鄰居相鄰。這常常使得移動變得困難,因為對角線移動很難用整數來表示。在四角區塊中,你或者有四個方向,或者有八個方向。但在六角區塊中,你有乙個折中選擇——六個方向。六角區塊在某一時刻不會接觸任何乙個鄰居,它有更小的周長面積比,它看起來更整齊。不幸的是,在我們四角畫素的計算機世界裡,六角使用起來不太容易,所以我收集了一下文章幫助你把通常的四角區塊演算法轉換成六角區塊演算法。
物件導向程式設計
我發現物件導向程式設計對使用者互動、作業系統、遊戲中是十分有用的。同時,通常也認為物件導向是最佳的程式設計方式(尤其是在我建立這個頁面20世紀90年代),在另外一些條件下,其餘的程式設計方式可能是更好的選擇。因為我的大多數讀者都熟悉物件導向的程式設計,這裡我收集的內容大多數是通常方式的替代選擇。
冒險遊戲
冒險遊戲通常有很好的謎團和故事結構。當我建立這個頁面的時候,我對muds和互動**很感興趣。tads是使用的工具。從那時起,有了很多的工具,比如curveship, hugo, inklewriter, twine, quest, 和adrift。我從沒有參與過互動**專案,所以我並沒有很豐富的資源。你可以從互動**的wiki獲得更多。
指令碼語言
指令碼語言能讓你用較少的**寫出一些對效能要求不高的程式。你可以在遊戲中設計你的特定語言,這樣你的工作量就會比使用通用語言少一些。你也可以寫編譯器來優化很多事情(比如檔案大小而不是速度),支援更多的特色(比如執行時動態匹配),甚至是使用者自定義配置(對於發燒使用者)。
經濟學
經濟學是一門關於人類在管理資源(金錢、時間、幸福、原材料、貨物等)中如何做出選擇的學科。在很多策略遊戲中,經濟學都是設計的很重要的乙個方面。平衡你的遊戲中的資源可以成為遊戲中有趣的一部分。經濟學也是多人遊戲中很重要的一部分:你想要通過掙錢獎勵玩家,但你不能讓他們太富有,這樣新來的玩家就得不到樂趣了。我想探索的一件事是位置如何影響經濟。在高中經濟學中,商業活動通過定價完成,交易少的人將會獲勝。但如果考慮上運輸成本,那任何商業都可以共存,玩家必須考慮**要放置新的裝置來平衡各種變數(勞動的易得型、原材料的運輸成本、產品的運輸成本、稅率、地區法律等)
閱讀原文 »
史丹福大學學生整理的遊戲開發資源大全
這篇遊戲開發資源大全由史丹福大學的amit整理。這裡有什麼?我喜歡由簡單的部分進行延伸。這個頁面包含了我在從事遊戲開發過程中收集的內容,這裡的內容並不是全部,而是代表了我需要了解的一些內容 幾個主題 並不是全部與遊戲開發有關 一般概念而不是特定平台的資訊 圖形 音訊 編譯 思路或者設計模式而不是源 ...
程式設計正規化 史丹福大學 學習筆記《三》
本課繼續講解了c語言的強制型別轉換,之後介紹了結構體,陣列以及結構體中的陣列。和 的技巧 例1 double d 3.1416 char ch char d 取出d的位址,並重新解釋為char型,然後解引用。由於double為8bytes,而char為1bytes,因此ch表示的是原來double中...
程式設計正規化 史丹福大學 學習筆記《九》
接下來的課程會涉及到計算機體系結構和組合語言,解釋c c 片段是如何編譯成彙編 的,記憶體模型,函式呼叫,函式返回的型別等。4位元組變數的例子 int i int j i 10 j i 7 j 對應的彙編 m r1 4 10 store operation 將棧段中某個區域的值進行了更新 r2 m ...