Seite 1 von 1

Elemente Definieren

Verfasst: 16.02.2007 19:23
von D4uS1
Ich habe ein kleines Problem bezüglich einer LinkedList. Ich habe mehrere Elemente in Form eines bildes. Diese Bilder werden per Zufallsgenerator an die richtige Position gebracht. Das problem daran ist nur das ich nicht möchte das sich die Bilder überschneiden. Wie kann ich das verhindern. Ich müsste dafür denke ich die einzelnen Elemente Definieren und dann eine Zeile einfügen in der es heißt, dass sie sich nicht überschneiden dürfen.

Code: Alles auswählen

NewList Bild.BITMAP()

If Elemente < 3
 AddElement(Bild())
 Elemente +1
endif

ForEach Bild()
 Bild()\bmWidth = random(768)
;-----Hier müsste dann der Code hin der besagt das die einzelnen bilder sich nicht pberlappen dürfen

 DisplayTransparentsprite(0, Bild()\bmWidth, Bild()\bmHeight
next
Ps: Der Originalcode ist ziemlich groß, kann sein das ich irgentetwas vergessen habe. Das Bild ist 200*200 Pixel groß.

Verfasst: 16.02.2007 20:24
von Scarabol
Sorry, aber ich versteh nicht ganz dein Problem...

1. Kannst du mal die Struktur Bitmap posten, oder wo find ich die?

2. Was heißt "Diese Bilder werden per Zufallsgenerator an die richtige Position gebracht."? Entweder die Bilder sind richtig oder nicht, da kann man keine Zufallsfunktion einbauen oder wie stellst du dir das vor?

3. Prüf doch einfach für jedes Bild mit Foreach Bild() ob an der Stelle schon ein Bild ist oder nicht.

Gruß
Scarabol

Verfasst: 16.02.2007 20:32
von Fluid Byte

Code: Alles auswählen

#SPRITECX = 60
#SPRITECY = 60
#SPRITENUM = 15

InitSprite() : InitKeyboard()

OpenWindow(0,0,0,640,480,"untitled",#WS_SYSMENU | #WS_CAPTION | 1)
OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)

LoadFont(0,"Arial Black",25)

For i=0 To #SPRITENUM-1
	CreateSprite(i,#SPRITECX,#SPRITECY)
	StartDrawing(SpriteOutput(i))
	DrawingFont(FontID(0))
	DrawingMode(1)
	Box(1,1,#SPRITECX-2,#SPRITECY-2,#Red)
	DrawText(#SPRITECX/2-TextWidth(Str(i+1))/2,#SPRITECY/2-TextHeight(Str(i+1))/2,Str(i+1))
	StopDrawing()
Next

Structure SPRITE
	ID.w
	X.w
	Y.w
EndStructure

Global NewList spr.SPRITE()

Procedure SpriteOverlap(X.w,Y.w)
 	ForEach spr()
		If SpriteCollision(0,X,Y,0,spr()\X,spr()\Y)
			ProcedureReturn 1
		EndIf
	Next

	ProcedureReturn 0
EndProcedure

Repeat
	X = Random(640 - #SPRITECX)
	Y = Random(480 - #SPRITECY)
	
	If SpriteOverlap(X,Y) = 0
		AddElement(spr())
		spr()\ID = CountList(spr()) -1
		spr()\X = X
		spr()\Y = Y
	EndIf
Until CountList(spr()) = #SPRITENUM

Repeat
	EventID = WindowEvent()
	
	ClearScreen($CCCCCC)	
	ExamineKeyboard()
	
	ForEach spr()	
		DisplaySprite(spr()\ID,spr()\X ,spr()\Y)
	Next
	
	FlipBuffers()
Until KeyboardPushed(1) Or EventID = 16