Zufall?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Another Stupid Coder

Betreff: Zufall?

BeitragMo, Jan 19, 2004 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 19, 2004 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Du darfst seedrnd nur einmal am Anfang des Programms aufrufen

Markus2

BeitragMo, Jan 19, 2004 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Coder

Betreff: HM?

BeitragDi, Jan 20, 2004 9:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 20, 2004 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Check ich nicht Wink

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

BeitragDi, Jan 20, 2004 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Laughing
 

BIG BUG

BeitragDi, Jan 20, 2004 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile )
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Markus2

BeitragMi, Jan 21, 2004 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich mein der Bereich liegt in 16 Bit , dann fangen die wieder von vorne an.
 

Another Stupid Coder

BeitragFr, Jan 23, 2004 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ä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

BeitragFr, Jan 23, 2004 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Keine Sorge, in C ist es genau so Smile (der Aufruf selbst ist sogar noch komplizierter)

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

BeitragFr, Jan 23, 2004 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jan 24, 2004 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragSa, Jan 24, 2004 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jan 25, 2004 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 26, 2004 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group