Computer Science Canada

Help with Breakout Game

Author:  ncmitchell [ Thu Jan 12, 2012 6:34 pm ]
Post subject:  Help with Breakout Game

I'm making a Breakout game for my grade 11 computer science class, and my code isn't nearly finished, but I'm stuck on how to make it hit the paddle and bounce back up again. I've tried using whatdotcolour, but I haven't been able to make that work. All help is appreciated!! Thank you.

View.Set ("offscreenonly")

const PaddleColour := 102
const EscKey := chr (27)
const up := 0
const down := 1
const BallRad := 6
const BallColour := 26

setscreen ("graphics:800,800")

% DECLARE VARIABLES
var map : array 1 .. 20, 1 .. 20 of int
var NumRows, NumCols, font1, font2 : int
var mx, my, button : int
var x, y, Paddlex1, Paddlex2, Paddley1, Paddley2 : int
var Ballx, Bally, direction : int
var level, lives : int

level := 0

font1 := Font.New ("Arial:25:bold")
font2 := Font.New ("Arial:30:bold")

procedure ReadMap (filename : string, var map : array 1 .. *, 1 .. * of int, var NumRows, NumCols : int)
var stream : int

% OPEN FILE
open : stream, filename, get
if stream not= 0 then
get : stream, NumRows
get : stream, NumCols

for row : 1 .. NumRows
for col : 1 .. NumCols
get : stream, map (row, col)
end for
end for

% CLOSE THE FILE
close : stream
end if
end ReadMap

procedure DrawMap (map : array 1 .. *, 1 .. * of int, NumRows, NumCols : int)
var x, y : int
y := maxy - 40
for row : 1 .. NumRows
x := 0
for col : 1 .. NumCols
% BLUE BORDER
if map (row, col) = 54 then
drawfillbox (x, y, x + 40, y + 40, map (row, col))
% BLACK BACKGROUND
elsif map (row, col) = 7 then
drawfillbox (x, y, x + 40, y + 40, map (row, col))
end if
x := x + 40
end for
y := y - 40
end for
end DrawMap

procedure calculatexy (var x, y : real, angle, step : real)
x := step * cosd (angle) + x
y := step * sind (angle) + y
end calculatexy

ReadMap ("map.txt", map, NumRows, NumCols)

DrawMap (map, NumRows, NumCols)

% MAIN SCREEN
Font.Draw ("B", 40, maxy - 30, font2, 12)
Font.Draw ("R", 65, maxy - 30, font2, 52)
Font.Draw ("E", 90, maxy - 30, font2, 47)
Font.Draw ("A", 115, maxy - 30, font2, 42)
Font.Draw ("K", 140, maxy - 30, font2, 14)
Font.Draw ("O", 165, maxy - 30, font2, 35)
Font.Draw ("U", 190, maxy - 30, font2, 46)
Font.Draw ("T", 215, maxy - 30, font2, 80)

Font.Draw ("LEVEL:", 420, maxy - 25, font1, white)
Font.Draw ("LIVES:", 620, maxy - 25, font1, white)

% LEVEL 1 ---------------------------------------------------------------------
setscreen ("nocursor")

% PADDLE COORDINATES
Paddlex1 := 370
Paddley1 := 10
Paddlex2 := 430
Paddley2 := 20

% BALL COORDINATES
Ballx := 400
Bally := 26

% X AND Y COORDINATES
x := 87
y := maxy - 100

% LEVEL AND LIVES SETTING
level := 1
lives := 3

direction := 0

% SET LEVELS
if level = 1 then
Font.Draw ("1", 540, maxy - 25, font1, 12)
elsif level = 2 then
Font.Draw ("2", 540, maxy - 25, font1, 52)
elsif level = 3 then
Font.Draw ("1", 540, maxy - 25, font1, 47)
elsif level = 4 then
Font.Draw ("1", 540, maxy - 25, font1, 42)
elsif level = 5 then
Font.Draw ("1", 540, maxy - 25, font1, 14)
elsif level = 6 then
Font.Draw ("1", 540, maxy - 25, font1, 35)
elsif level = 7 then
Font.Draw ("1", 540, maxy - 25, font1, 46)
elsif level = 8 then
Font.Draw ("1", 540, maxy - 25, font1, 80)
end if

% LIVES SETTING
if lives = 3 then
Font.Draw ("3", 730, maxy - 25, font1, 12)
elsif lives = 2 then
Font.Draw ("2", 730, maxy - 25, font1, 12)
elsif lives = 1 then
Font.Draw ("1", 730, maxy - 25, font1, 12)
end if

% BOXES
for row : 1 .. 13
drawfillbox (x, y, x + 40, y + 15, 12)
x := x + 45
for col : 1 .. 14
drawfillbox (x, y, x + 40, y + 15, 12)
end for
y := y - 20
end for

% DRAW PADDLE AND BALL
drawfillbox (Paddlex1, Paddley1, Paddlex2, Paddley2, PaddleColour)

drawfilloval (Ballx, Bally, BallRad, BallRad, BallColour)

loop
View.Update
% GET MOUSE SIGNAL
mousewhere (mx, my, button)

% ERASE THE PADDLE AND BALL
drawfillbox (Paddlex1, Paddley1, Paddlex2, Paddley2, black)

drawfilloval (Ballx, Bally, BallRad, BallRad, black)

Paddlex1 := mx - 30
Paddlex2 := mx + 30

if direction = 0 then
Ballx := mx
end if

% PADDLE BOUNDARIES
if Paddlex1 <= 80 then
Paddlex1 := 80
end if

if Paddlex2 <= 140 then
Paddlex2 := 140
end if

if Paddlex2 >= maxx - 80 then
Paddlex2 := maxx - 80
end if

if Paddlex1 >= maxx - 140 then
Paddlex1 := maxx - 140
end if

% BALL BOUNDARIES
if Ballx <= 110 and direction = 0 then
Ballx := 110
end if

if Ballx >= maxx - 110 and direction = 0 then
Ballx := maxx - 110
end if

% DIRECTION SETTINGS
if direction = 1 then
Ballx := Ballx + 5
Bally := Bally + 5
elsif direction = 2 then
Ballx := Ballx + 5
Bally := Bally - 5
elsif direction = 3 then
Ballx := Ballx - 5
Bally := Bally - 5
elsif direction = 4 then
Ballx := Ballx - 5
Bally := Bally + 5
end if

% BLUE BOUNDARY SETTINGS
if Ballx + BallRad >= maxx - 84 then
if direction = 1 then
direction := 4
elsif direction = 2 then
direction := 3
end if
elsif Ballx - BallRad <= 83 then
if direction = 4 then
direction := 1
elsif direction = 3 then
direction := 2
end if
elsif Bally + BallRad >= maxy - 83 then
if direction = 1 then
direction := 2
elsif direction = 4 then
direction := 3
end if
end if

% BEGINNING SETTINGS
if button = down and Ballx = mx then
direction := 1
end if

if whatdotcolour (Ballx, Bally) = 102 then
if direction = 2 and Bally <= 20 then
direction := 1
elsif direction = 3 and Bally <= 20 then
direction := 4
end if
end if

% RE-DRAW THE PADDLE AND BALL
drawfillbox (Paddlex1, Paddley1, Paddlex2, Paddley2, PaddleColour)

drawfilloval (Ballx, Bally, BallRad, BallRad, BallColour)

% TIME DELAY
delay (20)
end loop

Author:  Velocity [ Thu Jan 12, 2012 7:38 pm ]
Post subject:  RE:Help with Breakout Game

i made breakout for my grade 11 final aswell, but i programmed my game vs a.i what are you looking for in general, the code itself or a synopsis of how to write the code?

Author:  ncmitchell [ Thu Jan 12, 2012 8:10 pm ]
Post subject:  RE:Help with Breakout Game

Either or, the code would probably be easier so that I have a better idea of what I should do, but if you have any help to give that'd be great


: