2010-03-30 5 views
0

J'ai donc besoin de faire un jeu de simulateur de blackjack, mais n'arrive pas à comprendre ce qui ne va pas avec le shuffle. Il est supposé prendre une carte au hasard depuis le paquet, puis le mettre sur le dessus du paquet. Et enfin le supprimer du reste. Alors:devoirs blackjack shuffle

(as) (2) (3) (4) (5) ... (k)
si la carte est aléatoire laisser dire 5
(5) (as) (2) (3) (4) (5) ... (k)
puis il supprime le deuxième 5
(5) (ACE) (2) (3) (4) (6) ... (k)

voici le code:

(define deck '((A . C) (2 . C) (3 . C) (4 . C) (5 . C) (6 . C) (7 . C) (8 . C) (9 . C) (10 . C) (V . C) (Q . C) (K . C))) 

;auxilliary function for shuffle let you randomly select a card. 
(define shuffAux 
    (lambda (t) 
    (define cardR 
    (lambda (t) (list-ref t (random 13)))) 
    (cardR t))) 

;auxilliary function used to remove the card after the car to prevent 
you from removing the randomly selected from the car(begining of the deck). 
(define (removeDupC card deck) 
     (delete card (cdr deck)) 
    ) 

(define shuffle2ndtry 
    (lambda (deck seed) 
    (define do-shuffle 
     (lambda (deck seed) 
     (if (> seed 0)(
     (cons (shuffAux deck) deck) 
     (removeDupC (car deck) deck) 
     (- 1 seed)) 
     (write deck) 
     ) 
    ) 
    ) 
    (do-shuffle deck seed))) 

(define (shuffle deck seed) 
    (define cards (cons (shuffAux deck) deck)) 
    (write cards) 
    (case (> seed 0) 
    [(#t) 
     (removeDupC (car cards) (cdr cards)) 
     (shuffle cards (- seed 1))] 
    [(#f) (write cards)])) 

(define random 
(let ((seed 0) (a 3141592653) 
    (c 2718281829) (m (expt 2 35))) 
    (lambda (limit) 
    (cond 
    ((and (integer? limit)) 
    (set! seed (modulo (+ (* seed a) c) m)) 
    (quotient (* seed limit) m)) 
    (else 
    (/ (* limit (random 34359738368)) 
    34359738368)))))) 


;function in which you can delete an element from the list. 
(define delete 
    (lambda (item list) 
    (cond 
    ((equal? item (car list)) (cdr list)) 
    (else (cons (car list) (delete item (cdr list))))))) 



(
+0

Que se passe-t-il lorsque vous essayez d'exécuter le code? –

+0

Shuffle travaille est ici maintenant le nouveau code (define (graines de plate-forme Brasse) (définir le pont cartes (contre (pont Brasseaux))) (cas (> = graines 0) [(#t) (lecture aléatoire (removeDupC (cartes de voiture) cartes) (- graines 1))] [(#f) (écrire des cartes)])) ce que je reçois est-à-dire: ((7 C) (9 C) (.. 10 C) (8 C) (6 C) (5 C) (2 C) (Q C) (V C) (7 C) (3 C) (K C) (Comme vous pouvez le voir, il ya deux cartes (7. C) seulement besoin de se débarrasser de la voiture de la liste, mais j'ai besoin de la liste des cartes pour revenir exactement la même sauf sans la voiture qui semble impossible à cause de la définition au début. – octavio

Répondre

2

Il existe une meilleure façon de mélanger un deck comme ça. Avec votre méthode, il est possible qu'un groupe de cartes reste en ordre.

Il est préférable de faire une boucle dans le jeu et d'échanger chaque carte avec une position aléatoire. Vous voudriez utiliser un vecteur pour cela. En prime, ce sera beaucoup plus rapide :)

Questions connexes