Advertisement
Guest User

Untitled

a guest
Jul 18th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.65 KB | None | 0 0
  1. (defun board-init ()
  2.   (defparameter *board* (loop repeat 9 collect " ")))
  3. (defun turn-init ()
  4.   (defparameter *turn* 1))
  5. (defun show-something (board)
  6.   (format t "~{|~a~a~a|~%~}" board))
  7. (defun show-board ()
  8.   (show-something *board*))
  9.  
  10. (defun put-OX (turn pointer)
  11.   (setf (nth pointer *board*) turn))
  12.  
  13. (defparameter *position-IO*
  14.   (loop
  15.      for input in (list 7 8 9 4 5 6 1 2 3)
  16.      for pos below 9
  17.      collect (cons input pos)))
  18. (defun help ()
  19.   (format t "123/456/789 to write OX~%")
  20.   (show-something (loop for pos in *position-IO* collect (car pos)))
  21.   (format t "~%"))
  22.  
  23. (defun made-linep (i j k)
  24.   (and (eq (nth i *board*) (nth j *board*))
  25.        (eq (nth j *board*) (nth k *board*))
  26.        (symbolp (nth j *board*))))
  27. (defun made-linesp ()
  28.   (or
  29.    (made-linep 0 1 2)
  30.    (made-linep 3 4 5)
  31.    (made-linep 6 7 8)
  32.    (made-linep 0 3 6)
  33.    (made-linep 1 4 7)
  34.    (made-linep 2 5 8)
  35.    (made-linep 0 4 8)
  36.    (made-linep 2 4 6)))
  37.  
  38. (defun which-player-play ()
  39.   (if (eq 1 (mod *turn* 2))
  40.       (defparameter *player-is* 1)
  41.       (defparameter *player-is* 2)))
  42.  
  43. (defun OX-game ()
  44.   (board-init)
  45.   (turn-init)
  46.   (help)
  47.   (game-loop))
  48.  
  49. (defun game-loop ()
  50.   (if (< 9 *turn*)
  51.       (format t "it's draw! finish a game without either one winning~%")
  52.       (progn
  53.     (show-board)
  54.     (which-player-play)
  55.     (format t "player-~a writing ~[O~;X~] to ...~%"
  56.         *player-is* (1- *player-is*))
  57.     (let ((p (read)))
  58.       (put-OX
  59.        (if (eq 1 *player-is*)
  60.            'O 'X)
  61.        (cdr (assoc p *position-IO*))))
  62.     (if (made-linesp)
  63.         (progn (format t "player-~a win~%" *player-is*)
  64.            (show-board))
  65.         (progn (incf *turn*)
  66.            (game-loop))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement