src/players/random.lisp @ 167ffd6a7a6a
Lisp grounder, work-in-progress
author |
Steve Losh <steve@stevelosh.com> |
date |
Mon, 26 Sep 2016 12:27:26 +0000 |
parents |
86ab44c2dfa8 |
children |
d21ec254ff4e |
(in-package #:scully.players.random)
;;;; Random Player ------------------------------------------------------------
(defclass random-player (ggp:ggp-player)
((role :type symbol :accessor rp-role)
(reasoner :accessor rp-reasoner)
(state :accessor rp-state)))
(define-with-macro (random-player :conc-name rp)
role reasoner state)
(defmethod ggp:player-start-game ((player random-player) rules role timeout)
(let ((reasoner (make-prolog-reasoner)))
(load-rules reasoner rules)
(setf (rp-role player) role
(rp-reasoner player) reasoner
(rp-state player) (initial-state reasoner))))
(defmethod ggp:player-stop-game ((player random-player))
(setf (rp-state player) nil
(rp-reasoner player) nil
(rp-role player) nil))
(defmethod ggp:player-update-game ((player random-player) moves)
(when moves
(with-random-player (player)
(setf state (next-state reasoner state moves)))))
(defmethod ggp:player-select-move ((player random-player) timeout)
(with-random-player (player)
(random-elt (legal-moves-for reasoner role state))))
;;;; Run ----------------------------------------------------------------------
(setf hunchentoot:*default-connection-timeout* nil) ; its_fine
(defvar *random-player* (make-instance 'random-player
:name "Scully-Random"
:port 5001))
; (ggp:start-player *random-player* :server :hunchentoot)
; (ggp:kill-player *random-player*)