projects
/
reversi.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
r10498: fix number type
[reversi.git]
/
base.lisp
diff --git
a/base.lisp
b/base.lisp
index 10edbde0e34502bc7af0a95af0fe065d5d14f3b6..2987b1d212de35bd6b1e52db95adfa1c3a037b4a 100644
(file)
--- a/
base.lisp
+++ b/
base.lisp
@@
-8,7
+8,7
@@
;;;; Programer: Kevin Rosenberg based on code by Peter Norvig
;;;; Date Started: 1 Nov 2001
;;;;
;;;; Programer: Kevin Rosenberg based on code by Peter Norvig
;;;; Date Started: 1 Nov 2001
;;;;
-;;;; $Id
: base.lisp,v 1.2 2002/10/25 13:09:11 kevin Exp
$
+;;;; $Id$
;;;;
;;;; This file is Copyright (c) 2001-2002 by Kevin M. Rosenberg
;;;; and Copyright (c) 1998-2002 Peter Norvig
;;;;
;;;; This file is Copyright (c) 2001-2002 by Kevin M. Rosenberg
;;;; and Copyright (c) 1998-2002 Peter Norvig
@@
-18,9
+18,7
@@
;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
;;;;***************************************************************************
;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
;;;;***************************************************************************
-(in-package :reversi)
-(declaim (optimize (safety 1) (debug 3) (speed 3) (compilation-speed 0)))
-
+(in-package #:reversi)
(defparameter +all-directions+ '(-11 -10 -9 -1 1 9 10 11))
(defconstant +default-max-minutes+ 30)
(defparameter +all-directions+ '(-11 -10 -9 -1 1 9 10 11))
(defconstant +default-max-minutes+ 30)
@@
-79,7
+77,7
@@
(record-game? :type boolean :initarg :record-game?
:documentation "Whether to record moves and clcck of this game"
:reader record-game?)
(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
:documentation "Final count, is NIL while game in play"
:accessor final-result)
(max-minutes :type fixnum :initarg :max-minutes
@@
-102,8
+100,10
@@
:clock (make-clock +default-max-minutes+)))
: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))
(defmacro opponent (player)
`(if (= ,player black) white black))
@@
-112,7
+112,9
@@
`(the piece (aref (the board ,board) (the square ,square))))
(defparameter all-squares
`(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 ()
"A list of all squares")
(defun initial-board ()
@@
-154,12
+156,14
@@
(defun count-difference (player board)
"Count player's pieces minus opponent's pieces."
(declare (type board board)
(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)
(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)))
"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)))
@@
-181,8
+185,7
@@
(declare (type board board)
(type move move)
(type player player)
(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))
(if (= (bref board move) empty)
(block search
(let ((i 0))
@@
-201,8
+204,7
@@
(declare (type board board)
(type move move)
(type player player)
(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+)
(if (= (the piece (bref board move)) empty)
(block search
(dolist (dir +all-directions+)
@@
-245,8
+247,7
@@
(declare (type board board)
(type move move)
(type player)
(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))
(setf (bref board move) player)
(dolist (dir +all-directions+)
(declare (type dir dir))
@@
-259,8
+260,7
@@
(type move move)
(type player player)
(type dir dir)
(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))
(let ((bracketer (would-flip? move player board dir)))
(when bracketer
(loop for c from (+ move dir) by dir until (= c (the fixnum bracketer))
@@
-276,12
+276,11
@@
(type move move)
(type player player)
(type dir dir)
(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)))
(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."
(defun find-bracketing-piece (square player board dir)
"Return the square number of the bracketing piece."
@@
-330,16
+329,6
@@
(defun replace-board (to from)
(replace to from))
(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))
#+allegro
(defun replace-board (to from)
(declare (type board to from))
@@
-350,7
+339,6
@@
(apply #'vector (loop repeat 40 collect (initial-board))))
(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*))
(defvar *move-number* 1 "The number of the move to be played")
(declaim (type fixnum *move-number*))