| Tabletennis program again, I need help with the angles 
 
	 
	
		| Author | Message |   
		| PhOtO! 
 
 
 
 
 | 
			
				|  Posted: Thu Jun 02, 2005 7:02 pm    Post subject: Tabletennis program again, I need help with the angles |  |   
				| 
 |  
				| I posted a new topic cause everyone just stopped going to my previous one. 
 I fixed most of the problems, but i still have a problem with the angles ( i want the ball to go in the direction depending on what angle it hits my paddle with)
 
 
 ok this is my program so far..
 
 
 setscreen ("graphics:max;max")
 
 var x, y, button : int %x and y for paddle
 var x2, y2 : int  %x and y for ball
 var x3, y3 : int
 var nx2, ny2 : int := 2 %change of x and y for ball
 var nx3 : int  %x and y for computer paddle
 var r : int := 9 %radius for ball
 var r1 : int := 15 %x radius for paddle
 var r2 : int := 20 %y radius for paddle
 var t : int     %counter for computer score
 var u : int     %counter for player score
 var n : int     %final score
 
 x := Rand.Int (10, 100) %set x for paddle
 y := Rand.Int (10, 100) %set y for paddle
 x2 := Rand.Int (10, 100) %set x for ball
 y2 := Rand.Int (10, 100) %set y for ball
 y3 := 600 %sets y axis for computer paddle
 x3 := Rand.Int (10,100) %sets x axis for computer paddle
 
 t := 0  %computer counter
 u := 0 %player counter
 
 
 drawfill (1,1,1,1)      %sets background
 colourback (1)
 colour (0)              %font colour
 put "How much do you want the score to go up till?"
 get n
 cls
 
 
 setscreen ("offscreenonly")
 %Tennis court lines
 loop
 
 
 drawfill (500,360,9,9)
 drawfillbox (400,450,405,85, 0)
 
 drawfillbox (250,450,540,455,0)
 drawfillbox (220,85,580,90,0)
 
 for i : 1..5
 drawline (220+i,85,250+i,450,0)
 end for
 
 for a : 1..5
 drawline (580-a,90,540-a,455,0)
 end for
 
 drawline (200,0,200,maxy,0)
 drawline (600,0,600,maxy,0)
 
 
 %Net
 
 for b : 0..30 by 10
 drawline (240,262,560,262,0) %Horizontal lines
 drawline (240,261+b,555,261+b,0)
 end for
 
 for c : 0..310 by 10         %Vertical lines
 drawline (244+c,261,244+c,291,0)
 end for
 
 
 
 
 Draw.FillOval (x, y, r1, r2, red) %player paddle
 Draw.FillOval (x2, y2, r, r, white) %ball
 Draw.FillOval (x3,y3,r1,r2,red) %computer paddle
 View.Update
 Draw.FillOval (x3,y3,r1,r2,9) %player paddle
 Draw.FillOval (x2, y2, r, r, 9) %ball
 Draw.FillOval (x, y, r1, r2, 9) %computer paddle
 
 
 Mouse.Where (x, y, button) %locates x and y for paddle
 
 
 
 if x2 <= 200 then %check to see if ball goes off the left
 nx2 := 3 %chages the direction
 
 elsif y2 <= 0 then %check to see if ball goes off to the bottom
 ny2 := 3 %changes the direction
 t := t + 1
 end if
 
 if x2 >= 600 then %check to see if ball goes off the right
 nx2 := - 3 %chages the direction
 
 elsif y2 >= 650 then %check to see if ball goes off to the top
 ny2 := - 3 %chages the direction
 u := u + 1
 end if
 
 
 %checks if paddle hit ball
 if x + r1 > x2 - r and x - r1 < x2 + r and y + r2 > y2 - r and y - r2 < y2 + r
 then
 
 %chages the direction of the ball
 nx2 := nx2 * - 1
 ny2 := ny2 * - 1
 end if
 %checks if computer paddle hit the ball
 if x3 + r1 > x2 - r and x3 - r1 < x2 + r and y3 + r2 > y2 - r and y3 - r2 < y2 + r
 then
 %changes the direction of the ball
 nx2 := nx2 * - 1
 ny2 := ny2 * - 1
 
 end if
 
 %makes ball move
 x2 += nx2
 y2 += ny2
 x3 += nx2
 
 
 %locates player score and prints
 locatexy (5,60)
 colourback (9)
 put "Player score : "..
 put u
 %locates computer score and prints
 locatexy (600,700)
 colourback (9)
 put "Computer score : "..
 put t
 exit when t = n or u = n
 
 end loop
 
 if t = n then
 put " YOU LOSE "
 put " GAME OVER "
 elsif u = n then
 put " YOU WIN "
 put " GAME OVER "
 
 end if
 |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| Sponsor Sponsor
 
  
   |  |   
		|  |   
		| Delos 
 
  
 
 
 | 
			
				|  Posted: Thu Jun 02, 2005 9:16 pm    Post subject: (No subject) |  |   
				| 
 |  
				| 1) Please learn to use [code] tags.  You have a grasp of italics tags, so [code] or [syntax] shouldn't be a stretch.
 
 2)
 Your code isn't too bad so far.  Your commenting is rigorous, so always appreciated.
 
 3)
 What you're looking for is circular collision detection.  Check the Tutorials for any references to this (if you need a starting point, Cervantes has posted a walkthrough of all tutorials).
 If you're still in need of help, search out some Slime Volleyball programmes posted up.  They'll help you with the idea.
 
 The concept is that you'll be determining the angle of collision with respect to the centre of your paddle.  This will then allow you to assign your components to your resultant velocity of your ball.  In your code, your components appear to be represented by 'nx2' and 'ny2'.
 If you're not sure how components work, ask a physics teacher or consult a suitable text book.
 |  
				|  |  |   
		|  |  |  
	  
		|  |   
		|  |  
 |