Meshes gleichmäßig verteilen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

AMD

Betreff: Meshes gleichmäßig verteilen

BeitragMo, Nov 05, 2007 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
HI

ich wollte jetzt meshes gleich mäßig in einem Bereich verteilen.
so z.b.:
-=Meshes:

- - - - -
- - - - -
- - - - -

wie mach ich das? ich hab schon einwenig rum probiert aber hat mir net sehr geholfen Sad

und wie mach ich des das es sich selbst so schön gleichmäßig unterschiedlich positioniert...

so wie hier:
das hab ich i-wo hier ausgegraben:
und daraus werd ich i-wie net schlau Sad
ach ja und ich will auch jedes einzellne so wie in dem sample löschen können.

Code: [AUSKLAPPEN]
;SU-Breaker©. Code & Gfx by Suco-X & BlitzBasic
;Besonderen dank an D2006 für die kleine Gehirmwäsche zum Thema Winkel und WildStorm für
;seine Übersetzungsskillz der life Variable.
;Auf Credit Einträge bestehe ich nicht.
;Viel Spaß!!!
;Mfg Suco-X

Const screen_width = 1024
Const screen_height = 768

Graphics screen_width,screen_height,32,1

SeedRnd(MilliSecs())


Global ball_image
Global balken_image
Global background_image

Dim block_image(20)

For i = 0 To 19
   block_image(i) = CreateImage(50,20)
Next


Gosub CreateImages

font = LoadFont("Comic Sans MS",30,1)
SetFont font



Global balken_width = ImageWidth(balken_image), balken_height = ImageHeight(balken_image)
Global ball_x#,ball_y#
Global ball_xwinkel#,ball_ywinkel#
Global y_check, x_check
Global balken_x, balken_y
Global game_score
Global game_over = 0
Global game_level = 1
Global mod_value
Global next_level = 1
Global game_life = 3
Global game_timer = CreateTimer(80)


Gosub SetTypes



SetBuffer BackBuffer()
CreateLevel(game_level,game_score)



;************************************************************************
;Anfang der Hauptschleife.
Repeat
Cls
WaitTimer(game_timer)


If game_life<1
   FlushKeys()
   Repeat
   Cls
   WaitTimer(game_timer)
   
   Text screen_width/2, screen_height/2,"LOOOSSSSSEEEER, geh weg!!",1,1
   
   Flip
   Until GetKey()<>0
   End
ElseIf ball_y=>screen_height-20
   ball_x#=screen_width/2
   ball_y# =screen_height/2
   ball_xwinkel#=1
   ball_ywinkel#=1

   FlushKeys()
   Repeat
   Cls
   WaitTimer(game_timer)
   
   Text screen_width/2, screen_height/2,"Sowas, noch ein Versuch!!",1,1
   
   Flip
   Until GetKey()<>0

   game_life = game_life-1
EndIf


If BlocksExist()=0
   next_level= 1
EndIf


If next_level
        game_level = game_level+1
   CreateLevel(game_level,game_score)
   next_level = 0
EndIf


ball_x = ball_x+ball_xwinkel
ball_y = ball_y+ball_ywinkel


For i = 0 To 5
   CreatePixel(ball_x+5,ball_y+5,Rnd(-.5,.5),Rnd(-.5,.5),RGB(255,0,0),60)
   CreatePixel(ball_x+5,ball_y+5,Rnd(-.7,.7),Rnd(-.7,.7),RGB(255,255,0),30)
Next


x_check = (ball_x=>screen_width-20) Or (ball_x<=0)
y_check = (ball_y=>screen_height-20) Or (ball_y<=0)

If x_check
   ball_xwinkel = 0-ball_xwinkel
EndIf

If y_check
   ball_ywinkel = 0-ball_ywinkel
EndIf


balken_x = MouseX()
balken_y = screen_height-(balken_height+50)

MoveMouse balken_x, balken_y


If balken_x=>(screen_width-balken_width)-10
   balken_x = (screen_width-balken_width)-10
EndIf


If balken_x<=10
   balken_x = 10
EndIf


If ImagesOverlap(ball_image,ball_x,ball_y,balken_image,balken_x,balken_y)
   ball_ywinkel = 0-ball_ywinkel
   ball_xwinkel = (-(balken_width/2)+(ball_x-balken_x))/10
EndIf

If ball_ywinkel>0
   If ball_ywinkel<=3
      ball_ywinkel = 3
   EndIf
ElseIf ball_ywinkel>-3
   ball_ywinkel = -3
EndIf

If ball_xwinkel>0
   If ball_xwinkel<=1
      ball_xwinkel = 1
   EndIf
ElseIf ball_xwinkel>-1
   ball_xwinkel = -1
EndIf

If game_score>0
   If game_score Mod mod_value = 0
      CreateMessage(0,screen_height/2,"SCORE: "+game_score)
      game_score = game_score+20
      mod_value = mod_value*2
   EndIf
EndIf


DrawImage background_image,0,0
DrawImage ball_image,ball_x,ball_y
DrawImage balken_image, balken_x, balken_y


CheckColli()
DrawBlocks()
DrawPixels()
DrawMessage()


Color 255,255,255
Text 0,0,"SCORE: "+game_score

Text screen_width-200,0,"LIFES: "+game_life


Flip
Until KeyHit(1)
End

;*******************************ENDE***********************************



;************************************************************************
;Die verwendeten Types werden definiert
.SetTypes

Type message
   Field x,y
   Field txt$
End Type


Type block
   Field x,y
   Field width,height
   Field block_image
End Type

Type pixel
   Field x#,y#
   Field farbe
   Field xspeed#,yspeed#
   Field life_time
End Type

Return
;************************************************************************



;************************************************************************
;Die Grafik für das Game wird erstellt.
.CreateImages

ball_image = CreateImage(10,10)
balken_image = CreateImage(150,20)
background_image = CreateImage(1024,768)

;Erstellen des Balken(Pad)
SetBuffer ImageBuffer(balken_image)
Color 0,255,0
Rect 0,0,ImageWidth(balken_image),ImageHeight(balken_image)

For i = 0 To 8
Color  0,100+(i*(155/8)),0
Rect 0+i,0+i,ImageWidth(balken_image)-(i*2),ImageHeight(balken_image)-(i*2),0
Next


;Hintergrund Bild
SetBuffer ImageBuffer(background_image)
stepsize# = ImageHeight(background_image)/255.0

For i = 0 To 255
   Color 0,10,i
   Rect 0,i*stepsize,ImageWidth(background_image),stepsize+1
Next


For i = 0 To 500
   Color 200,200,200
   Plot Rnd(0,ImageWidth(background_image)),Rnd(0,ImageHeight(background_image)/5)
Next


;2 Block Images
;1
SetBuffer ImageBuffer(block_image(1))
Color 255,255,0
Rect 0,0,ImageWidth(block_image(1)),ImageHeight(block_image(1))

For i = 0 To 3
Color 155+(i*(100/3)),155+(i*(100/3)),0
Rect i,i,ImageWidth(block_image(1))-(i*2),ImageHeight(block_image(1))-(i*2),0
Next

;2
SetBuffer ImageBuffer(block_image(2))
Color 255,0,255
Rect 0,0,ImageWidth(block_image(2)),ImageHeight(block_image(2))

For i = 0 To 3
Color 155+(i*(100/3)),0,155+(i*(100/3))
Rect i,i,ImageWidth(block_image(2))-(i*2),ImageHeight(block_image(2))-(i*2),0
Next



;Ball Image
SetBuffer ImageBuffer(ball_image)

Color 255,0,0
Oval 0,0,ImageWidth(ball_image), ImageHeight(ball_image)

Return

;************************************************************************




