程序化生成

出自維基百科,自由嘅百科全書
Jump to navigation Jump to search
六樖用程序化生成嘅虛擬樹

程序化生成粵拼cing4 zeoi6 faa3 sang1 sing4英文procedural generation)係電腦科學上嘅一個概念,指用演算法嚟生成數據嘅做法。舉個例子說明,程序化生成喺電子遊戲設計上好常用:有啲遊戲可能會想幅地圖嘅地形有啲隨機性嘅起伏-例子有做個創世神(Minecraft)-於是個遊戲程式要嘅嘢就唔係好似一般嘅遊戲噉,死記住幅地圖係乜嘢樣嘅,而係記住一段演算法,並且喺個玩家要求個程式整一幅地圖(撳「開始遊戲」)嗰時,即場用段演算法整一幅地圖出嚟。呢啲演算法當中可以有隨機性,所以次次產生地圖嗰陣,最後出嗰幅地圖都唔同樣。程序化生成常見於開放世界遊戲生存遊戲,因為呢類遊戲好多時會想個遊戲世界似真嘅世界噉,次次玩都唔同樣[1][2]

電子遊戲製作電腦圖像等嘅領域上,程序化生成都係一種常用嘅技術。用程序化生成有唔少好處,例如用呢種做法所造出嚟嘅檔案往往會細過一般嘅做法-用程序化生成嘅話,部電腦只係需要記住一段源碼,然後喺有需要嗰陣即場用段碼砌柞數據出嚟,而唔係好似一般做法噉,死記住一大柞數據,而噉做好多時表示,電腦要死記嘅訊息量會少咗[3]

電子遊戲應用[編輯]

喺電子遊戲設計上,程序化生成嘅一個常見應用係用嚟整關卡:喺好多類型嘅電子遊戲入面,玩家都要過若干個關卡,過嗮之後打爆機;廿世紀尾嘅電子遊戲嘅做法主流係要個遊戲程式死記住每一個關卡係點嘅樣嘅;但呢種做法有個問題,就係玩家次次玩某一關,嗰一關都會係一個樣嘅,間接減低咗隻遊戲嘅重玩價值(replay value)。相比之下,如果一隻遊戲每一個關卡都係用程序化生成整嘅,而且每一關嘅相應演算法當中有隨機性,就可以做到每次玩一關嗰時嗰關都會有少少唔同樣,可以用嚟提一隻遊戲嘅重玩價值[4]

一般嚟講,一個用程序化生成整遊戲內容嘅程式要有以下部份[4]

  1. 生成遊戲內容;
  2. 用某啲演算法評估個內容啱唔啱用,例:用程序化生成產生一個關卡,再睇吓呢一個關卡係咪有可能過得到嘅(因為個演算法可能有時會意外產生一個根本冇可能過到嘅關卡);
  3. 如果步驟 2 嘅分析顯示個內容有問題,返去步驟 1;
  4. 如果步驟 2 嘅分析顯示佪內容冇問題,攞個內容去用。
例子碼

以下嘅 C# 碼可以用嚟喺遊戲空間當中產生一間房[4]

class Room extends Sprite {
    // 一柞變數表示間房嘅坐標位置。
    public var x1:Int;
    public var x2:Int;
    public var y1:Int;
    public var y2:Int;
 
    // 變數表示間房嘅長同闊。
    public var w:Int;
    public var h:Int;
 
    // 變數表示間房嘅中心點。
    public var center:Point;
 
    // 產生一間新嘅四方形房。
    public function new(x:Int, y:Int, w:Int, h:Int) { // 攞四個整數做輸入。呢四個數字可以用隨機數產生法產生。
        super();
 
        x1 = x;
        x2 = x + w;
        y1 = y;
        y2 = y + h;
        this.x = x * Main.TILE_WIDTH;
        this.y = y * Main.TILE_HEIGHT;
        this.w = w;
        this.h = h;
        center = new Point(Math.floor((x1 + x2) / 2), // 用簡單嘅幾何原理,由間房嘅坐標位置計出佢中心點嘅坐標。
            Math.floor((y1 + y2) / 2));
    }
 
    // 睇吓間房有冇同第間房相交(檢查吓個內容有冇問題),如果有,呢個子程序會俾 true 做輸出。
    public function intersects(room:Room):Bool {
        return (x1 <= room.x2 && x2 >= room.x1 &&
            y1 <= room.y2 && room.y2 >= room.y1);
    }
}

睇埋[編輯]

參考書[編輯]

  • Ebert, David S.; Musgrave, F. Kenton; Peachey, Darwyn; Perlin, Ken; Worley, Steve (2002). Texturing and Modeling: A Procedural Approach (3rd ed.). Morgan Kaufmann. ISBN 978-1-558-60848-1.
  • Shaker, Noor; Togelius, Julian; Nelson, Mark J. (2016). Procedural Content Generation in Games: A Textbook and an Overview of Current Research. Springer. ISBN 978-3-319-42714-0.

[編輯]

  1. Shaker, Noor; Togelius, Julian; Nelson, Mark J. (2016). Procedural Content Generation in Games: A Textbook and an Overview of Current Research. Springer.
  2. Moss, Richard (January 1, 2016). "7 uses of procedural generation that all developers should study 互聯網檔案館歸檔,歸檔日期2019年8月27號,.". Gamasutra.
  3. Cook, Michael (August 10, 2016). "Alien Languages: How We Talk About Procedural Generation". Gamasutra.
  4. 4.0 4.1 4.2 Create a Procedurally Generated Dungeon Cave System.

[編輯]