Hra Ruleta ve Scheme
Program generuje náhodná čísla od 0 do 36. Hráči sázejí na jednotlivá čísla nebo skupiny podle evropské verze rulety. Program vyhodnotí tipy hráčů, určí zda-li vyhráli a případně vypíše i výhru.
Sázení je možné na: čísla, sudá a lichá čísla, červenou a černou barvu, sloupce, řady (program si poradí i když číslo nebude začátkem řady), sousední páry, čtverce sousedních čísel, šestice čísel v podobě dvou sousedních řad (program požaduje počáteční číslo šestice). Padne-li nula nebo neuhodne-li hráč daný tah, propadá výhra do Banku. Vyhraje-li hráč, vrací se mu sázka + násobek sázky z Banku.
#| --------------------------------- Evropska verze rulety ------------------------------ |#
(define cisla_cerna '(15 4 2 17 6 13 11 8 10 24 33 20 31 22 29 28 35 26))
(define cisla_cervena '(32 19 21 25 34 27 36 30 23 5 16 1 14 9 18 7 12 3))
(define sl1 '(0 1 4 7 10 13 16 19 22 25 28 31 34))
(define sl2 '(0 2 5 8 11 14 17 20 23 26 29 32 35))
(define sl3 '(0 3 6 9 12 15 18 21 24 27 30 33 36))
(define RND (random 37))
(define cislo
(lambda (c)
(cond
((= RND 0) (display " Prohra! Padlo cislo: "))
((= RND c) (display "Vyhra! (Vklad+ *35) Padlo cislo: "))
((= RND 0) (display " Prohra! Padlo cislo: "))
(else (display " Prohra! Padlo cislo: "))
)(+ RND 0)))
(define suda
(lambda ()
(cond
((= RND 0) (display " Prohra! Padlo cislo: "))
((even? RND) (display "Vyhra! (Vklad+ *1) Padlo cislo: "))
(else (display " Prohra! Padlo cislo: "))
)(+ RND 0)))
(define licha
(lambda ()
(cond
((= RND 0) (display " Prohra! Padlo cislo: "))
((odd? RND) (display "Vyhra! (Vklad+ *1) Padlo cislo: "))
(else (display " Prohra! Padlo cislo: "))
)(+ RND 0)))
(define cerna
(lambda ()
(cond
((= RND 0) (display " Prohra! Padlo cislo: "))
((memq RND cisla_cerna) (display "Vyhra! (Vklad+ *1) Padlo cislo: "))
(else (display " Prohra! Padlo cislo: "))
)(+ RND 0)))
(define cervena
(lambda ()
(cond
((= RND 0) (display " Prohra! Padlo cislo: "))
((memq RND cisla_cervena) (display "Vyhra! (Vklad+ *1) Padlo cislo: "))
(else (display " Prohra! Padlo cislo: "))
)(+ RND 0)))
(define 1az12
(lambda ()
(cond
((= RND 0) (display " Prohra! Padlo cislo: "))
((<= RND 12) (display "Vyhra! (Vklad+ *2) Padlo cislo: "))
(else (display " Prohra! Padlo cislo: "))
)(+ RND 0)))
(define 13az24
(lambda ()
(cond
((= RND 0) (display " Prohra! Padlo cislo: "))
((and (> RND 12)(<= RND 24)) (display "Vyhra! (Vklad+ *2) Padlo cislo: "))
(else (display " Prohra! Padlo cislo: "))
)(+ RND 0)))
(define 25az36
(lambda ()
(cond
((= RND 0) (display " Prohra! Padlo cislo: "))
((>= RND 25) (display "Vyhra! (Vklad+ *2) Padlo cislo: "))
(else (display " Prohra! Padlo cislo: "))
)(+ RND 0)))
(define 1az18 (lambda () (cond ((= RND 0) (display " Prohra! Padlo cislo: ")) ((<= RND 18) (display "Vyhra! (Vklad+ *1) Padlo cislo: ")) (else (display " Prohra! Padlo cislo: ")) )(+ RND 0)))
(define 19az36 (lambda () (cond ((= RND 0) (display " Prohra! Padlo cislo: ")) ((>= RND 19) (display "Vyhra! (Vklad+ *1) Padlo cislo: ")) (else (display " Prohra! Padlo cislo: ")) )(+ RND 0)))
(define sloupec1 (lambda () (cond ((= RND 0) (display " Prohra! Padlo cislo: ")) ((= (modulo RND 3) 1) (display "Vyhra! (Vklad+ *2) Padlo cislo: ")) (else (display " Prohra! Padlo cislo: ")) )(+ RND 0)))
(define sloupec2 (lambda () (cond ((= RND 0) (display " Prohra! Padlo cislo: ")) ((= (modulo RND 3) 2) (display "Vyhra! (Vklad+ *2) Padlo cislo: ")) (else (display " Prohra! Padlo cislo: ")) )(+ RND 0)))
(define sloupec3 (lambda () (cond ((= RND 0) (display " Prohra! Padlo cislo: ")) ((= (modulo RND 3) 0) (display "Vyhra! (Vklad+ *2) Padlo cislo: ")) (else (display " Prohra! Padlo cislo: ")) )(+ RND 0)))
(define rada (lambda (r) (cond ((= RND 0) (display " Prohra! Padlo cislo: ")) ((= (modulo RND 3) 1) (if (or (= (list-ref sl1 (/ (+ RND 2) 3)) (+ r 0)) (= (list-ref sl1 (/ (+ RND 2) 3)) (- r 1)) (= (list-ref sl1 (/ (+ RND 2) 3)) (- r 2))) (display "Vyhra! (Vklad+ *11) Padlo cislo: ") (display " Prohra! Padlo cislo: "))) ((= (modulo RND 3) 2) (if (or (= (list-ref sl2 (/ (+ RND 1) 3)) (+ r 0)) (= (list-ref sl2 (/ (+ RND 1) 3)) (- r 1)) (= (list-ref sl2 (/ (+ RND 1) 3)) (+ r 1))) (display "Vyhra! (Vklad+ *11) Padlo cislo: ") (display " Prohra! Padlo cislo: "))) ((= (modulo RND 3) 0) (if (or (= (list-ref sl2 (/ (+ RND 0) 3)) (+ r 0)) (= (list-ref sl2 (/ (+ RND 0) 3)) (+ r 1)) (= (list-ref sl2 (/ (+ RND 0) 3)) (+ r 2))) (display "Vyhra! (Vklad+ *11) Padlo cislo: ") (display " Prohra! Padlo cislo: "))) (else (display " Prohra! Padlo cislo: ")))(+ RND 0)))
(define par (lambda (d1 d2) (cond ((= RND 0) (display " Prohra! Padlo cislo: ")) ((or (= RND d1) (= RND d2)) (display "Vyhra! (Vklad+ *17) Padlo cislo: ")) (else (display " Prohra! Padlo cislo: ")) )(+ RND 0)))
(define ctverec (lambda (c1 c2 c3 c4) (cond ((= RND 0) (display " Prohra! Padlo cislo: ")) ((or (= RND c1) (= RND c2) (= RND c3) (= RND c4)) (display "Vyhra! (Vklad+ *8) Padlo cislo: ")) (else (display " Prohra! Padlo cislo: ")) )(+ RND 0)))
(define sestice (lambda (s1) (cond ((= RND 0) (display " Prohra! Padlo cislo: ")) ((> RND 0) (if (memq RND (build-list (+ 6) (lambda (i) (* (+ i s1) 1)))) (display "Vyhra! (Vklad+ *5) Padlo cislo: ") (display " Prohra! Padlo cislo: ")) )) (+ RND 0)))
#| --------------------------------- Ukazky sazek ---------------------------------------|# ; (cislo 3) (suda) (licha) (cerna) (cervena) (1az12) (13az24) (25az36) ; (1az18) (19az36) (sloupec1) (sloupec2) (sloupec3) (rada 16) (rada 29) ; (par 16 19) (par 10 11) (ctverec 8 9 11 12) (sestice7) (sestice 25)
#| ----------------------------------- Tipy hracu ---------------------------------------|#
(cislo 17) (cislo 29) (suda) (13az24) (rada 27) (rada 9) (par 19 20) (sestice 7) (sestice 28)