| Ok so been working on a pong clone while trying to relearn to code after a stroke. 
 
 so far i have collision, basic ai(jitters) ball movement BUT it is not smooth
 and the ball goes crazy at times any idears on were its going pair shaped?
 
 i created the project in blide so i think it will work standalone but not tested
 
 
 
 
Framework brl.glmax2d
Import brl.glmax2d
Import brl.bmploader
Import brl.timer
Import brl.system
Import pub.libpng
Import brl.math
Import brl.random
Include "Includes\TActor.bmx"
'This BMX file was edited with BLIde ( http://www.blide.org )
Graphics 800, 600,, 60
SeedRnd(MilliSecs())
AutoMidHandle True
AutoImageFlags True
Const PLAYER_SPEED:Int = 7
Const COMPUTER_SPEED:Int = 6
Const XRANDOM_FACTOR:Int = 2
Const YRANDOM_FACTOR:Int = 1
Const START_XV_MIN:Int = 3
Const START_XV_MAX:Int = 6
Const START_YV_MIN:Int = -8
Const START_YV_MAX:Int = 8
' Create Player Using TActor
Global Player:TActor = New TActor.Create()
Player.m_Actor = LoadImage ("Media/player1.bmp")
Player.m_Posx = 10
Player.m_Posy = 250
Player.m_Alpha = 1
Player.m_Blend = 1
Player.m_Score = 0
' Create AI Using TActor
Global AI:TActor = New TActor.Create()
AI.m_Actor = LoadImage ("Media/player2.bmp")
AI.m_Posx = 770
AI.m_Posy = 250
AI.m_Alpha = 1
AI.m_Blend = 1
AI.m_Score = 0
' Create Ball Using TActor
Global Ball:TActor = New TActor.Create()
Ball.m_Actor = LoadImage ("Media/ball.bmp")
Ball.m_Posx = 400
Ball.m_Posy = 300
Ball.m_Alpha = 1
Ball.m_Blend = 1
' Initial Ball Movement
Ball.m_xv = Rand(START_XV_MIN, START_XV_MAX)
Ball.m_yv = Rand(START_YV_MIN, START_YV_MAX)
Repeat
	  Cls
		DrawText "Player 1: " + Player.m_Score, 0, 0
		DrawText "Player 2: " + AI.m_Score, 0, 20
		BallPhysics()
		Player.Actor()
		AI.Actor()
		Ball.Actor()		
	    UserInput()
	    AIMovement()
        Flip
Until KeyDown(KEY_ESCAPE)
EndGraphics
End
Function UserInput()
         If KeyDown(KEY_D) = 1 Then DebugStop
		 If KeyDown(KEY_UP)
		 	 Player.m_Posy = Player.m_Posy - PLAYER_SPEED
		 End If
		 If KeyDown(KEY_DOWN)
		 	 Player.m_Posy = Player.m_Posy + PLAYER_SPEED
		 End If
EndFunction
Function AIMovement()
	    If Ball.m_Posy > AI.m_Posy
		 	 AI.m_Posy = AI.m_Posy + COMPUTER_SPEED
		ElseIf Ball.m_Posy < AI.m_Posy
		     AI.m_Posy = AI.m_Posy - COMPUTER_SPEED
		End If
End Function
Function BallPhysics()
	    If ImagesCollide(Ball.m_Actor, Ball.m_Posx, Ball.m_Posy, 0, Player.m_Actor, 20, Player.m_Posy, 0)
		     Ball.m_xv = -Ball.m_xv + Rand(-XRANDOM_FACTOR, XRANDOM_FACTOR)
			 Ball.m_yv = Ball.m_yv + Rand(-YRANDOM_FACTOR, YRANDOM_FACTOR)
		ElseIf ImagesCollide(Ball.m_Actor, Ball.m_Posx, Ball.m_Posy, 0, AI.m_Actor, 760, AI.m_Posy, 0)
		     Ball.m_xv = -Ball.m_xv + Rand(-XRANDOM_FACTOR, XRANDOM_FACTOR)
			 Ball.m_yv = Ball.m_yv + Rand(-YRANDOM_FACTOR, YRANDOM_FACTOR)
		ElseIf Ball.m_Posy <= 0
		     Ball.m_xv = Ball.m_xv + Rand(-XRANDOM_FACTOR, XRANDOM_FACTOR)
			 Ball.m_yv = -Ball.m_yv + Rand(-YRANDOM_FACTOR, YRANDOM_FACTOR)
		ElseIf Ball.m_Posy >= 600
		     Ball.m_xv = Ball.m_xv + Rand(-XRANDOM_FACTOR, XRANDOM_FACTOR)
			 Ball.m_yv = -Ball.m_yv + Rand(-YRANDOM_FACTOR, YRANDOM_FACTOR)
		ElseIf Ball.m_Posx <= 0
		     AI.m_Score = AI.m_Score + 1
			 Cls
			 Ball.m_Posx = 400
			 Ball.m_Posy = 300
		ElseIf Ball.m_Posx >= 800
		     Player.m_Score = Player.m_Score + 1
			 Cls
			 Ball.m_Posx = 400
			 Ball.m_Posy = 300
		End If
		Ball.m_Posx = Ball.m_Posx + Ball.m_xv
		Ball.m_Posy = Ball.m_Posy + Ball.m_yv
End Function
 
 
Type TActor
     Field m_Actor:TImage
	 Field m_Sizex:Float, m_Sizey:Float
	 Field m_Alpha:Int, m_Blend:Int
	 Field m_Posx:Int, m_Posy:Int
	 Field m_Frame:Int, m_Flag:String
     Field m_Score:Int
     Field m_xv:Int
     Field m_yv:Int
	 
	 Method Actor()
			DrawImage m_Actor, m_Posx, m_Posy
			SetAlpha m_Alpha
			SetBlend m_Blend			
	 End Method
	 
	 Function Create:TActor()
	        Return New TActor
	 EndFunction
End Type
 
 |