Another question
BlitzPlus Forums/BlitzPlus Programming/Another question| 
 | ||
| My game is coming along very well so far (I'm an extreme beginner). I'd like to thank Sauer for helping me take out the error message that I was getting in my game and thanks for helping me discover this forum code. Now, I'm trying to make it so that when the player pushes one ORBE into the door, it would be the last and only ORBE. My game source code is below. I wrote in the parts that I'm trying to fix via this marker: ";" ----------------------------------------------  Graphics 900, 900
SetBuffer BackBuffer()
 
EATUM = LoadImage ("Eatum.png") 
APPLE = LoadImage("Apple.png")
ORBE = LoadImage("Orbe.png")
DOOR = LoadImage("Door.png")
BACKGROUND = LoadImage("Clouds.jpg")
Type EATUM
Field x,y
End Type 	
		
	
Type APPLE
	Field x,y 
End Type 
Type ORBE
	Field x,y
End Type 
Type DOOR
	Field x,y
End Type
e.EATUM = New EATUM
e\x = 70
e\y = 200
For z = 1 To 5
a.Apple = New Apple
a\x = 100+30*z
a\y = 90*z
Next 
;this is the ORBE that I was talking about. I only wanted 1 of these
o.ORBE = New ORBE
o\x = 100
o\y = -200
 
d.DOOR = New DOOR
d\x = 50
d\y = 50
Score = 0
ScrollRightLeft = -200
While Not KeyDown (1)  
Cls
TileImage BACKGROUND,ScrollRightLeft
DrawImage (EATUM,e\x,e\y)
For a.APPLE = Each APPLE
DrawImage(APPLE,a\x,a\y)
If ImagesCollide(EATUM,e\x,e\y,0,APPLE,a\x,a\y,0) Then Delete a score = score + 1 
Next 
Text 150,150, "Score" + Score
If KeyDown(203)
e\x = e\x - 3 
ScrollRightLeft = ScrollRightLeft + 3
If ImagesCollide(EATUM,e\x,e\y,0,ORBE,o\x,o\y,0) Then o\x = o\x - 3
EndIf 
If KeyDown(205)
e\x = e\x + 3
ScrollRightLeft = ScrollRightLeft - 3
If ImagesCollide(EATUM,e\x,e\y,0,ORBE,o\x,o\y,0) Then o\x = o\x + 3
EndIf 
If KeyDown(200)
 e\y = e\y - 3
If ImagesCollide(EATUM,e\x,e\y,0,ORBE,o\x,o\y,0) Then o\y = o\y - 3
EndIf 
If KeyDown(208) 
e\y = e\y + 3
If ImagesCollide(EATUM,e\x,e\y,0,ORBE,o\x,o\y,0) Then o\y = o\y + 3
EndIf 
DrawImage (DOOR,d\x,d\y)
;in essence, I'm trying to have one and only one ORBE to push into the door and delete. But now, everytime I push the ORBE into the door, another ORBE appears. Thus, how do I modify this part to stop the second ORBE from appearing? It appears that it might be something simple, but I don't know what it is. Thanks.
DrawImage (ORBE,o\x,o\y)
If ImagesCollide(DOOR,d\x,d\y,0,ORBE,o\x,o\y,0) Text 350,300, "Great Job" Delete o o.ORBE = New ORBE score = score + 1
 
	
Flip
Wend 
 | 
| 
 | ||
| In the line.. If ImagesCollide(DOOR,d\x,d\y,0,ORBE,o\x,o\y,0) Text 350,300, "Great Job" Delete o o.ORBE = New ORBE score = score + 1 o.ORBE = New ORBE is where you are creating a new orb. | 
| 
 | ||
| Additionally, looking through your previous posts on the forum Check that 'o' is actually assigned before trying to use it.. 
If(o <> Null) Then
    DrawImage (ORBE, o\x, o\y);
    
    If ImagesCollide(DOOR,d\x,d\y,0,ORBE,o\x,o\y,0) Then
     
       Text 350,300, "Great Job" 
       Delete o 
       score = score + 1
    EndIf
EndIf
Also as you're a beginner I'd recommend indenting your code, makes it far easier to read and spot mistakes. It's a simple discipline worth adopting. Hope this helps... | 
| 
 | ||
| 
Graphics 900, 900
SetBuffer BackBuffer()
 
EATUM = LoadImage ("Eatum.png") 
APPLE = LoadImage("Apple.png")
ORBE = LoadImage("Orbe.png")
DOOR = LoadImage("Door.png")
BACKGROUND = LoadImage("Clouds.jpg")
Type EATUM
	Field x,y
End Type 	
		
	
Type APPLE
	Field x,y 
End Type 
Type ORBE
	Field x,y
End Type 
Type DOOR
	Field x,y
End Type
e.EATUM = New EATUM
e\x = 70
e\y = 200
For z = 1 To 5
a.Apple = New Apple
a\x = 100+30*z
a\y = 90*z
Next 
;this is the ORBE that I was talking about. I only wanted 1 of these
o.ORBE = New ORBE
o\x = 100
o\y = -200
 
d.DOOR = New DOOR
d\x = 50
d\y = 50
Score = 0
ScrollRightLeft = -200
While Not KeyDown (1)  
	Cls
	TileImage BACKGROUND,ScrollRightLeft
	DrawImage (EATUM,e\x,e\y)
	For a.APPLE = Each APPLE
		DrawImage(APPLE,a\x,a\y)
		If ImagesCollide(EATUM,e\x,e\y,0,APPLE,a\x,a\y,0) Then 
			Delete a score = score + 1 
		End If
	Next 
	Text 0,10, "Score" + Score
	If KeyDown(203) Then
		e\x = e\x - 3 
		ScrollRightLeft = ScrollRightLeft + 3
		If(o <> Null) Then
			If ImagesCollide(EATUM,e\x,e\y,0,ORBE,o\x,o\y,0) Then 
				o\x = o\x - 3
			End If
		End If
		
	EndIf 
	If KeyDown(205)
		
		e\x = e\x + 3
		ScrollRightLeft = ScrollRightLeft - 3
		If(o <> Null) Then
			If ImagesCollide(EATUM,e\x,e\y,0,ORBE,o\x,o\y,0) Then 
				o\x = o\x + 3
			End If
		End If
		
	EndIf 
	If KeyDown(200)
 		
		e\y = e\y - 3
		
		If(o <> Null) Then
		
			If ImagesCollide(EATUM,e\x,e\y,0,ORBE,o\x,o\y,0) Then 
				o\y = o\y - 3
			End If
		End If
			
	EndIf 
	If KeyDown(208) 
		
		e\y = e\y + 3
		If(o <> Null) Then
		
			If ImagesCollide(EATUM,e\x,e\y,0,ORBE,o\x,o\y,0) Then 
				o\y = o\y + 3
			End If
		End If
	EndIf 
	DrawImage (DOOR,d\x,d\y)
	If(o <> Null) Then
	
		DrawImage (ORBE,o\x,o\y)
		If ImagesCollide(DOOR,d\x,d\y,0,ORBE,o\x,o\y,0) 
		
			Delete o 
			score = score + 1
		End If
	Else
		
		Text 0,50, "Great Job" 
	
	End If
	
			
	Flip
Wend 
End
Give that a whirl... |