-
        

+ Antworten
Ergebnis 1 bis 8 von 8

Thema: Zufallsgenerator

  1. #1
    Neuer Benutzer Öfters hier Avatar von modtronic
    Registriert seit
    14.05.2011
    Ort
    Solingen
    Alter
    39
    Beiträge
    23

    Zufallsgenerator

    Anzeige

    Guten Abend

    Ein Freund und Ich wollen ein Brettspiel elektronisch nachbauen.
    Es handelt sich um die Spanische Versions von Mensch Ärgere Dich nicht.

    Ich habe eine kurze frage wie ich in C einen Zufallsgenerator programmieren kann.
    Und zwar gedacht für den Würfel.

    Als Würfel ist ein Kreis aus 6 Leds gedacht und nach Ende des Würfelzykluses soll das Ergebniss noch auf einer 7-Segmentanzeige erscheinen. Starten soll man das ganze über einen Taster.

    Mir geht es jetzt hier allerdings um den Programmzyklus für die Zufallschleife des eigentlichen Würfels so das immer wieder andere Zahlen ausgegen werden.

    Gruss
    Patrick

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    23
    Beiträge
    1.532
    Hi,

    also da gibts mehrere Möglichkeiten.
    Zum einen könntest du dir bewusst an einem ADC-Pin Störungen einfangen, um diese als "Zufall" zu verwenden.
    Oder du misst die Zeit des Tastendrucks und nimmst diesen Wert als Zufall.
    Natürlich gibts wohl noch einige andere Möglichkeiten, diese beiden sind mir eben gerade eingefallen.

    Gruß
    Chris

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    40
    Beiträge
    392
    Pseudo RNG [1] .... Als seed anfangs die Zeit zwischen einem tastendrock oder ähnliches nehmen. [2] scheint auf µC's umsetzbar zu sein.

    [1] http://de.wikipedia.org/wiki/Kategor...ahlengenerator
    [2] http://de.wikipedia.org/wiki/KISS_(Z...hlengenerator)

  4. #4
    Neuer Benutzer Öfters hier Avatar von modtronic
    Registriert seit
    14.05.2011
    Ort
    Solingen
    Alter
    39
    Beiträge
    23
    mit diesen aussagen kann ich irgendwie nix anfangen

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    40
    Beiträge
    392
    Code:
    #include <stdint.h>
     
    // interner Zustand
    static uint32_t x = 123456789; // <- beliebige seed != 0
    static uint32_t y = 362436000;
    static uint32_t z = 521288629;
    static uint32_t c = 7654321;
     
    uint32_t KISS() {
       uint64_t t;
     
       // Linearer Kongruenzgenerator
       x = 69069 * x + 12345;
     
       // Xorshift
       y ^= y << 13;
       y ^= y >> 17;
       y ^= y << 5;
     
       // Multiply-with-carry
       t = 698769069ULL * z + c;
       c = t >> 32;
       z = (uint32_t) t;
     
       return x + y + z;
    }
    Das ist dein Zufallszahlengeneratur.

    static uint32_t x = 123456789; // <- beliebige seed != 0

    Das ist dein seed. Der "Samen" des Zufalls. Ist dieser Wert immer gleich, kommt immer dieselbe Reihe an Zahlen raus. Ergo, addiere einfach eine Zeit aus einem Timer beim Start des Spieles drauf... aber nur einmalig.

  6. #6
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Der Pseudozufallsgenerator von schorsch_76 wäre eine Möglichkeit.

    Eine andere Möglichkeit wäre so etwas wie ein echter "Zufall", etwa über die Zeitmessung, etwa für die Zeit wann die Taste zum würfeln gedrückt wird. Je nach µC geht das sehr einfach: wenn der µC einen Timer mit Capture funktion hat, kann man den Timer direkt und schnell bis 5 Zählen lassen, und die Capture funktion scharf stellen. Bei jeder Flanke bekommt man dann einen Quasi zufälligen Wert von 0-5 im Capture Register - nach jeder Taste hat man da also einen neuen Wert.

    Durch das Zählen nur bis 5 spart man sich die ggf. etwas trickreiche Umrechung in den Bereich 1-6.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.239
    Es ist ja nicht das erste Mal, das ein random number generator in C gebraucht wird: da hilft dann, wie in C üblich, die man-page. Um die ganze Sache nicht zu langweilig zu machen, sollte man den seed mit etwas Zufall versehen: die Zeit bis zum ersten Tastendruck, einen offenen ADC Eingang oder so.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    28
    Beiträge
    4.371
    Wenn man es aufwändiger will kann man auch einen Chaosgenerator nutzen. Den Ausgang des Chaosgenerators verbindet man mit dem Analogeingang des Controllers.

    MfG Hannes

+ Antworten

Ähnliche Themen

  1. [ERLEDIGT] Zufallsgenerator ?
    Von PICture im Forum Elektronik
    Antworten: 15
    Letzter Beitrag: 03.08.2013, 18:39
  2. Zufallsgenerator
    Von erni55 im Forum Asuro
    Antworten: 9
    Letzter Beitrag: 15.01.2008, 10:39
  3. Zufallsgenerator
    Von psy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 30.06.2007, 16:06
  4. Zufallsgenerator
    Von Ozzy im Forum Assembler-Programmierung
    Antworten: 9
    Letzter Beitrag: 07.09.2006, 10:55
  5. Zufallsgenerator in C2?
    Von Dirk im Forum C-Control II
    Antworten: 5
    Letzter Beitrag: 28.08.2004, 19:02

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •