Sternen Code innerhalb einer Schleife

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

BlackNetrunner

Betreff: Sternen Code innerhalb einer Schleife

BeitragDo, Jun 23, 2005 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]

Repeat

For stars = 0 To 200
Color 255,255,255
stars_x =Rnd(0,320)
stars_y =Rnd(0,240)
Plot stars_x,stars_y
Next

Forever


In diesem Code hier werden ständig zufällige Sterne auf dem Bildschirm gezeichet. Ich möchte aber das die Sterne sich nicht ständig ändern. Wie schaffe ich es stars_x =Rnd(0,320) stars_y =Rnd(0,240) ausserhalb von For Next zu plazieren ohne das 200 mal an der gleichen Stelle Plot ausgeführt wird?

Firstdeathmaker

BeitragDo, Jun 23, 2005 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Speicher die Stellen der Sterne in einem Dim-Feld, dann brauchst du nur einmal die Positionen per Zufall festzulegen und kannst sie nachher immer an diesen Stellen einzeichnen:

BlitzBasic: [AUSKLAPPEN]
anzahl=100
Dim sterne(anzahl,1)

For i=0 To anzahl
sterne(i,0)=Rand(0,320)
sterne(i,1)=Rand(0,240)
Next
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

BlackNetrunner

BeitragDo, Jun 23, 2005 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
sterne(i,0)=Rand(0,320)
und
sterne(i,1)=Rand(0,240)
:versteh ich nicht. Wiso ist gleich?
 

Michi

BeitragDo, Jun 23, 2005 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
sterne(i, 0) sind die X-Koordinaten,
sterne(i, 1) sind die Y_Koordinaten
Aber..Wozu soll er gut sein???
IBM-Ingeneur über die Idee des Mikroprozessors, 1968
Code: [AUSKLAPPEN]

   __
<_/__\_> <--- die Wayne-Zeichnung

Firstdeathmaker

BeitragFr, Jun 24, 2005 0:02
Antworten mit Zitat
Benutzer-Profile anzeigen
= heißt nicht unbedingt "ist gleich", sondern weist einer variable bestimmte Werte zu. Ein Dim-Feld ist nichts anderes als eine Variable, die aber viele verschiedene Werte annehmen kann. Ein Beispiel:


BlitzBasic: [AUSKLAPPEN]
Dim testvariable(2)

testvariable(0)=5
testvariable(1)=16
testvariable(2)=3

For i=0 To 2
Print testvariable(i)
Next
WaitKey
End



Schau mal in der Onlinehilfe unter dem Befehl "Dim" nach, da wird das auch erklärt.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Ebola33

BeitragFr, Jun 24, 2005 11:54
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Const screen_width=1024
Const screen_height=768
Const Num_of_stars =400 ; Anzah Sterne
Dim stars(Num_of_stars,2) ; 0=x, 1=y, 2=speed#
SeedRnd MilliSecs()
For i=0 To Num_of_stars ; Vorberechnen der Positionen/Geschwindigkeiten
stars(i,0)=Rand(screen_width-1)
stars(i,1)=Rand(screen_height-1)
stars(i,2)=Rand(1,5)
Next
Graphics screen_width,screen_height,32,1
SetBuffer BackBuffer()
While Not KeyDown(1)
Cls
For i=0 To Num_of_stars ;Alle Sterne durchgehen
stars(i,0)=stars(i,0)+stars(i,2) ; Geschwindigkeit zur X-Position adieren
If stars(i,0)>screen_width-1 Then stars(i,0)=0
LockBuffer BackBuffer
WritePixelFast stars(i,0),stars(i,1),$ffffff; Sterne Zeichnen
UnlockBuffer
Next
Flip
Wend
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/
 

Klaas

BeitragFr, Jun 24, 2005 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
... so gehts auch

Code: [AUSKLAPPEN]

Repeat

SeedRnd(12345)
For stars = 0 To 200
Color 255,255,255
stars_x =Rnd(0,320)
stars_y =Rnd(0,240)
Plot stars_x,stars_y
Next

Forever

Firstdeathmaker

BeitragSa, Jun 25, 2005 2:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder so:

BlitzBasic: [AUSKLAPPEN]
Const scr_x=320
Const scr_y=240
sterne=scr_x*scr_y*0.002

Graphics scr_x,scr_y
bg=CreateImage(scr_x,scr_y)

SetBuffer ImageBuffer(bg)

For i=1 To sterne
farbe=Rand(100,255)
Color farbe-50,farbe-50,farbe
Plot Rand(scr_x),Rand(scr_y)
Next


SetBuffer BackBuffer()

bg_counter=0
Repeat
Cls
TileImage bg,0,bg_counter
bg_counter=bg_counter+1
Flip


Until KeyHit(1)
End
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Spikespine

BeitragSa, Jun 25, 2005 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
oder so Wink

Steuerbar! Smile

Edit: gehts jetzt?
BlitzBasic: [AUSKLAPPEN]
Const sterne_anzahl = 300
Const ebenen=5
Const beschleunigung#=0.02
Const maxspeed# = 2.2
Const gx = 1024
Const gy = 768


Graphics gx,gy,32,2
SetBuffer BackBuffer()



Dim stern#(sterne_anzahl,2) ;drei spalten für x,y,ebene

;startwerte zuweisen
For i=0 To sterne_anzahl
stern(i,0)=Rand(0,gx-1)
stern(i,1)=Rand(0,gy-1)
stern(i,2)=Rand(ebenen)
Next

Repeat
Cls

LockBuffer BackBuffer()
For i=0 To sterne_anzahl
stern(i,0) = stern(i,0) + Cos(richtung) * stern(i,2) * speed#
stern(i,1) = stern(i,1) - Sin(richtung) * stern(i,2) * speed


If stern(i,0) < 0 Then stern(i,0) = gx-1
If stern(i,0) >= gx Then stern(i,0) = 0
If stern(i,1) < 0 Then stern(i,1) = gy-1
If stern(i,1) >= gy Then stern(i,1) = 0


grau = (255/ebenen)*stern(i,2)
WritePixelFast Floor(stern(i,0)),Floor(stern(i,1)),grau*$10000+grau*$100+grau
Next
UnlockBuffer BackBuffer()


If KeyDown(203) Then richtung=richtung+1
If KeyDown(205) Then richtung=richtung-1
If KeyDown(200) Then speed# = speed - beschleunigung
If KeyDown(208) Then speed# = speed + beschleunigung
If speed > maxspeed Then speed = maxspeed
If speed < -maxspeed Then speed = -maxspeed

Text 0,0,\"Steuern mit den Cursortasten!\"

Text 0,20,\"Richtung: \"+richtung
Text 0,35,\"Speed: \"+speed

Flip
Until KeyHit(1)
End
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax
  • Zuletzt bearbeitet von Spikespine am Sa, Jun 25, 2005 13:07, insgesamt einmal bearbeitet

Ebola33

BeitragSa, Jun 25, 2005 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Memory Access Violation mein lieber Spike Very Happy
Beim Einsatz von Writepixelfast immer aufpassen.......
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/

Spikespine

BeitragSa, Jun 25, 2005 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Das verstehe ich mal wieder nicht... bei mir kommt mit WPF nie memory acces. Wo hält der debugger an, ebola?

Spike
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

Ebola33

BeitragSa, Jun 25, 2005 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Er hält an wenn ich die cursortaste nach oben drücke. Wink
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/

Spikespine

BeitragSa, Jun 25, 2005 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Möglicherweise ein Rundungsfehler... ich bau mal ein Floor ein (editier den code oben)
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group