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)))))))