Frage

Okay, letzte Frage und ich werde meine Nummer Ratespiel in Common Lisp fertig! : D. Jedes Mal, wenn das Spiel beginnt (oder ein neues Spiel nach dem ersten Spiel beginnt), wird die folgende Funktion aufgerufen

;;; Play the game
(defun play ()
    ;; If it's their first time playing this session,
    ;; make sure to greet the user.
    (unless (> *number-of-guesses* 0)
        (welcome-user))
    ;; Reset their remaining guesses
    (setq *number-of-guesses* 0)
    ;; Set the target value
    (setq *target*
        ;; Random can return float values,
        ;; so we must round the result to get
        ;; an integer value.
        (round
            ;; Add one to the result, because
            ;; (random 100) yields a number between
            ;; 0 and 99, whereas we want a number
            ;; from 1 to 100 inclusive.
            (+ (random 100) 1)))
    (if (eql (prompt-for-guess) t)
        (play)
        (quit)))

So angeblich jedes Mal, wenn der Spieler ein Spiel beginnt, *target* sollte auf eine neue Zufallszahl zwischen 1 bis 100 eingestellt werden. Doch jedes Mal, *target* standardmäßig auf 82. Wie kann ich machen (random) Akt ... Zufall?

War es hilfreich?

Lösung

Sie müssen den zufälligen Zustand zu Beginn des Programms auf Saatgut.

(setf *random-state* (make-random-state t))
;; # this initializes the global random state by
;;   "some means" (e.g. current time.)

Andere Tipps

Ich glaube, wenn Sie eine Funktion mit einer Zufallszahl darin definieren, wird nicht aufgerufen, wenn Sie die Funktion aufrufen, tatsächlich wird es bestimmt werden, wenn Sie in der Datei zu laden und wenn es diese Definition läuft, ist es fest dieser Wert. Dann die Funktion jedes Mal aufrufen, werden die Zahl immer gleich. Wenn ich mit einem zufälligen jedes Mal in einer Variablen an die Funktion übergeben sie genannt wurde, dann war es jedes Mal zufällig. Zumindest, dass das, was ich in meinem Programm erfahren

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top