схема домашнего задания блэкджек шаффл - PullRequest
0 голосов
/ 31 марта 2010

Итак, мне нужно сыграть в симулятор блэкджека, но я не могу понять, что не так с шаффлом. Предполагается, что карта будет случайно выбрана из колоды, а затем положена на колоду. И, наконец, удалить его из остальных. Итак:

(Ас) (2) (3) (4) (5) ... (к)
если случайная карта, скажем, 5
(5) (Ас) (2) (3) (4) (5) ... (к)
затем удаляет 2-й 5
(5) (туз) (2) (3) (4) (6) ... (к)

вот код:

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



(

1 Ответ

2 голосов
/ 31 июля 2010

Есть лучший способ перетасовать такую ​​колоду. С вашим методом, возможно, есть группа карт, которые остаются в порядке.

Лучше перебирать колоду, и для каждой карты меняйте ее случайным образом. Вы хотели бы использовать вектор для этого. В качестве бонуса это будет намного быстрее :) 1003 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...