;************************************************************************
;Pixel erstellen mit Farbe und diversen Geschwindigkeitswerten
Function CreatePixel(x#,y#,xspeed#,yspeed#,farbe,life_time=100)
pixel.pixel = New pixel
pixel\x = x
pixel\y = y
pixel\xspeed = xspeed
pixel\yspeed = yspeed
pixel\life_time = life_time
pixel\farbe = farbe
End Function

;************************************************************************


;************************************************************************
;Pixel Zeichen und bewegen
Function DrawPixels()
LockBuffer BackBuffer()
For this.pixel = Each pixel
   If this\life_time<=0
      Delete this
   Else
      If this\x>0 And this\x<screen_width-1
         If this\y>0 And this\y<screen_height-2
            WritePixelFast(this\x,this\y,this\farbe,BackBuffer())
            this\x = this\x+this\xspeed
            this\y = this\y+this\yspeed
         EndIf
      EndIf
     
      this\life_time = this\life_time-1
   EndIf
Next
UnlockBuffer BackBuffer()
End Function
;************************************************************************



;************************************************************************
;Block erstellen
Function CreateBlock(x,y,block_image)
block.block = New block
block\x = x
block\y = y
block\block_image = block_image
block\width = ImageWidth(block\block_image)
block\height = ImageHeight(block\block_image)
End Function
;************************************************************************


;************************************************************************
;Checken ob ncoh ein Block exestiert. Für den Level wechsel
Function BlocksExist()
Local temp_num = 0

For this.block = Each block
   temp_num = temp_num+1
Next

Return temp_num
End Function
;************************************************************************



;************************************************************************
;Die Blöcke Zeichnen
Function DrawBlocks()
For this.block = Each block
   DrawImage this\block_image,this\x,this\y
Next
End Function
;************************************************************************





;************************************************************************
;Collision zwischen ball und Block checken
Function CheckColli()
For this.block = Each block
   If ImagesOverlap(ball_image,ball_x,ball_y,this\block_image,this\x,this\y)
     
      If KeyDown(57) = 0
         ball_xwinkel = (-(this\width/2)+(ball_x-this\x))/4
         ball_ywinkel = (-(this\height/2)+(ball_y-this\y))/5
      EndIf
     
      For i = 0 To 100
         CreatePixel(this\x+(this\width/2),this\y+(this\height/2),Rnd(-2,2),Rnd(-2,2),RGB(255,0,0),100)
         CreatePixel(this\x+(this\width/2),this\y+(this\height/2),Rnd(-1,1),Rnd(-1,1),RGB(255,255,0),80)
         CreatePixel(this\x+(this\width/2),this\y+(this\height/2),Rnd(-0.5,0.5),Rnd(-0.5,0.5),RGB(255,255,255),40)
      Next
     
      game_score = game_score+10
      Delete this
      Exit
   EndIf
Next
End Function
;************************************************************************




;************************************************************************
;Erstellt eine Nachricht auf den Screen. Die Dinger die so hübsch über den Bildschirm sausen.
Function CreateMessage(x,y,txt$)
message.message = New message
message\x = x-StringWidth(txt)
message\y = y
message\txt = txt
End Function
;************************************************************************



;************************************************************************
;Zeichnet die Nachrichten
Function DrawMessage()
For this.message = Each message
   If this\x=>screen_width
      Delete this
   Else
      Color 255,0,0
      Text this\x, this\y, this\txt
      this\x = this\x+5
      this\y = this\y+Sin(this\x)*2
   EndIf   
Next
End Function

;************************************************************************




;************************************************************************
;Integer Farbwert aus rot,grün,blau
Function RGB(r,g,b)
Return a*$1000000 + r*$10000 + g*$100 + b
End Function
;************************************************************************






;************************************************************************
;Wichtigste Funktion überhaupt. Level wechsel+erstellung etc.
Function CreateLevel(level_num,temp_score = 0)
Local stopper = 0

Delete Each pixel
Delete Each block
Delete Each message


ball_x#=screen_width/2
ball_y# =screen_height/2
ball_xwinkel#=1
ball_ywinkel#=1
game_score = temp_score
next_level = 0
game_over = 0
mod_value = game_score+200


Select level_num

   Case -1
      For x = 0 To (screen_width/50)
         For y = 0 To (screen_height/20)-10
            CreateBlock(x*50,100+y*20,block_image(Rand(1,2)))
         Next
      Next
     
   Case 1

      For x = 0 To (screen_width/50)-5
         For y = 0 To 1
               CreateBlock(100+x*50,100+y*20,block_image(Rand(1,2)))
         Next
      Next

   Case 2
   
      For x = 0 To (screen_width/50)-5 Step 2
         For y = 0 To 10 Step 2
         
            CreateBlock(100+x*50,100+y*20,block_image(Rand(1,2)))
         
         Next
      Next
   
   Case 3
   
      For x = 0 To (screen_width/50)-5
         For y = 0 To 15
            stopper = 1-stopper
           
            If stopper
               CreateBlock(100+x*50,100+y*20,block_image(Rand(1,2)))
            EndIf
           
         Next
      Next
   
   Case 4
   
      For x = 0 To (screen_width/50)-8
         For y = 0 To x*2
            CreateBlock(100+x*50,100+y*20,block_image(Rand(1,2)))
         Next
      Next
   
   
   Case 5
     
       For x = 5 To (screen_width/50)-10
         For y = 0 To 15
            CreateBlock(100+x*50,100+y*20,block_image(Rand(1,2)))
         Next
      Next
   
   
   Default
   
      FlushKeys()
      Repeat
      Cls
      WaitTimer(game_timer)
      Text screen_width/2, screen_height/2,"Alle Levels geschafft. Gewonnen!!!!",1,1
      For i = 0 To 60
         CreatePixel(Rnd(10,screen_width-10),Rnd(10,screen_height-10),Rnd(-2,2),Rnd(-2,2),RGB(Rnd(0,255),100,Rnd(0,255)),100)
      Next
   
   
      DrawPixels()
   
      Flip
      Until GetKey()<>0
     
      End
   
End Select

FlushKeys()

Repeat
Cls


WaitTimer(game_timer)


Color 255,0,0
Text screen_width/2, screen_height/2, "LEVEL "+level_num,1,1

Color 0,255,0
Text screen_width/2, screen_height/2+50,"Press enter",1,1

For i = 0 To 10
   CreatePixel(Rnd(10,screen_width-10),Rnd(10,screen_height-10),Rnd(-2,2),Rnd(-2,2),RGB(Rnd(0,255),100,0),100)
Next


DrawPixels()

Flip
Until KeyHit(57) Or KeyHit(28)

Delete Each pixel
CreateMEssage(0,screen_height/2,"<<Level "+level_num+">>")
FlushKeys()
End Function

;************************************************************************


Ich hoffe ihr könnt mir helfen
Danke jetzt schonmal
MfG
Das Leben ist ein scheiß Spiel hat aber eine saugute Grafik!
PC:
AMD 5200 X2(2x2,6Ghz), 250GB Festplatte, 2048MB Arbeitsspeicher, Nvidia 9800 GTX mit 512MB.....
Bildschrim mit 22 Zoll und 5msk Übertragungszeit......
Mein BaumMap Tutorial:
http://www.blitzforum.de/forum...hp?t=26341

The_Nici

BeitragMo, Nov 05, 2007 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach eine variable, die die Nummer der Meshes angibt.
Dann machst du einen Abstand, z.B. 10. Dann rechnest du:
Code: [AUSKLAPPEN]

mesh\x=10*meshnr
Positionentity mesh\mesh, mesh\x, 0,0
meshnr=meshnr+1

Tadä.
Mit etwas Logik hättest du das selber geschafft.
 

AMD

BeitragMo, Nov 05, 2007 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
lol sry ich stell in letzter zeit häufiger solche fragen^^
ok des hab ich soweit so gemacht:

Code: [AUSKLAPPEN]
For i = 0 To 99
SphereNeu = CopyEntity(sphere)
lol=10*meshnr
lolo=10*meshnr
PositionEntity SphereNeu, lol, lolo,0
meshnr=meshnr+1
Next


aber ich will eigendlich dases so aussieht weil da oben isses jetzt nur ne diagonale linie

ich wills aber so:

-----
-----
-----
-----

müsste man das net i-wie errechnen können mit Länge * Breite und so?

ach ja und ich will ja auch noch das jedes einzeln gelöscht werden kann.
sorry wenn du das in deinem obigen geposeten code schon so eingebaut hattest aber ich habs net ganz kapiert Embarassed

MfG
Das Leben ist ein scheiß Spiel hat aber eine saugute Grafik!
PC:
AMD 5200 X2(2x2,6Ghz), 250GB Festplatte, 2048MB Arbeitsspeicher, Nvidia 9800 GTX mit 512MB.....
Bildschrim mit 22 Zoll und 5msk Übertragungszeit......
Mein BaumMap Tutorial:
http://www.blitzforum.de/forum...hp?t=26341
 

TeDy14

Gast

BeitragMo, Nov 05, 2007 22:51
Antworten mit Zitat
Code: [AUSKLAPPEN]

dim kugel(1000000)

abstand=10
FOr x=0 to 100
for y=0 to 100
SphereNeu = CopyEntity(sphere)
PositionEntity SphereNeu,y*abstand,x*abstand,0
kugel(nr) = sphereneu
nr=nr+1
next
next


So müsste es gehen...
Ich hoffe ich hab dich richtig verstanden
 

AMD

BeitragMo, Nov 05, 2007 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
ja hast du richtig verstanden danke sehr

auch wenns ja eigl. ganz leicht is *kopf gegen tisch hau*^^
MfG

Edit:

ach ja aber ich will ja auch jedes einzelne löschen können muss ich da dann doch net was mit Types machen?
oder geht des doch auch i-wie so?
Das Leben ist ein scheiß Spiel hat aber eine saugute Grafik!
PC:
AMD 5200 X2(2x2,6Ghz), 250GB Festplatte, 2048MB Arbeitsspeicher, Nvidia 9800 GTX mit 512MB.....
Bildschrim mit 22 Zoll und 5msk Übertragungszeit......
Mein BaumMap Tutorial:
http://www.blitzforum.de/forum...hp?t=26341

Eingeproggt

BeitragMo, Nov 05, 2007 23:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Du bist heute aber ordentlich daneben Very Happy

TedY hat dir das alles in eine Array gemacht... Mit dessen Hilfe du ja auf die Entities zurückgreifen kannst (sprich_ sie löschen)

Und mit Types wärs auch kein prob, aber das kriegst du selber heraus, wenn du dich jetzt mal ausschläfst Wink

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

TeDy14

Gast

BeitragDi, Nov 06, 2007 16:39
Antworten mit Zitat
AMD hat Folgendes geschrieben:
ja hast du richtig verstanden danke sehr

auch wenns ja eigl. ganz leicht is *kopf gegen tisch hau*^^
MfG

Edit:

ach ja aber ich will ja auch jedes einzelne löschen können muss ich da dann doch net was mit Types machen?
oder geht des doch auch i-wie so?

eingeproggt hat recht ...
mit dem array kugel(nummer) kannst du alle entitys einzeln löschen


hab gedacht ich hätte es oben dazu geschrieben
 

AMD

BeitragDi, Nov 06, 2007 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
lol ok an scheinend hat das ausschlafen nix gebreacht vll liegt das ja an der dummen Deutsch schulaufgabe die wir heut geschrieben haben Wink

also ich habs so probiert:

Code: [AUSKLAPPEN]
If EntityCollided(Ball,4)
FreeEntity kugel(nr)
End If


aber da passiert nix Sad

und dann hab ich es noch so probiert:

Code: [AUSKLAPPEN]
If EntityCollided(Ball,4)
FreeEntity sphereneu
End If


aber da kam dann die fehlermeldung "Entity does not Exist"

ich habs auch noch anders probiert aber nix geschaft...

vll könnt ihr mir nochmal helfen^^
danke

MfG

oder muss ich da doch mit "Delete" arbeiten? hab dazu aber auch nur samples für Types gefunden und auch schon ein wenig rum probiert aber auch nix geschaft...
Das Leben ist ein scheiß Spiel hat aber eine saugute Grafik!
PC:
AMD 5200 X2(2x2,6Ghz), 250GB Festplatte, 2048MB Arbeitsspeicher, Nvidia 9800 GTX mit 512MB.....
Bildschrim mit 22 Zoll und 5msk Übertragungszeit......
Mein BaumMap Tutorial:
http://www.blitzforum.de/forum...hp?t=26341

The_Nici

BeitragMi, Nov 07, 2007 8:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Blabla. Wenn du die Klötze in einem array speicherst. musst du die Kollision in einer Schleife überprüfen.

Code: [AUSKLAPPEN]

For nr=0 to irgendwas
If EntityCollided(Ball,4)
FreeEntity kugel(nr)
End If
Next


Allgemein würd ich die Dinger in Types speichern, praktischer. (Wegen For...each)
 

AMD

BeitragSa, Nov 10, 2007 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

also ich hab das jetzt so eingebaut:

Code: [AUSKLAPPEN]
For nr=1 To 1
If EntityCollided(Ball,4)
FreeEntity Kugel(nr)
End If
Next


es wird zwar gelöscht aber dann kommt entity does not exist außerdem will ich ja genau des gelöscht haben mit dem ich gerade kolliediere...

MfG
Das Leben ist ein scheiß Spiel hat aber eine saugute Grafik!
PC:
AMD 5200 X2(2x2,6Ghz), 250GB Festplatte, 2048MB Arbeitsspeicher, Nvidia 9800 GTX mit 512MB.....
Bildschrim mit 22 Zoll und 5msk Übertragungszeit......
Mein BaumMap Tutorial:
http://www.blitzforum.de/forum...hp?t=26341

Tankbuster

BeitragSa, Nov 10, 2007 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Types oder Arrays, und für jede Kugel eine Kollisionsvariable (entweder True oder False) setzen.
Wenn Kugel\Kollision=True kannst du die Kugel löschen Wink
Für Arrays:
Wenn Kugel(i,1)=True kannst du die Kugel löschen.
i ist dabei die Nummer der Kugel, und die 1 steht für die Kollisionsvariable
Kugel(i,0) wäre dann das Kugel-Mesh Wink
Twitter
Download Jewel Snake!
Windows|Android

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group