All pastes #609016 Raw Edit

plutonas

public text v1 · immutable
·published 2007-07-08 16:57 UTC
rendered paste body
(defvar table)

(defun tic-tac-toe ()
  (setf table '((0 1 2) (3 4 5) (6 7 8)))
  (let ((n nil))
  (format t "~a~%" "welcome to tic-tac-toe!")
  (do ()
      (nil)     
    (setq n (read))
    (cond ((eq n 'quit)
	   (return-from tic-tac-toe))
	  (t
	   (tic-insert n table 'X)
	   (tic-my-play table)
	   (tic-print table))))))

(defun tic-print (table)
  (dolist (n table)
    (dolist (m n)
      (format t "~a  " m))
    (format t "~%")))

(defun tic-insert (n table sym)
  (multiple-value-bind (line pos) (floor (/ n 3))
    (setq pos (* 3 pos))
    (setf (nth pos (nth line table)) sym)))

(defun tic-my-play (table)
   (let ((space nil))
	    (dolist (sub table)
	      (dolist (i sub)
		(if (numberp i)
		    (push i space))))
	    (let ((place (nth (random (length space)) space)))
	      (tic-insert place table '-))))