Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun board-init ()
- (defparameter *board* (loop repeat 9 collect " ")))
- (defun turn-init ()
- (defparameter *turn* 1))
- (defun show-something (board)
- (format t "~{|~a~a~a|~%~}" board))
- (defun show-board ()
- (show-something *board*))
- (defun put-OX (turn pointer)
- (setf (nth pointer *board*) turn))
- (defparameter *position-IO*
- (loop
- for input in (list 7 8 9 4 5 6 1 2 3)
- for pos below 9
- collect (cons input pos)))
- (defun help ()
- (format t "123/456/789 to write OX~%")
- (show-something (loop for pos in *position-IO* collect (car pos)))
- (format t "~%"))
- (defun made-linep (i j k)
- (and (eq (nth i *board*) (nth j *board*))
- (eq (nth j *board*) (nth k *board*))
- (symbolp (nth j *board*))))
- (defun made-linesp ()
- (or
- (made-linep 0 1 2)
- (made-linep 3 4 5)
- (made-linep 6 7 8)
- (made-linep 0 3 6)
- (made-linep 1 4 7)
- (made-linep 2 5 8)
- (made-linep 0 4 8)
- (made-linep 2 4 6)))
- (defun which-player-play ()
- (if (eq 1 (mod *turn* 2))
- (defparameter *player-is* 1)
- (defparameter *player-is* 2)))
- (defun OX-game ()
- (board-init)
- (turn-init)
- (help)
- (game-loop))
- (defun game-loop ()
- (if (< 9 *turn*)
- (format t "it's draw! finish a game without either one winning~%")
- (progn
- (show-board)
- (which-player-play)
- (format t "player-~a writing ~[O~;X~] to ...~%"
- *player-is* (1- *player-is*))
- (let ((p (read)))
- (put-OX
- (if (eq 1 *player-is*)
- 'O 'X)
- (cdr (assoc p *position-IO*))))
- (if (made-linesp)
- (progn (format t "player-~a win~%" *player-is*)
- (show-board))
- (progn (incf *turn*)
- (game-loop))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement