Zufall?
Übersicht

Another Stupid CoderBetreff: Zufall? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also Das Proplem ist: Ich bin zu blöd einen zufallsgenerator zum laufen zu bringen. Kann mir da jemand helfen?
Code: [AUSKLAPPEN] ;----------------------------------Colonize-----------------------------------------------------------
; (C)2004 By Paul Anselm Härle <paulhaerle@gmx.at> ; Published under the GNU GPL Version 2. ; Inspirated by "Konquest" for Linux (in SuSE 9.0) ;----------------------------------------------------------------------------------------------------- Graphics 640, 480, 16, 2 ; Sollte jeder kennen. Color 0, 255, 0 ; Giftgrün als Farbe. Global LogStream = WriteFile("Log.txt") ;-Globale Variablen- Global Modus$ = "Titel" Global planeten.planet Global Error ;-Grafiken- Global Button_Dark = LoadImage("Grafiken\Button_dark.bmp") ; Ein Button wenn keine Maus darauf ist. If Button_Dark = 0 Then WriteLine LogStream, "Button_Dark.bmp konnte nicht geöffnet werden!" Error=1 Global Button_Light = LoadImage("Grafiken\Button_light.bmp") ; Ein Button wenn die Maus darauf ist. If Button_Light = 0 Then WriteLine LogStream, "Button_Light.bmp konnte nicht geöffnet werden!" Error=1 Global Cursor_Image = LoadImage("Grafiken\Cursor.bmp") ; Die Maus. If Cursor_Image = 0 Then WriteLine LogStream, "Cursor.bmp konnte nicht geöffnet werden!" Error=1 Global Title_Image = LoadImage("Grafiken\Title.png") ; Das Titel-Bild. If Title_Image = 0 Then WriteLine LogStream, "Title.png konnte nicht geöffnet werden!" Error=1 Global Menue_Line = LoadImage("Grafiken\Menue_Line.bmp") ; Die Trennlinie Spielfeld-Menue. If Menue_Line = 0 Then WriteLine LogStream, "Menue_Line.bmp konnte nicht geöffnet werden!" Error=1 Global Planets_Image = LoadAnimImage("Grafiken\Planeten.bmp",32,32,0,6) ; Die Planeten. If Planets_Image = 0 Then WriteLine LogStream, "Planeten.bmp konnte nicht geöffnet werden!" Error=1 If Error = 1 Then Error() ;-Transparenz- MaskImage Cursor_Image, 255, 0, 255 MaskImage Button_Dark, 255, 0, 255 MaskImage Button_Light, 255, 0, 255 MaskImage Planets_Image, 255, 0, 255 Init_Planets() ;-------------------------------------Hauptschleife--------------------------------------------------- While Not KeyDown(1) If Modus$ = "Spiel" DrawImage Menue_Line, 544, 0 ;-Buttons- If Button(594, 462.5, "Quit") = True Then End planeten.planet = First planet For X = 0 To 15 For Y = 0 To 15 Typ = planeten\Typ DrawImage Planets_Image, 32 * X + 16, 32 * Y, Typ Next Next DrawImage Cursor_Image, MouseX() - 10, MouseY() - 10 EndIf If Modus$ = "Titel" Then ShowTitle() FlushKeys FlushMouse HidePointer Flip Cls Wend CloseFile LogStream End ;------------------------------------Funktionen------------------------------------------------------- Function Button(X, Y, Text_$) Clicked = 0 W = ImageWidth(Button_Dark) H = ImageHeight(Button_Dark) W = W / 2 H = H / 2 X = X - W Y = Y - H DrawImage Button_Dark, X, Y If MouseX() > X If MouseX() < (X + (W*2)) If MouseY() > Y If MouseY() < (Y + (H*2)) DrawImage Button_Light, X, Y If MouseHit(1) Clicked = 1 EndIf EndIf EndIf EndIf EndIf Text X + W, Y + H, Text_$ , 1, 1 Return Clicked End Function Function ShowTitle() DrawImage Title_Image, 0, 0 If KeyDown(28) Then Modus$ = "Spiel" End Function Function Init_Planets() For X = 0 To 15 For Y = 0 To 15 planeten = New planet planeten\X = X planeten\Y = Y SeedRnd MilliSecs() planeten\Typ = Rand(0,5) SeedRnd MilliSecs() planeten\Schiffe = (Rand(1,6) * 5) SeedRnd MilliSecs() planeten\Produktion = (Rand(1,6) * 5) planeten\Besitzer$ = "Niemand" Next Next End Function Function Error() WriteLine LogStream, "" WriteLine LogStream, "Programm wurde wegen eines Fehlers beendet..." WriteLine LogStream, "Bitte schicken sie diese Datei an paulhaerle@gmx.at ." WriteLine LogStream, "Ich werde mich dann bemühen diesen Fehler zu beheben!" End Function ;--------------------------------Types---------------------------------------------------------------- Type planet Field X Field Y Field Typ Field Schiffe Field Produktion Field Besitzer$ End Type |
||
Windows zeugt davon das die gesellschaft Masochistisch ist. |
![]() |
BigSnake |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du darfst seedrnd nur einmal am Anfang des Programms aufrufen | ||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
SeedRnd ist sowas wie ein StartKeim .
Also eine Zahl vorgeben und dann kommen Zufallszahlen . Rnd Rnd Rnd Rnd Rnd Rnd SeedRnd Millisecs() müße gut sein aber nicht in einer Schleife wenn kaum Zeit vergeht . Damit startest du jedesmal den Zufallsgenerator mit dem selben Wert . |
||
Another Stupid CoderBetreff: HM? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hm...aber wenn ich SeedRnd Millisecs() an den Anfang des Progs schreibe sind immer noch alle Felder die mit dem gleichen Planeten besetzt. (aber immer ein anderer Planet!) ... was soll ich Tun?
*PANIK!!!* 8) |
||
Windows zeugt davon das die gesellschaft Masochistisch ist. |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Check ich nicht ![]() Code: [AUSKLAPPEN] planeten.planet = First planet For X = 0 To 15 For Y = 0 To 15 Typ = planeten\Typ DrawImage Planets_Image, 32 * X + 16, 32 * Y, Typ Next Next Code: [AUSKLAPPEN] For planeten.planet = Each planet Typ = planeten\Typ DrawImage Planets_Image, 32 * planeten\X + 16, 32 * planeten\Y, Typ Next |
||
![]() |
ViciouS |
![]() Antworten mit Zitat ![]() |
---|---|---|
wird mit seedrnd nicht nur die start-zufallszahl bestimmt????
die reihenfolge bleibt trotzdem gleich... glaub ich.... |
||
Skaten ist scheisse...
Bilanz: 3 Knochenbrüche in 4 Jahren... und es werden mehr ![]() |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die neue "Zufallszahl" wird zwar immer auf Basis der alten "Zufallszahl"
ermittelt, aber nicht nach der abgefragten Zahl z.B. 5, sondern nach dem internen Wert z.B. 234783475. Mit SeedRnd macht man nix anderes als diese Basiszahl zu ändern. Gleiche Basis führt also zu gleichem Ergebnis der Rand-funktion. Dass die Reihenfolge gleich bleibt ist damit zwar theoretisch möglich, sollte in der Praxis aufgrund der geringen Wahrscheinlichkeit aber nicht auftreten. (Müsste man glatt mal testen, ab wann sich die Zahlenketten wiederholen ![]() |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich mein der Bereich liegt in 16 Bit , dann fangen die wieder von vorne an. | ||
Another Stupid Coder |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Äh...schön und gut aber was wird jetzt aus meinem Zufallsgenerator?
Hm...C ist einfacher |
||
Windows zeugt davon das die gesellschaft Masochistisch ist. |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Keine Sorge, in C ist es genau so ![]() Beschreibe dein Problem mal ein bisschen genauer, aus deinem anderen Posting werde ich nicht schlau... |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
seedrnd setzt einen rnd-wert und nach jedem benutzen wird der neu bestimmt...
Probier mal folgendes: Code: [AUSKLAPPEN] Cls RndWert=1 SeedRnd RndWert For I=1 To 10 Print Rand(1,100) Next WaitKey End Dort werden die rnd-werte für 1 und den zufallsraum 100 bestimmt |
||
Another Stupid Coder |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@BIG BUG
glaubs mir ...einfaches C nur mit STDLIB ist einfacher... und mein Problem ist das ich versuche einen Zufallsgenerator zu basteln der dafür sorgt das auf jedes Feld des Spielfeldes (ist in einem DIM-Feld) ein zufälliger Planeten Typ kommt... |
||
Windows zeugt davon das die gesellschaft Masochistisch ist. |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich verstehe dein Problem nicht. Bei mir funktioniert das perfekt(Mit Enter kann man die Planeten neu generieren):
Code: [AUSKLAPPEN] Graphics 640,480,16,2 SetBuffer BackBuffer() SeedRnd MilliSecs() ;--------------------------------Types---------------------------------------------- Type planet Field X Field Y Field Typ Field FarbeR Field FarbeG Field FarbeB Field Schiffe Field Produktion Field Besitzer$ End Type Init_Planets() Repeat If KeyHit(28) Then Init_Planets() Cls For p.planet = Each planet Color p\farbeR,p\farbeG,p\farbeB Oval p\x*25, p\y*25, 20, 20 If MouseOver(p\x*25,p\y*25,20,20) Then Color 200,200,200 Text 420,50, "Koordinaten: " + p\x + "," + p\y Text 420,80, "Typ: " + p\typ Text 420,110, "Schiffe: " + p\Schiffe Text 420,140, "Produktion: " + p\Produktion EndIf Next Flip Until KeyHit(1) Function Init_Planets() For planeten.planet = Each planet Delete planeten.planet Next For X = 0 To 15 For Y = 0 To 15 planeten = New planet planeten\X = X planeten\Y = Y planeten\Typ = Rand(0,5) planeten\FarbeR = Rand(10,255) planeten\FarbeG = Rand(10,255) planeten\FarbeB = Rand(10,255) planeten\Schiffe = (Rand(1,6) * 5) planeten\Produktion = (Rand(1,6) * 5) planeten\Besitzer$ = "Niemand" Next Next End Function Function MouseOver(x, y, width, height) Return MouseX() >= x And MouseX() < x+width And MouseY() >= y And MouseY() < y+height End Function |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
Another Stupid Coder |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So, danke es funktioniert jetzt. Zwar tun sich schon die nächsten probleme auf allerdings werde ich euch damit erst nerven wenn es kongrete Errors gibt. | ||
Windows zeugt davon das die gesellschaft Masochistisch ist. |
Eisrabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
dürfte ich mal fragen, was du jetzt geändert hast, BIG BUG ? ausser seedrnd millisecs() an den anfang zu setzen | ||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group