[HOME]

roulette.lisp

(defun select-chamber ()
  (loop
   (write-string "Chamber: ")
   (force-output)
   (clear-input)
   (let ((choice (ignore-errors (parse-integer (read-line)))))
     (when (and (numberp choice) (>= choice 1) (<= choice 6))
       (return-from select-chamber choice)))
   (write-line "Error! Select a number between 1 and 6")))

(defun russian-roulette ()
  (write-line "This is the game of russian roulette.")
  (let ((dollars 0))
    (loop
     (write-line "Select a chamber between 1 and 6")
     (let ((choice (select-chamber)) (barrel (1+ (random 6))))
       (when (= barrel choice)
	 (write-line "**Bang** you're dead!")
	 (return-from russian-roulette (values)))
       (incf dollars 100)
       (sleep 1)
       (write-line "**click**")
       (format t "You're new credit is ~R dollars." dollars)
       (unless (y-or-n-p "Try your luck again?")
	 (format t "Chicken! You walk away with ~D$.~%" dollars)
	 (return-from russian-roulette (values)))))))