[VC++] Zufallsgenerator

deadzoneman

Lt. Junior Grade
Registriert
Jan. 2003
Beiträge
347
hi,
wollt fragen wie ich nen zufallsgenerator bei VC++ programmiere. ich wollt nämich nen fenster erstellen in dem ich den Namen eines Volkes auswählen kann (fürn RPG Spiel) und das dann das Alter des jeweiligen Charakters ausgewürfelt wird.
Also

Volk: Kombinationsschaltfläche Alter: _____ x
(Mensch, Zwerg, Elf usw.)

(das "x" soll eine Schaltfläche sein, raufdrücken -> Alter auswürfeln)
Kombinationsschaltfläche (IDC_KOMBVOLK)
Eingabefeld _____ (IDC_ALTER)
x (IDC_WUERFELALTER)

das Alter soll aber immer eingeschränkt sein, also der Mensch hat ein mindest Alter
von 20 bis maximal 60. Zwerg min. 150 bis 300 usw.

falls mich einer nicht versteht kann ich auch zur not noch nen sreenshot laden
 
hab jetzt leider wenig Zeit

aber in der <stdlib.h> findest du einen Befehl random
damit solltest du zum Ziel gelangen

falls du nicht klar kommst, ich schau nachher nochmal rein
 
Code:
#include math.h
double a;
srand(ms der Systemzeit oä.);
if(Volk==Mensch)
   a = rand()/65536 * 40 + 20;
else if (Volk == irgenwas)
   a = rand()/65k * 150 + 150;

mfg
Capt.Iglo
 
@iglo

kannst du das noch ein bisschen erläutern bitte, du musst wissen ich bin noch n ziemlicher newbie.
was solln in srand () kommen?
was muss ich jetzt eigentlich noch alles definieren? wenn das nen kombifeld ist, woher weiß der compiler was drinne steht, so dass er "Mensch", "Zwerg" usw. erkennt? genau das gleiche mit "Volk"
und warum ausgerechnet 65k?
 
okay, hab mich ein wenig geirrt - "random()" heisst der Befehl bei Borland C++. Ist halt doof wenn man zu hause VC++ und in der Schule Borland hat. ;)
Trotzdem befindet sich der Befehl in der stdlib.h und nicht in der math.h ;)


zu deiner Frage:

mach es am besten so:

Code:
srand ((unsigned)time(NULL));
Damit sorgst du dafür, daß der Zufallsgenerator mit einem zufälligen Wert startet. Ansonsten würde er immer die selbe Reihe von "Zufallszahlen" ausspucken. Denn so wirklich zufällig ist der gar nicht. ;)

mit

Code:
zahl = (rand()%3))
kannst du dann z.b. Zufallszahlen zwischen 0 und 4 erzeugen.



EDIT:


Die <time.h> brauchst du natürlich auch noch ;)
 
Zuletzt bearbeitet:
ok. und wie definier ich noch "Mensch" usw? mit "" Zeichen?
und wie sieht dann die vollständige gleichung aus?
 
hmmm...

...ich weiss jetzt zwar nicht genau, was du möchtest, aber versuch mal das:


Für jedes Volk definierst du 2 Variablen

mensch_alter_min, mensch_alter_max, elf_alter_min, elf_alter_max

etc.

Die Altersberechnung sollte dann für jede Rasse gesondert durchgeführt werden, es sei denn, die Differenzen zwischen MIN und MAX sind bei jeder Rasse gleich.

Die Formel könnte dann wie folgt aussehen

Code:
alter_mensch = (rand ()%(mensch_alter_max - mensch_alter_min));

Der Vorteil darin liegt, daß du das minimale und maximale Alter im deklarationsteil sehr schnell verändern kannst, ohne den komplette Code zu durchwühlen.

Eine andere - und bessere - Variante wäre, daß du mit Feldern arbeitest, in denen du die maximalen und minimalen Alter der Rasse in eine Matrix hinterlegst.
Hier wäre der Vorteil der, daß du die internen Werte der Rasse (0=Mensch, 1=Elf, 2=Hobbit etc.) mit in der Formel verwenden kannst und eine einzige Berechnungsroutine für alle Rassen reicht.
Auch der Administrationsaufwand einer solchen Matrix hält sich in Grenzen.

Wenn du wirklich ein Rollenspiel schreiben möchtest, ist so eine Matrix sehr nützlich, da du dort weitere Charakter- und Rasseeigenschaften hinterlegen kannst.
 
@Bombwurzel:
*vollkommenzustimm*

