| collision for lots of circles 
 
	 
	
		| Author | Message |   
		| be natural* 
 
 
 
 
 | 
			
				|  Posted: Sun Jun 08, 2003 7:33 pm    Post subject: collision for lots of circles |  |   
				| 
 |  
				| I'm trying to make collision detection work for my game.. there are a lot of circles up on the screen and i'm shooting a circle from a point. when the circle collide any of the circles it will stop & if they have the same colour, they'll disappear.
 I've tried making two circles disappear when they collide, but should i use an array for the centres of each circle if i want to use circle collision?
 |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| Sponsor Sponsor
 
  
   |  |   
		|  |   
		| Andy 
 
 
 
 
 | 
			
				|  Posted: Sun Jun 08, 2003 7:38 pm    Post subject: (No subject) |  |   
				| 
 |  
				| you should, but you could also just use whatdotcolor |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| be natural* 
 
 
 
 
 | 
			
				|  Posted: Sun Jun 08, 2003 7:43 pm    Post subject: (No subject) |  |   
				| 
 |  
				| what's whatdotcolor? and can u explain how to use it?
 
 thx
  |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| Andy 
 
 
 
 
 | 
			
				|  Posted: Sun Jun 08, 2003 7:48 pm    Post subject: (No subject) |  |   
				| 
 |  
				| whatdotcolor checks the color of one pixel 
 it returns the color of the pixel in integer format
 if you are shooting a projectile and the targets you are shooting are simply circles drawn by turing, you can just say
 
 	  | code: |  	  | 
if whatdotcolor(projectilex, projectiley)=circleclr then
 %do whatever you want to do here
 end if
 
 | 
 but using pythagorus is so much easier
 
 	  | code: |  	  | 
for i:1..circlenum
 if (circlex-projectilex)**2+(cicley-projectiley)**2>circleradius then
 %do your thing here after
 end if
 end for
 
 | 
 if you have turing 4.01 or better, just type in the command and press F9
 |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| be natural* 
 
 
 
 
 | 
			
				|  Posted: Mon Jun 09, 2003 8:40 am    Post subject: (No subject) |  |   
				| 
 |  
				| i've tried to make circle collision but it doesn't really work... 
 can anybody tell me what should i fix in my code?
 also, how can i identify the circles that are already disappeared so that the circle that is being shoot can pass through?
 
 i've attached the code below.
 
 
 	  | code: |  	  | 
setscreen ("graphics:400;600")
 
 var iColor : int
 var iX : int := 31
 var iY : int := 520
 var iShootX : int := 200
 var iShootY : int := 91
 var rD : array 1 .. 33 of real
 var chars : array char of boolean
 var b:int
 
 var iMap1x : array 1 .. 33 of int
 var iMap1y : array 1 .. 33 of int
 
 for z : 1 .. 33
 iMap1x (z) := iX * z
 if (z >= 13) and (z <= 23) then
 iMap1x (z) := (iX - 15) + (31 * (z - 12))
 elsif (z >= 24) and (z <= 33) then
 iMap1x (z) := iX + (31 * (z - 23))
 end if
 end for
 
 for y : 1 .. 33
 iMap1y (y) := iY - 15
 if (y >= 13) and (y <= 23) then
 iMap1y (y) := iY - 42
 elsif (y >= 24) and (y <= 33) then
 iMap1y (y) := iY - 69
 end if
 end for
 
 for a : 1 .. 33
 randint (iColor, 1, 5)
 drawfilloval (iMap1x (a), iMap1y (a), 15, 15, iColor)
 end for
 
 iColor := 1
 loop
 drawfilloval (iShootX, iShootY, 15, 15, iColor)
 Input.KeyDown (chars)
 if chars (KEY_SHIFT) then
 loop
 for a : 1 .. 33
 rD (a) := sqrt ((iMap1x (a) - iShootX) * (iMap1x (a) - iShootX) + (iMap1y (a) - iShootY) * (iMap1y (a) - iShootY))
 exit when rD (a) <= 30
 b:=a
 end for
 drawfilloval (iShootX, iShootY, 15, 15, iColor)
 delay (1)
 drawfilloval (iShootX, iShootY, 15, 15, white)
 iShootY += 1
 end loop
 drawfilloval (iShootX, iShootY, 15, 15, iColor)
 
 if whatdotcolor (iMap1x (b), iMap1y (b)) = iColor then
 drawfilloval (iMap1x (b), iMap1y (b), 15, 15, white)
 drawfilloval (iShootX, iShootY, 15, 15, white)
 end if
 iShootY := 91
 randint (iColor, 1, 5)
 end if
 end loop
 
 
 | 
 |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| Prince 
 
  
 
 
 |  |   
		|  |  |  
	  
		|  |   
		| Asok 
 
  
 
 
 | 
			
				|  Posted: Mon Jun 09, 2003 3:40 pm    Post subject: (No subject) |  |   
				| 
 |  
				| omg, I just got an idea on how to use whatdotcolor for a collision detection game... 
 PACHINKO!
  |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| Andy 
 
 
 
 
 | 
			
				|  Posted: Mon Jun 09, 2003 5:28 pm    Post subject: (No subject) |  |   
				| 
 |  
				| its really good if all of your targets are the same color |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| Sponsor Sponsor
 
  
   |  |   
		|  |   
		| Homer_simpson 
 
  
 
 
 | 
			
				|  Posted: Mon Jun 09, 2003 5:44 pm    Post subject: (No subject) |  |   
				| 
 |  
				| they dont need to be create a new color : 
 solved!!!
 
 	  | code: |  	  | 
var bgclr := RGB.AddColor (.5, 0.5, 0.6)
 RGB.SetColor (bgclr, .01, 0, 0)
 
 colorback (bgclr)
 cls
 for i : 1 .. 20
 drawfilloval (Rand.Int (1, maxx), Rand.Int (1, maxy), 30, 30, Rand.Int (1, 255))
 end for
 var mx, my, mb : int
 color (white)
 
 put bgclr
 loop
 mousewhere (mx, my, mb)
 if whatdotcolor (mx, my) not= bgclr then
 locate (1, 1)
 put "collision detected!!!"
 else
 locate (1, 1)
 put "collision not detected!!!"
 end if
 end loop
 
 | 
 |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| be natural* 
 
 
 
 
 | 
			
				|  Posted: Mon Jun 09, 2003 8:14 pm    Post subject: (No subject) |  |   
				| 
 |  
				| I got this error message Quote: "Array subscript is out of range"What does this mean? |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| PaddyLong 
 
 
 
 
 | 
			
				|  Posted: Mon Jun 09, 2003 8:19 pm    Post subject: (No subject) |  |   
				| 
 |  
				| it means you tried to acces an index in your array that isn't there... 
 let's say you had
 var somearray : array 1..10 of int
 
 then you tried to do
 
 somearray (11) := 3
 
 you would get array subscript out of range becuase somearray only goes up to 10 ... therefore there is no index 11
 |  
				|  |  |   
		|  |  |  
	  
		|  |   
		|  |  
 |