lufthansa747
|
Posted: Sat Dec 05, 2009 6:15 pm Post subject: my pong game grade 9 |
|
|
this is my first try at pong. it is 2 players and right now i am working on an AI for the second player. pease give me some pointers on how to make it better
View.Set ("graphics:max;max,offscreenonly,nobuttonbar,nocursor")
var player1Score : int := 0
var player2Score : int := 0
var playerWinFont : int := Font.New ("sans serif:100:bold")
var continue : char
var fontWidth : int
class ball
export start, draw
var x : int := maxx div 2
var y : int := maxy div 2
var radius : int := 20
var xint, yint : int := 3
var upState, sideState : int
loop
upState := Rand.Int (-1, 1)
exit when upState not= 0
end loop
loop
sideState := Rand.Int (-1, 1)
exit when sideState not= 0
end loop
procedure start
Draw.FillBox (0, 0, maxx, maxy, black)
Draw.FillOval (x, y, radius, radius, white)
end start
procedure draw (x1, x3, y1, y2, y3, y4 : int)
if x - xint <= 0 and sideState = -1 then %Check left wall
sideState := 1
player2Score += 1
end if
if x + xint >= maxx and sideState = 1 then % check right wall
sideState := -1
player1Score += 1
end if
if y + yint >= maxy and upState = 1 then %check top wall
upState := -1
end if
if y - yint <= 0 and upState = -1 then % check bottom wall
upState := 1
end if
if x - xint - radius <= x1 and sideState = -1 and y > y1 and y < y2 then % check left guy hits ball
sideState := 1
elsif x + xint + radius >= x3 and sideState = 1 and y > y3 and y < y4 then % check left guy hits ball
sideState := -1
end if
Draw.FillOval (x, y, radius, radius, black)
x += xint * sideState
y += yint * upState
Draw.FillOval (x, y, radius, radius, white)
end draw
end ball
class player
export start, player2, move, x2, y, y2, x
var sizex : int := 20
var sizey : int := 200
var x : int := 0
var x2 : int := x + sizex
var y : int := maxy div 2 - sizey div 2
var y2 : int := maxy div 2 + sizey div 2
var yint : int := 5
procedure start
Draw.FillBox (x, y, x2, y2, white)
end start
procedure move (userAction : char)
if userAction = 'w' and y2 + yint <= maxy then
Draw.FillBox (x, y, x2, y2, black)
y += yint
y2 += yint
Draw.FillBox (x, y, x2, y2, white)
elsif userAction = 's' and y - yint >= 0 then
Draw.FillBox (x, y, x2, y2, black)
y -= yint
y2 -= yint
Draw.FillBox (x, y, x2, y2, white)
end if
if userAction = KEY_UP_ARROW and y2 + yint <= maxy then
Draw.FillBox (x, y, x2, y2, black)
y += yint
y2 += yint
Draw.FillBox (x, y, x2, y2, white)
elsif userAction = KEY_DOWN_ARROW and y - yint >= 0 then
Draw.FillBox (x, y, x2, y2, black)
y -= yint
y2 -= yint
Draw.FillBox (x, y, x2, y2, white)
end if
end move
procedure player2
x := maxx - sizex
x2 := maxx
end player2
end player
procedure updateScore ()
locate (1, 1)
put "Player 1: ", player1Score, " Player 2: ", player2Score
end updateScore
loop
player1Score := 0
player2Score := 0
var userAction : array char of boolean
var scoreToReach : int := 5
var ball1 : pointer to ball
new ball, ball1
ball1 -> start
var p : pointer to player
new player, p
p -> start
var p2 : pointer to player
new player, p2
p2 -> player2
p2 -> start
for decreasing count : 5 .. 1
var countDown : string := intstr (count)
fontWidth := Font.Width (countDown, playerWinFont)
Font.Draw (countDown, maxx div 2 - fontWidth div 2, maxy div 2, playerWinFont, brightblue)
View.Update
delay (1000)
ball1 -> start
p -> start
p2 -> start
View.Update
end for
loop
Input.KeyDown (userAction)
if userAction ('w') then
p -> move ('w')
end if
if userAction ('s') then
p -> move ('s')
end if
if userAction (KEY_UP_ARROW) then
p2 -> move (KEY_UP_ARROW)
end if
if userAction (KEY_DOWN_ARROW) then
p2 -> move (KEY_DOWN_ARROW)
end if
ball1 -> draw (p -> x2, p2 -> x, p -> y, p -> y2, p2 -> y, p2 -> y2)
updateScore
exit when player1Score = scoreToReach or player2Score = scoreToReach
View.Update
end loop
if player1Score = scoreToReach then
fontWidth := Font.Width ("Player 1 Wins !!!!!", playerWinFont)
Draw.Text ("Player 1 Wins!!!!!", maxx div 2 - fontWidth div 2, maxy div 2, playerWinFont, brightred)
else
fontWidth := Font.Width ("Player 2 Wins !!!!!", playerWinFont)
Draw.Text ("Player 2 Wins!!!!!", maxx div 2 - fontWidth div 2, maxy div 2, playerWinFont, brightred)
end if
View.Update
continue := getchar
end loop |
|
|