Another question

BlitzPlus Forums/BlitzPlus Programming/Another question

En929(Posted 2009) [#1]
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 




Yeshu777(Posted 2009) [#2]
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.


Yeshu777(Posted 2009) [#3]
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...


Yeshu777(Posted 2009) [#4]

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...