Und sorry wegen math.h. Habe schon länger kein C++ mehr geproggt (umstieg auf C#) und da was verwechselt.
 
Original erstellt von Bombwurzel
Mal aus Interesse, welche praktischen Vorteile bietet C# ggü. C++ ?

Erst mal will ich dir hier den Grund meines Umstiegs nennen:
Ich bin Schüler einer HTL und diese ist von (Ansi)C auf C# umgestiegen.

Nun noch eine kurze Auflistung aus unserem Skriptum:

Folgende Punkte sprechen für das Erlernen von C# als (erste) Programmiersprache:

- C# hat eine sehr umfangreiche Programmbibliothek, die standardisiert ist.
- C#-Programme laufen schon bald auf vielen Plattformen.
- Mit C# kann man sehr einfach Programme mit einer grafischen Oberfläche entwickeln.
- C# ähnelt syntaktisch vielen anderen Sprachen wie C, C++, Java, Javascript, PHP, ...
- C# ist vollkommen objektorientiert.

Als Einwände gegen C# hört man manchmal folgende Argumente:

- C# ist eine Microsoft-Sprache.
- C# ist schwierig zu erlernen.

Nun noch meine persöndliche Meinung:
Der Umstieg loht sich.
C# ist meiner Meinung nach besser Aufgebaut.
Sprich:
-keine #includes mehr nötig (aber möglich)
-bei Eingabe eines Namespaces (=~ header) und dem folgenden . (Punkt) wird dir nicht nur eine einfache Liste der Befehle ausgegeben sonder auch eine Kurzerklärung des Befehls (ist allerdings IDE - Abhängig)
-bessere Sortierung der Befehle in die Namespaces (z.B. in System.Conver. sind alle Konvertierungsbefehle wie z.B. .ToInt16 zusammengefasst)
-Vareablentyp wird autmatisch erkannt ( z.B. printf("hallo nr. %d", num); wird zu Console.Write("hallo nr. " + num) oder bei atoi kann man sich das "a" sparen, also ToInt und es ist egal was es für eine Ausgangsvareble ist)
-neue Steuerelemente im Visual Bereich
-einfache Unterstützung von Umlauten in der Console (= bei Write("Länge"); wird Länge und nich L²nge o.ä. ausgegeben

Falls du noch mehr wissen wills gib ich dir gerne Auskunft

mfg
Capt.Iglo
 
Original erstellt von CaptainIglo
Falls du noch mehr wissen wills gib ich dir gerne Auskunft

Nee, danke. Genügt völlig. Wird sonst auch zu sehr OFFTOPIC. ;)

Ich hab die letzten Stunden auch nicht tatenlos verstreichen lassen und mich ausgiebig über C# informiert.
Dabei bin ich auf eine sehr interessante Webseit gestolpert.
C-Sharp Guide

Der Umstieg auf C# scheint zwar in vielerlei Hinsicht recht ratsam, aber mich stört nur die intensive .net Anbindung. Ich bin mir noch nicht 100%ig im Klaren darüber, welchen Schabernack Microsoft mit dieser Schnittstelle zu treiben gedenkt.
Ausserdem würde die Software dann nur noch auf PCs laufen, die .net-Komponenten installiert haben.
In Hinblick auf Longhorn wird zwar kein Weg an .net vorbeiführen, aber vorerst halte ich davon noch etwas Abstand.
 
Original erstellt von Bombwurzel
Ausserdem würde die Software dann nur noch auf PCs laufen, die .net-Komponenten installiert haben.

Stimmt. Aber bei mir lief auch noch kein Java Prog ohne JRE...
 
Original erstellt von CaptainIglo
Stimmt. Aber bei mir lief auch noch kein Java Prog ohne JRE...

Wenn du jetzt noch den Bogen zu C++ schlägst, ist die Welt wieder rund. ;)
Fertig kompilierte C++ Programme benötigen theoretisch nicht mal ein Betriebsystem. Sie sind lediglich prozessorabhängig.
Das relativiert sich zwar spätestens wenn du systeminterne APIs verwenden willst - aber auch die könnte man mit dem nötigen Programmieraufwand umgehen. Für komplexe Programme jedoch total unrealistisch. ;)
 
werds gleich mal ausprobieren.

und: eigentlich wollt ich nicht gleich n ganzes spiel programmieren. erstmal wollt ich mit nem charakterverwaltungsprogramm beginnen, mit auswürfeln von schätzen usw.

das spiel kommt später :D

EDIT:
Hab jetzt im anhang nen bild eingefügt, wie der oberste Teil des Charakterassistenten aussieht.

ijetzt kann sich das manch einer vielleicht vorstellen. außerdem habe ich das kombifeld mit
ersteinmal drei optionsfeldern ersetzt.
nun hat ich eigentlich vor, wenn jemand eins der felder anklickt, dass dann im feld für das Alter ein Betrag erscheint (Mensch: 18-50; Zwerg: 150-400; Elf: 200-500 Jahre). hab das mi dem srand ausprobiert, aber irgendwas hat nicht gefunzt gehabt.

 

Anhänge

Zuletzt bearbeitet:
Zurück
Oben