遊戲描述語言
From Wikipedia, the free encyclopedia
Remove ads
遊戲描述語言(Game Description Language,簡稱「GDL」)係一種理論上可以用嚟描述任何遊戲嘅規則嘅形式化語言[1][2]。
要枚舉嘅嘢
喺最抽象嘅層面嚟講,遊戲描述語言第一步做嘅通常都係枚舉(enumerate)以下嘅嘢[1]:
- 遊戲入面嘅物件(object),例如係象棋入面嘅每一隻棋同棋盤上嘅每一格,白色嘅國王叫
wk(white king)、棋盤上嘅第五行第三格叫square (e,3)... 等等; - 遊戲嘅玩家(player),例如象棋有兩個玩家,
role(player 1)同role(player 2); - 每個玩家有乜嘢可能嘅行動(action),每個行動會點樣影響遊戲入面嘅物件嘅狀態同埋第啲玩家,例如
move表示郁某一隻棋,move(e1,e2)表示將某隻棋由e1移去e2; - 命題(proposition)喺遊戲每一個可能狀態下一係「真」(true)一係「假」(false)嘅,例如「白色國王喺
e1嗰格」(句法:true(p),當中p係評估緊佢係咪真嗰句命題)呢一句嘢喺每一個遊戲可能狀態下一係一係真一係假,而呢句嘢係咪真會影響邊一啲可能行動係啱規矩-如果「白色國王喺e1嗰格」呢句嘢係真,噉wk, move(e5,e6)唔會係一個可能行動; - 初時狀態,即係遊戲開始嗰陣狀態係點,例如喺國際象棋遊戲開始嗰陣,雙方嘅棋都係喺某個特定位置,個程式會有一柞
init(p),當中p係一句喺遊戲開始嗰陣係真嘅命題; - 遊戲喺乜嘢情況下結束同點定輸贏;
... 等等。例如井字過三關可以用以下噉嘅碼表達[註 1][1]:
... role(x) # 遊戲有 X 同 O 兩個玩家 role(o) ... input(R,mark(M,N)) :- role(R) & index(M) & index(N) #一個可能行動係「玩家 R 填 M, N 嗰格」 input(R,noop) :- role(R) ... base(cell(M,N,x)) :- index(M) & index(N) # 命題類型 1:「M,N 嗰格俾 X 填咗」 base(cell(M,N,o)) :- index(M) & index(N) # 命題類型 2:「M,N 嗰格俾 O 填咗」 base(cell(M,N,b)) :- index(M) & index(N) # 命題類型 3:「M,N 嗰格係空嘅」 base(control(x)) # 命題類型 4:「而家到 X 行」 base(control(o)) # 命題類型 4:「而家到 O 行」 ... init(cell(1,1,b)) # 遊戲原始狀態:1,1 嗰格係空嘅 init(cell(1,2,b)) # 遊戲原始狀態:1,2 嗰格係空嘅 ... # ... 如此類推 legal(W,mark(X,Y)) :- # 啱規則嘅嘢之一:要喺「X,Y 嗰格係空嘅」同「到 W 行」呢兩句命題都係真嗰陣,「玩家 W 填 X, Y 嗰格」先至有可能發生。 true(cell(X,Y,b)) & true(control(W)) ...
Remove ads
註釋
- 為咗方便起見,以下嘅碼有某啲部份省略咗。
睇埋
攷
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads