OK, lets have a competition. Most complex PONG

Miscellaneous Forums/General Discussion/OK, lets have a competition. Most complex PONG

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

here's my entry ;-)
;demo01-01.bb - A Complete game of KONG

;Set up graphics mode
Graphics 800,600 

;Seed the random generator (make random numbers actually random)
SeedRnd(MilliSecs()) 

;Create a back buffer
SetBuffer BackBuffer()
;Set the handle to the center of images
AutoMidHandle True  


;CONSTS
;The following are key code constants
Const UPKEY = 200   ;Up
Const DOWNKEY = 208  ;Down
Const PAUSEKEY = 25  ;P


Const HUMANSPEED = 7 ;The human's max speed
Const COMPUTERSPEED = 6 ;The computer's max speed


;TYPES
;The player type: both the human and the opponent
Type player 
	Field y,score     ;y position and score
End Type

;The ball type: for the ball
Type ball 
	Field x,y,xv,yv     ;x, y coordinates, and x, y velocity
End Type

;IMAGES
;The picture of the human player
Global player1image = LoadImage("player1.bmp")   

;The picture of the computer player
Global player2image = LoadImage("player2.bmp") 

;The picture of the ball
Global ballimage = LoadImage("ball.bmp") ;Load the ball image

;TYPE INITIALIZATION

;Create a ball
Global ball.ball = New ball 
;Create the human
Global player1.player = New player 
;Create the computer
Global player2.player = New player 


;INITIALIZATION

Text 400,300,"Ready...Set"
;Wait for one second
Delay(1000) 
Text 420,330,"GO!!!"
Flip 
;Delay for 1/5 of a second
Delay(200) 

;Initialize the level
InitializeLevel() 


;Set inital scores
player1\score = 0 
player2\score = 0

;MAIN LOOP
While Not KeyDown(1)

;Clear the screen
Cls 

;Draw the ball
DrawImage (ballimage,ball\x,ball\y) 
;Draw the human
DrawImage (player1image, 60, player1\y) 
;Draw the computer
DrawImage (player2image, 740, player2\y) 

;Test what user pressed
TestKeyboard() 
;What should AI do?
TestAI() 
;Draw the HUD
DrawScore() 

Flip

Wend ;END OF MAIN LOOP

;FUNCTIONS
;INITIALIZELEVEL()
;Sets up starting values
Function InitializeLevel()

;Put ball in center of the screen
ball\x = 400 
ball\y = 300 

;Make the ball move in a random direction
ball\xv = Rand(2,6) 
ball\yv = Rand(-8,8)

;Place the players in their correct position
player2\y = 300 
player1\y = 300
End Function


;DRAWSCORE()
;Draws the HUD in the top right
Function DrawScore()
;Write the human score
Text 700,0,"Player 1: " + player1\score 
;Write the computer's score
Text 700,30,"Player 2: " + player2\score 
End Function

;TESTKEYBOARD()
;Moves player up and down based on keyboard
Function TestKeyboard()

;If player hits up, move him up
If KeyDown(UPKEY)
	player1\y = player1\y - HUMANSPEED 
EndIf

;If player presses down, move him down
If KeyDown(DOWNKEY) 
	player1\y = player1\y + HUMANSPEED 
End If

;if player presses Pause, pause the game
If KeyHit(PAUSEKEY) 
	;make screen blank
	Cls 
	
	Text 400,300,"Press 'P' to Unpause Game"
	
	Flip 
	
	;wait for player to unpause
	While Not KeyHit(PAUSEKEY) 
	Wend

EndIf

End Function





;TESTAI()
;Updates ball and score and enemy
Function TestAI()

;If ball is above computer, move computer up
If ball\y > player2\y 
	player2\y = player2\y + COMPUTERSPEED 

;if ball is lower than computer, move computer down
ElseIf ball\y < player2\y
	player2\y = player2\y - COMPUTERSPEED 
	EndIf
	
;If ball hits human player, reflect it away from him and variate its velocity and direction
If ImagesOverlap(ballimage,ball\x,ball\y,player1image,60,player1\y) 
	ball\xv = -ball\xv + Rand(-4,4) 
	ball\yv = ball\yv + Rand(-4,4)
	
;If ball hits computer, reflect it away from computer and variate its velocity and direction
ElseIf ImagesOverlap(ballimage,ball\x,ball\y,player2image,740,player2\y) 
	ball\xv = -ball\xv + Rand(-4,4) 
	ball\yv = ball\yv + Rand(-4,4)
	
;If ball hits top wall, reflect it downwards
ElseIf ball\y <= 0  
	ball\yv = -ball\yv + Rand (-1,1) 
	ball\xv = ball\xv + Rand (-1,1)  
	
;If ball hits bottom wall, reflect it upwards
ElseIf ball\y >= 600 
	ball\yv = -ball\yv + Rand (-1,1) 
	ball\xv = ball\xv + Rand (-1,1)  
	
;if ball hits left wall, computer has scored so computer gets one more point
ElseIf ball\x <= 0  
	player2\score = player2\score + 1   ;computer scores
	Text 400,300,"Player 2 Scores!!!"
	Flip
	;wait two seconds
	Delay(2000) 
	
	;reset level
	InitializeLevel() 
	
;If ball hits right wall, human scored so give him a point
ElseIf ball\x >= 800 
	player1\score = player1\score + 1   ;human scores
	Text 400,300,"Player 1 Scores!!!"
	Flip 
	;wait 2 secs
	Delay(2000) 
	;reset level
	InitializeLevel() 
EndIf
	
	;update ball's position on screen
	ball\x = ball\x + ball\xv 
	ball\y = ball\y + ball\yv 
	
End Function