Computer Science Canada

Shooter Help

Author:  Anonymous [ Mon Jun 05, 2006 5:36 pm ]
Post subject:  Shooter Help

I need help with my shooting game. I wish to add several bouncy ball dudes and automatically generate them on the screen without slowing down my program. I was thinking it had something to do with adding parimeters onto my Ball procedure. My teacher suggested store data for each ball I create in a file. I just want the simplest, most efficiant way of doing this.

code:

% Shooter by Drew Martell

View.Set ("graphics,offscreenonly")
Mouse.ButtonChoose ("multibutton")
var xAxis, yAxis, bulletX, bulletY, button, sx, sy := 1 %starting variables
var ballx, bally := Rand.Int (100, 300) %starting location
var bullets, ammo := 2000 %sets amunition and max ammo
var rad := 10 %radius of ball
var score := 0 %how many times you hit the ball
var last : boolean %checks if right click is held
var scope := blue %colour of the scope
var line := black %lines of scope
var ballc := 47 %ball starting colour

process Sound %sound of walls
    Music.Sound (100, 70)
    Music.SoundOff
end Sound

procedure Background %refreshes background
    drawfillbox (0, 0, maxx, maxy, 11)
    drawbox (0, 0, maxx, maxy, black)
    drawfillbox (0, 50, maxx, 0, 49)
    drawbox (0, 50, maxx, 0, black)
    drawdot (bulletX, bulletY, black)
end Background

procedure Ball %ball to shoot
    drawfilloval (round (ballx), round (bally), rad, rad, ballc)     %ball body
    drawoval (round (ballx), round (bally), rad, rad, black)         %ball outline
    drawfilloval (round (ballx) - 3, round (bally) + 2, 1, 1, black)     %left eye
    drawfilloval (round (ballx) + 3, round (bally) + 2, 1, 1, black)     %right eye
    drawfillarc (round (ballx), round (bally) - 2, 2, 4, 180, 360, black)     %smile
    drawfilloval (round (ballx), round (bally), rad, rad, ballc)         %ball body
    drawoval (round (ballx), round (bally), rad, rad, black)         %ball outline
    drawfilloval (round (ballx) - 3, round (bally) + 2, 1, 1, black)     %left eye
    drawfilloval (round (ballx) + 3, round (bally) + 2, 1, 1, black)     %right eye
    drawfillarc (round (ballx), round (bally) - 2, 2, 4, 180, 360, black)     %smile
end Ball

loop %main program loop
    Mouse.Where (xAxis, yAxis, button) %detects mouse location
    Background %refreshes background
    Ball %draws ball

    %increases bouncy ball
    ballx += sx
    bally += sy

    %detemines boundaries and reflects
    if (bally = rad) or (bally = maxy - rad) then
        sy := -sy
        fork Sound
    elsif (ballx = rad) or (ballx = maxx - rad) then
        sx := -sx
        fork Sound
    end if

    if (button = 0) then   %checks for mouse status
        last := false
    end if

    if (button = 1) and (last = true) then   %checks for right click then left click
        Music.Sound (75, 25)
        delay (20)
        Music.Sound (35, 25)
        delay (20)
        Music.SoundOff
       
        bullets -= 7 %depletes your ammo
        bulletX := xAxis
        bulletY := yAxis
       
        %shakes new scope
        var shock := Rand.Int (-5, 5)
        var shock2 := Rand.Int (-3, 3)

        %draws new scope when shooting
        drawoval (xAxis + shock, yAxis + shock, 50, 50, brightred)
        drawoval (xAxis + shock, yAxis + shock, 40, 40, brightred)
        drawline (xAxis + 5 + shock2, yAxis + shock2, xAxis + 35 + shock2, yAxis + shock2, line)
        drawline (xAxis - 5 + shock2, yAxis + shock2, xAxis - 35 + shock2, yAxis + shock2, line)
        drawline (xAxis + shock2, yAxis + 5 + shock2, xAxis + shock2, yAxis + 35 + shock2, line)
        drawline (xAxis + shock2, yAxis - 5 + shock2, xAxis + shock2, yAxis - 35 + shock2, line)

        if whatdotcolour (xAxis, yAxis) = ballc and button = 1 then %determines if ball was hit
            score += 1
        end if
    end if

    if (button = 10) then %reloads ammo
        bullets += 100
        if (bullets >= ammo) then
            bullets := ammo
        end if
    end if

    if (bullets <= 0) then %out of ammo
        bullets := 0
        last := false
    end if

    if (button = 100) then %determines if right click is pressed
        last := true
        drawoval (xAxis, yAxis, 50, 50, scope)
        drawline (xAxis + 15, yAxis, xAxis + 45, yAxis, line)
        drawline (xAxis - 15, yAxis, xAxis - 45, yAxis, line)
        drawline (xAxis, yAxis + 15, xAxis, yAxis + 45, line)
        drawline (xAxis, yAxis - 15, xAxis, yAxis - 45, line)
    end if

    for i : 20 .. 120 by 20 %changes balls colour based on score
        if score = i then
            ballc -= 1
            if ballc <= 40 then
                ballc := 40
            end if
            if ballc >= 47 then
                ballc := 47
            end if
        end if
    end for

    locate (1, 1)
    put "X:", xAxis, "  Y:", yAxis, "  COLOUR:", whatdotcolour (xAxis, yAxis), "  LAST:", last, "  BULLETS:", bullets, "/", ammo, "  SCORE:", score %debug
    View.Update
end loop


: