Elemente Definieren

Anfängerfragen zum Programmieren mit PureBasic.
D4uS1
Beiträge: 268
Registriert: 02.09.2006 12:16

Elemente Definieren

Beitrag 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ß.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag 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
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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
Windows 10 Pro, 64-Bit / Outtakes | Derek
Antworten