You are not logged in. login register
Game pawn_whopping
name pawn_whopping
creator admin
number of roles 2
stylesheet chess_like/chess_like.xsl
GDL v1
matches show matches
statistics show game statistics

Game Description

; Pawnville Pawn whopping from Learning to Play Chess with Fritz and Chesster.
; Goal is to either move a pawn to the opposite side or capture all the 
; opponent's pawns.
; The game is played on a 8 x 8 board. This version ignores en passant.
(role x)
(role o)

; Initial conditions
(init (cell 1 7 o))
(init (cell 2 7 o))
(init (cell 3 7 o))
(init (cell 4 7 o))
(init (cell 5 7 o))
(init (cell 6 7 o))
(init (cell 7 7 o))
(init (cell 8 7 o))
(init (cell 1 2 x))
(init (cell 2 2 x))
(init (cell 3 2 x))
(init (cell 4 2 x))
(init (cell 5 2 x))
(init (cell 6 2 x))
(init (cell 7 2 x))
(init (cell 8 2 x))
(init (control x))

; Legal moves
(<= (legal ?p noop)
    (role ?p)
    (not (true (control ?p))))
(<= (legal ?p ?move)
    (true (control ?p))
    (can_move ?p ?move))
(<= (legal ?p noop)
    (role ?p)
    (not (can_move_somewhere ?p)))
; Move forward
(<= (can_move x (move ?x ?y1 ?x ?y2))
    (true (cell ?x ?y1 x))
    (succ ?y1 ?y2)
    (not (occupied ?x ?y2)))
(<= (occupied ?x ?y)
    (role ?r)
    (true (cell ?x ?y ?r)))
(<= (can_move o (move ?x ?y1 ?x ?y2))
    (true (cell ?x ?y1 o))
    (succ ?y2 ?y1)
    (not (occupied ?x ?y2)))
; First move can be a double.
(<= (can_move x (move ?x 2 ?x 4))
    (true (cell ?x 2 x))
    (not (occupied ?x 3))
    (not (occupied ?x 4)))
(<= (can_move o (move ?x 8 ?x 6))
    (true (cell ?x 8 o))
    (not (occupied ?x 7))
    (not (occupied ?x 6)))
; Capture diagonally
(<= (can_move x (capture ?x1 ?y1 ?x2 ?y2))
    (true (cell ?x1 ?y1 x))
    (true (cell ?x2 ?y2 o))
    (succ ?y1 ?y2)
    (or (succ ?x1 ?x2)
        (succ ?x2 ?x1)))
(<= (can_move o (capture ?x1 ?y1 ?x2 ?y2))
    (true (cell ?x1 ?y1 o))
    (true (cell ?x2 ?y2 x))
    (succ ?y2 ?y1)
    (or (succ ?x1 ?x2)
        (succ ?x2 ?x1)))

; Transition rules
(<= (next (cell ?x ?y ?p))
    (true (cell ?x ?y ?p))
    (not (changes ?x ?y)))
(<= (next (cell ?x ?y ?p))
    (does ?p (move ?any_x ?any_y ?x ?y)))
(<= (next (cell ?x ?y ?p))
    (does ?p (capture ?any_x ?any_y ?x ?y)))

(<= (changes ?x ?y)
    (does ?r (move ?x ?y ?any_x ?any_y)))
(<= (changes ?x ?y)
    (does ?r (capture ?x ?y ?any_x ?any_y)))
(<= (changes ?x ?y)
    (does ?r (capture ?any_x ?any_y ?x ?y)))

; Control
(<= (next (control o))
    (true (control x)))
(<= (next (control x))
    (true (control o)))

; Goal
(<= (goal x 100)

(<= (goal o 100)

(<= (has_pieces ?p)
    (true (cell ?x ?y ?p)))

(<= (goal ?p 50)
    (role ?p)
    (not (can_move_somewhere x))
    (not (can_move_somewhere o))
    (not xwins)
    (not owins))

(<= (goal x 0)

(<= (goal o 0)

(<= xwins
    (true (cell ?any_x 8 x)))
(<= xwins
    (not (has_pieces o)))

(<= owins
    (true (cell ?any_x 1 o)))
(<= owins
    (not (has_pieces x)))

; Terminal conditions
(<= terminal
    (goal ?role 100))

(<= terminal
    (not (can_move_somewhere x))
    (not (can_move_somewhere o)))

(<= (can_move_somewhere ?p)
    (can_move ?p ?m))

; Successor axioms
(succ 1 2)
(succ 2 3)
(succ 3 4)
(succ 4 5)
(succ 5 6)
(succ 6 7)
(succ 7 8)

sees_XML(...) rules

(<= (sees_xml random ?t) (true ?t))
(<= (sees_xml ?p ?t) (role ?p) (distinct ?p random) (true ?t))