tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
19
ZUGRIFFE
3802
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    HarryXVI HarryXVI ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    108
    Hallo,
    ich möchte es so programmieren, dass ein Zufallsgenerator eine Zahl zwischen 11 und 66 erstellt und diese dann ausgibt. Es dürfen aber nur 11, 21, 22, 32, 33, 42, 43, 44, 52, 53, 54, 55, 61, 62, 63, 64, 65, 66 herauskommen. Ich weiß, dass ich randomize anwenden muss, aber wie?

    Zweite Frage: Wie gebe ich die erstellte Zahl am besten aus?
     

  2. #2
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    Hi,

    erstell dir doch einfach ein Array, in dem du die erlaubten Zahlen ablegst. Du kannst dann mit fortlaufenden Zufallszahlen auf die Elemente des Arrays zugreifen.

    Code delphi:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    procedure RollDice();
    const
        numbers: array[0..17] of Integer = (11, 21, 22, 32, 33, 42, 43, 44, 52, 53, 54, 55, 61, 62, 63, 64, 65, 66);
    var
        i: Integer;
    begin
        Randomize; // Zufallszahlengenerator vorbereiten
        i := Random(17); // Zufallszahl erstellen
        ShowMessage(IntToStr(numbers[i])); // Würfelergebnis als MessageBox ausgeben
    end;

    Grüße, D.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  3. #3
    HarryXVI HarryXVI ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    108
    Gut, dass klappt soweit.
    Ich möchte ein Programm schreiben, wo User gegen Computer spielt.
    Weitere Fragen:
    1. Wie kann ich Zahlen abspeichern?
    2. Wie kann ich es machen, dass das Programm automatisch eine weitere Zahl erstellt und diese mit meiner eingegebenen Zahl vergleicht?
     

  4. #4
    Registriert seit
    Mar 2004
    Beiträge
    441
    Zitat Zitat von Dario Linsky Beitrag anzeigen
    Hi,

    erstell dir doch einfach ein Array, in dem du die erlaubten Zahlen ablegst. Du kannst dann mit fortlaufenden Zufallszahlen auf die Elemente des Arrays zugreifen.
    Klugscheis.serei meinerseits:
    Das von dir gebastelte Array unterscheidet nicht zwischen 12 und 21 und gibt damit eine falsche Wahrscheinlichkeitsverteilung für die einzelnen Werte weiter.
    Mit zwei Würfeln habe ich 6 * 6 = 36 verschiedene Ergebnismöglichkeiten. Die Wahrscheinlichkeit auf einen bestimmten Pasch ist dabei 1 / 36. Die Möglichkeit einer bestimmten Zahlenkombination (z.B. 12) ist jedoch doppelt so hoch.
     

  5. #5
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    Hi,

    genau genommen stimmt das natürlich. Man könnte auch den komplizierteren Weg gehen und nach den jeweiligen Wahrscheinlichkeiten verschiedene Intervalle der Zufallszahlen auswerten.

    Effektiv wird das aber bei einer Handvoll von Zufallszahlen kaum merkbar sein, dafür reicht die Funktion. Für einen spürbaren Unterschied der Wahrscheinlichkeiten müsste man schon eine Messreihe mit mehreren hundert Ergebnissen auswerten. Wenn es darauf ankommt, lohnt sich auch der Aufwand einer genaueren Funktion, ansonsten stimmt das Verhältnis von Aufwand zu Nutzen m.M.n. nicht so ganz.

    Grüße, D.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  6. #6
    HarryXVI HarryXVI ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    108
    Weitere Fragen:

    1.Wie sage ich dem Compiler, dass 21, 11, 22, 33, 44, 55 mehr zählt als 66?
    2. Ich habe folgendes als Vergleichsmethode geschrieben..

    Code :
    1
    
    if eingabe <> w then ShowMessage('Gelogen!');

    Weiter oben steht dann:
    Code :
    1
    2
    3
    4
    
    w := Random(20); // Zufallszahl für Spieler
    ShowMessage(IntToStr(numbers[w]));
    ...
    eingabe := StrToInt(EdEingabe.Text);

    Trotzdem gibt der Computer oft "Gelogen" aus, auch wenn ich die echte Zahl eingetippt habe.
    Geändert von HarryXVI (21.06.08 um 18:01 Uhr)
     

  7. #7
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    Hi!

    1. Wie die Ergebnisse gewertet werden (und wie du demnach die Regeln implementieren musst) hängt von den Regeln selbst ab. Dem Compiler musst du das nicht erklären, der interessiert sich nur für syntaktische Richtigkeit des Codes.

    2. Du musst auch auf das Würfelergebnis vergleichen, nicht auf dessen Index.

    Grüße, D.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  8. #8
    HarryXVI HarryXVI ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    108
    Zitat Zitat von Dario Linsky Beitrag anzeigen
    Du musst auch auf das Würfelergebnis vergleichen, nicht auf dessen Index.
    Was meinst du damit? Wie soll das gehen? Und verweis mich nicht auf irgendein tutorial, da hab ich auch schon gesucht!
     

  9. #9
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    Hi,

    wenn du die Würfelergebnisse in deinem Array hast, solltest du auch die Eingabe mit dem Inhalt des Arrays an der w-ten Stelle vergleichen, nicht mit w selbst.

    Code delphi:
    1
    
    if eingabe <> numbers[w] then // ...

    Zumindest soweit ich dich verstanden habe.

    Grüße, D.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  10. #10
    HarryXVI HarryXVI ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    108
    gut, was ist der operator für "enthalten in"? also "if eingabe enthalten in numbers[20] then ..."
     

  11. #11
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    Hi,

    ich glaube, so einen Operator gibt es in Pascal/Delphi (zumindest für einfache Arrays) nicht. Schreib dir am besten eine Methode, die dein Array durchsucht und entweder true oder false zurück gibt. Oder benutz sowas wie TList, das könnte sogar eine entsprechende Methode anbieten.

    Grüße, D.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  12. #12
    HarryXVI HarryXVI ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    108
    Wie soll ich denn nun die Rangfolge der Würfelzahlen (31,...41,...51,...61,...66, 11,...55, 21) implementieren?

    Bitte Vorschläge mit [U]sinnvollem Code{/U], dann kann ich das besser nachvollziehen. Wenn ihr nur schreibt "mit einer ListBox", hilft mir das nicht viel weite!
    Geändert von HarryXVI (25.06.08 um 15:00 Uhr) Grund: Ergänzung notwendig
     

  13. #13
    Avatar von Imod
    Imod Imod ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Ort
    Waldsee
    Beiträge
    87
    hey,

    ich will net fies sein, aber warum verlangst du hier den kompletten Code?
    .. so kannste ja gleich jemand Fragen ob er dir das Programm schreibt.

    Es gibt in Delphi ne gute Hilfe, gib da mal ListBox ein da findest du extreme viel!

    ohne fleiß kein Preis ....

    naja

    Mfg ImoD
     
    www.freaky-keylogger.de.ms ! -> Pls mal testen und mir ne Mail schreiben wäre echt net, da ich wissen muss obs so okay ist. Mfg Domi

  14. #14
    HarryXVI HarryXVI ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    108
    Ich habe mir nun eine ListBox gemacht und die Würfelzahlen nach Werten sortiert als Strings eingegeben. Dann habe ich die ListBox unsichtbar gemacht, denn sie nimmt nur Platz weg.
    Könnt ihr mir vielleicht noch einen Tipp geben, wie der Compiler von dieser Liste auf die Reihenfolge der gewürfelten Zahlen schließen kann?
     

  15. #15
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    Hi,

    ich an deiner Stelle würde das nicht über eine ListBox machen, denn die frisst nur unnötig viel Speicher. Eine verkettete Liste (TList) sollte es auch tun und ist relativ flexibel, was das Anhängen neuer Elemente angeht. Neue Würfelergebnisse hängst du einfach hinten an und bekommst so eine sortierte Liste nach der Reihenfolge, in der die Würfelergebnisse anfallen.

    Grüße, D.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

Ähnliche Themen

  1. 4D-Würfel
    Von helo03 im Forum Cinema 4D
    Antworten: 39
    Letzter Beitrag: 21.10.08, 13:57
  2. [vb.net]3D Würfel?
    Von oyla12 im Forum .NET Grafik und Sound
    Antworten: 4
    Letzter Beitrag: 01.07.07, 09:19
  3. Würfel
    Von Tobias K. im Forum 3D-Stills
    Antworten: 34
    Letzter Beitrag: 05.01.06, 21:30
  4. Würfel
    Von worstcase im Forum 3D-Stills
    Antworten: 6
    Letzter Beitrag: 18.07.05, 17:04
  5. Würfel mit Textur
    Von e-w-i im Forum 3D Studio Max
    Antworten: 1
    Letzter Beitrag: 09.03.04, 08:54