-
Notifications
You must be signed in to change notification settings - Fork 172
/
Copy pathguessing_game.carp
54 lines (43 loc) · 1.43 KB
/
guessing_game.carp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
;; The number guessing game
(use IO)
(use Int)
(use String)
(Project.config "title" "Guessing")
(def guessing true)
(def answer 0)
(defn start-new-game! []
(do (println "~ The Number Guessing Game ~")
(println "(Enter q to quit.)\n")
(set! guessing true)
(set! answer (random-between 1 100))
(print "Please enter a number between 1 - 99: ")))
(defn exit! []
(do (println "Good bye...")
(set! guessing false)))
(defn play-again? [user-input]
(if (= user-input "y\n") true false))
(defn correct! []
(do (println "Correct!\n")
(print "Play again? (y/n): ")
(let [user-input (get-line)]
(if (play-again? &user-input)
(start-new-game!)
(exit!)))))
(defn guess-again [low-or-high]
(do (println &(str* @"Too " @low-or-high @"."))
(print "\nPlease guess again: ")))
(defn main []
(do (println "Seeding random number generator...\n")
(Random.seed-from (Double.from-int (System.time)))
(start-new-game!)
(while guessing
(let [user-input (get-line)
guessed-num (from-string &user-input)]
(if (= &user-input "q\n")
(exit!)
(match guessed-num
(Maybe.Nothing) (print "Invalid input.\nPlease guess again: ")
(Maybe.Just n)
(cond (< n answer) (guess-again "low")
(> n answer) (guess-again "high")
(correct!))))))))