X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=base.lisp;h=2987b1d212de35bd6b1e52db95adfa1c3a037b4a;hb=7bbe870580505035c481924742fd8da6ebb041c6;hp=ac4fb55d8d91c256bb3f2844913317f58fe390cb;hpb=48b1a775e575a66bc154620107a8e27321ea306c;p=reversi.git diff --git a/base.lisp b/base.lisp index ac4fb55..2987b1d 100644 --- a/base.lisp +++ b/base.lisp @@ -8,7 +8,7 @@ ;;;; Programer: Kevin Rosenberg based on code by Peter Norvig ;;;; Date Started: 1 Nov 2001 ;;;; -;;;; $Id: base.lisp,v 1.3 2003/05/06 15:51:20 kevin Exp $ +;;;; $Id$ ;;;; ;;;; This file is Copyright (c) 2001-2002 by Kevin M. Rosenberg ;;;; and Copyright (c) 1998-2002 Peter Norvig @@ -20,9 +20,6 @@ (in-package #:reversi) -(eval-when (:compile-toplevel) - (declaim (optimize (safety 1) (space 0) (speed 3) (compilation-speed 0)))) - (defparameter +all-directions+ '(-11 -10 -9 -1 1 9 10 11)) (defconstant +default-max-minutes+ 30) @@ -80,7 +77,7 @@ (record-game? :type boolean :initarg :record-game? :documentation "Whether to record moves and clcck of this game" :reader record-game?) - (final-result :type fixnum :initarg :final-result + (final-result :type (or null fixnum) :initarg :final-result :documentation "Final count, is NIL while game in play" :accessor final-result) (max-minutes :type fixnum :initarg :max-minutes @@ -103,8 +100,10 @@ :clock (make-clock +default-max-minutes+))) -(defun name-of (piece) (char ".@O?" piece)) -(defun title-of (piece) (nth (1- piece) '("Black" "White")) ) +(defun name-of (piece) (schar ".@O?" piece)) +(defun title-of (piece) + (declare (fixnum piece)) + (nth (the fixnum (1- piece)) '("Black" "White")) ) (defmacro opponent (player) `(if (= ,player black) white black)) @@ -113,7 +112,9 @@ `(the piece (aref (the board ,board) (the square ,square)))) (defparameter all-squares - (loop for i from 11 to 88 when (<= 1 (mod i 10) 8) collect i) + (loop for i fixnum from 11 to 88 + when (<= 1 (the fixnum (mod i 10)) 8) + collect i) "A list of all squares") (defun initial-board () @@ -155,12 +156,14 @@ (defun count-difference (player board) "Count player's pieces minus opponent's pieces." (declare (type board board) - (fixnum player)) - (- (count player board) - (count (opponent player) board))) + (type fixnum player) + (optimize (speed 3) (safety 0) (space 0))) + (the fixnum (- (the fixnum (count player board)) + (the fixnum (count (opponent player) board))))) (defun valid-p (move) - (declare (type move move)) + (declare (type move move) + (optimize (speed 3) (safety 0) (space 0))) "Valid moves are numbers in the range 11-88 that end in 1-8." (and (typep move 'move) (<= 11 move 88) (<= 1 (mod move 10) 8))) @@ -182,8 +185,7 @@ (declare (type board board) (type move move) (type player player) - (optimize speed (safety 0)) -) + (optimize speed (safety 0) (space 0))) (if (= (bref board move) empty) (block search (let ((i 0)) @@ -202,8 +204,7 @@ (declare (type board board) (type move move) (type player player) - (optimize (speed 3) (safety 0)) -) + (optimize (speed 3) (safety 0) (space 0))) (if (= (the piece (bref board move)) empty) (block search (dolist (dir +all-directions+) @@ -246,8 +247,7 @@ (declare (type board board) (type move move) (type player) - (optimize (speed 3) (safety 0)) -) + (optimize (speed 3) (safety 0) (space 0))) (setf (bref board move) player) (dolist (dir +all-directions+) (declare (type dir dir)) @@ -260,8 +260,7 @@ (type move move) (type player player) (type dir dir) - (optimize (speed 3) (safety 0)) -) + (optimize (speed 3) (safety 0) (space 0))) (let ((bracketer (would-flip? move player board dir))) (when bracketer (loop for c from (+ move dir) by dir until (= c (the fixnum bracketer)) @@ -277,12 +276,11 @@ (type move move) (type player player) (type dir dir) - (optimize (speed 3) (safety 0)) -) + (optimize (speed 3) (safety 0) (space 0))) (let ((c (+ move dir))) (declare (type square c)) (and (= (the piece (bref board c)) (the player (opponent player))) - (find-bracketing-piece (+ c dir) player board dir)))) + (find-bracketing-piece (the fixnum (+ c dir)) player board dir)))) (defun find-bracketing-piece (square player board dir) "Return the square number of the bracketing piece." @@ -331,16 +329,6 @@ (defun replace-board (to from) (replace to from)) -#+ignore -(defun replace-board (to from) - (declare (type board to from) - (optimize (safety 0) (debug 0) (speed 3)) -) - (dotimes (i 100) - (declare (type 'fixnum i)) - (setf (aref to i) (aref from i))) - to) - #+allegro (defun replace-board (to from) (declare (type board to from)) @@ -351,7 +339,6 @@ (apply #'vector (loop repeat 40 collect (initial-board)))) - (defvar *move-number* 1 "The number of the move to be played") (declaim (type fixnum *move-number*))