From b5081c7f72d98993a6172100d58d291294a7dc02 Mon Sep 17 00:00:00 2001 From: Dan Date: Sun, 18 May 2008 21:00:04 -0700 Subject: [PATCH] more rearranging --- board.lisp | 64 +++++++++++++++++++++++++++++++++++++++++++++++---- env.lisp | 1 + fink.lisp | 2 ++ gobot.lisp | 61 ++++++++---------------------------------------- gtp.lisp | 8 +++---- packages.lisp | 7 +++--- 6 files changed, 80 insertions(+), 63 deletions(-) diff --git a/board.lisp b/board.lisp index 7a8e39e..614a3a0 100644 --- a/board.lisp +++ b/board.lisp @@ -45,7 +45,7 @@ -(defclass board () +(defclass basic-board () ((boardsize :initarg boardsize ; :initform *boardsize* @@ -57,10 +57,66 @@ (board :accessor board))) -(defmethod initialize-instance :after ((board board) &key (from-board nil)) +(defmethod initialize-instance :after ((board basic-board) &key (from-board nil)) (if (eql from-board nil) - (setf (board-def-type board) (make-board (boardsize board) (board-def-type board))) + (setf (board-def-type board) (make-2d-board (boardsize board) (board-def-type board))) (progn (setf (boardsize board) (boardsize from-board)) (setf (board-def-type board) (board-def-type from-board)) - (setf (board board) (copy-2d-board (board from-board)))))) \ No newline at end of file + (setf (board board) (copy-2d-board (board from-board)))))) + + +(defgeneric prune (board) + () + +(defmethod genmove ((board basic-board) player) + (prune board player) + ;(focus board player) + (minmax board player) + (select-move board player)) + + + +;(defun make-move (board player) +; (select-move (score board player))) + +;(defun score (board player) +; (let ((score-board (make-board (length board) 0))) +; (dolist (slist *score-functions*) +; (merge-score-board score-board (funcall (first slist) board player) (second slist))) +; score-board)) + +;(defun merge-score-board (score-board scores weight) +; (dotimes (x (length score-board)) +; (dotimes (y (length score-board)) +; (set-stone score-board `(,x ,y) (+ (get-stone score-board `(,x ,y)) (* weight (get-stone scores `(,x ,y)))))))) + + +;(defun select-move (board) +; (let ((highest (get-stone board '(0 0))) +; (coords (make-array 10 :fill-pointer 0 :adjustable t))) +; (do ((x 0 (1+ x))) +; ((>= x (length board)) (aref coords (random (length coords)))) +; (do ((y 0 (1+ y))) +; ((>= y (length board))) +; (let ((score (get-stone board `(,x ,y)))) +; (if (> score highest) +; (progn +; (setf highest score) +; (setf coords (make-array 10 :fill-pointer 0 :adjustable t )) +; (vector-push-extend `(,x ,y) coords)) +; (if (= score highest) +; (if (= (random 2) 1) +; (vector-push-extend `(,x ,y) coords))))))))) + + +;(defun score-unused (board player) +; (let ((scores (make-board (length board) 0))) +; (dotimes (x (length board)) +; (dotimes (y (length board)) +; ;body +; (if (eql (get-stone board `(,x ,y)) nil) +; (set-stone scores `(,x ,y) 1)) +; ;end +; )) +; scores)) \ No newline at end of file diff --git a/env.lisp b/env.lisp index 39c12d7..a94387a 100644 --- a/env.lisp +++ b/env.lisp @@ -20,3 +20,4 @@ ;(load (concatenate 'string *src-root* "packages.lisp")) ;(load (concatenate 'string *src-root* "gobot.lisp")) ;(load (concatenate 'string *src-root* "gtp.lisp")) + diff --git a/fink.lisp b/fink.lisp index bd9bd3c..00f9f58 100644 --- a/fink.lisp +++ b/fink.lisp @@ -2,6 +2,8 @@ (defparameter *src-root* "/home/dan/src/my/gobot/") +asdas asd asd ad asd + (load (concatenate 'string *src-root* "packages.fasl")) (load (concatenate 'string *src-root* "netpipe.fasl")) (load (concatenate 'string *src-root* "board.fasl")) diff --git a/gobot.lisp b/gobot.lisp index 82c661d..44c4fc3 100644 --- a/gobot.lisp +++ b/gobot.lisp @@ -24,7 +24,7 @@ (setf *boardsize* newsize)) (defun init-board () - (setf *board* (make-board *boardsize*)) + (setf *board* (make-instance 'board :boardsize *boardsize*)) (setf *passed* nil) (setf *player* nil)) @@ -34,63 +34,22 @@ - +(defmethod play ((board board) coords player) + (set-stone (board board) coords player)) + - -(defun play (player coord-str) +(defun do-play (player coord-str) (setf *last-player* player) (if (string= coord-str "PASS") (setf *passed* t) - (set-stone *board* (str-to-coord coord-str) player))) + ;(set-stone *board* (str-to-coord coord-str) player))) + (play *board* (str-to-coord coord-str) player))) -(defun genmove (player) +(defun do-genmove (player) (setf *player* player) (if (or (eql *passed* t) (eql *last-player* player)) "pass" - (let ((move (coord-to-str (make-move *board* player)))) - (play player move) + (let ((move (coord-to-str (genmove *board* player)))) + (do-play player move) move))) -(defun make-move (board player) - (select-move (score board player))) - -(defun score (board player) - (let ((score-board (make-board (length board) 0))) - (dolist (slist *score-functions*) - (merge-score-board score-board (funcall (first slist) board player) (second slist))) - score-board)) - -(defun merge-score-board (score-board scores weight) - (dotimes (x (length score-board)) - (dotimes (y (length score-board)) - (set-stone score-board `(,x ,y) (+ (get-stone score-board `(,x ,y)) (* weight (get-stone scores `(,x ,y)))))))) - - -(defun select-move (board) - (let ((highest (get-stone board '(0 0))) - (coords (make-array 10 :fill-pointer 0 :adjustable t))) - (do ((x 0 (1+ x))) - ((>= x (length board)) (aref coords (random (length coords)))) - (do ((y 0 (1+ y))) - ((>= y (length board))) - (let ((score (get-stone board `(,x ,y)))) - (if (> score highest) - (progn - (setf highest score) - (setf coords (make-array 10 :fill-pointer 0 :adjustable t )) - (vector-push-extend `(,x ,y) coords)) - (if (= score highest) - (if (= (random 2) 1) - (vector-push-extend `(,x ,y) coords))))))))) - - -(defun score-unused (board player) - (let ((scores (make-board (length board) 0))) - (dotimes (x (length board)) - (dotimes (y (length board)) - ;body - (if (eql (get-stone board `(,x ,y)) nil) - (set-stone scores `(,x ,y) 1)) - ;end - )) - scores)) \ No newline at end of file diff --git a/gtp.lisp b/gtp.lisp index 449c238..9dd3126 100644 --- a/gtp.lisp +++ b/gtp.lisp @@ -57,10 +57,10 @@ (komi (go-bot:set-komi (read-from-string (second commands))) "") (clear_board (go-bot:init) "") - (play (go-bot:play (char (second commands) 0) (third commands)) "") - (genmove (go-bot:genmove (char (second commands) 0))) - (genmove_black (go-bot:genmove #\b)) - (genmove_white (go-bot:genmove #\w)) + (play (go-bot:do-play (char (second commands) 0) (third commands)) "") + (genmove (go-bot:do-genmove (char (second commands) 0))) + (genmove_black (go-bot:do-genmove #\b)) + (genmove_white (go-bot:do-genmove #\w)) ;(get_random_seed "0") ;(known_command) ;(list_commands) diff --git a/packages.lisp b/packages.lisp index e451141..9df7630 100644 --- a/packages.lisp +++ b/packages.lisp @@ -20,10 +20,9 @@ (defpackage board (:use :common-lisp) - (:export :board + (:export :basic-board :get-stone :set-stone - :make-board :coord-to-str :str-to-coord)) @@ -38,6 +37,6 @@ :set-boardsize :init-board :init - :play - :genmove + :do-play + :do-genmove )) \ No newline at end of file