All pastes #38548 Raw Edit

Defneder Turing

public text v1 · immutable
#38548 ·published 2006-01-25 17:43 UTC
rendered paste body
View.Set ("graphics:max,max, offscreenonly,nobuttonbar")

var x, y, dir, accel, lastdir, stimer, shotcount, eshotcount, tempDec, overheat, maxHeatLimit, starlimit : int
var moveFlag, shootFlag, c1, c2, c3, c4, leftOrRight : boolean := false
var chars : array char of boolean
var shotx, shoty : flexible array 0 .. 0 of int
var shotdir : flexible array 0 .. 0 of boolean
var starx, stary : flexible array 0 .. 0 of int
x := maxx div 2
y := maxy div 2
accel := 0
shotx (0) := -100
shoty (0) := -100
stimer := 0
shotcount := 0
eshotcount := 0
overheat := 0
maxHeatLimit := 100
tempDec := 0
randint (starlimit, 20, 100)
new starx, starlimit
new stary, starlimit
for i : 1 .. starlimit
    randint (starx (i), 0, maxx)
    randint (stary (i), 0, maxx)
end for

proc starBackground
    for i : 1 .. starlimit
        drawfilloval (starx (i), stary (i), 3, 3, white)
    end for
end starBackground

proc move
    % Handles Keyboard Input - handles 8 directional movement/drifting.
    Input.KeyDown (chars)
    if chars (KEY_UP_ARROW) then
        c1 := true
        lastdir := 1
    else
        c1 := false
    end if
    if chars (KEY_RIGHT_ARROW) then
        c2 := true
        lastdir := 2
        leftOrRight := false
    else
        c2 := false
    end if
    if chars (KEY_LEFT_ARROW) then
        c3 := true
        lastdir := 3
        leftOrRight := true
    else
        c3 := false
    end if
    if chars (KEY_DOWN_ARROW) then
        c4 := true
        lastdir := 4
    else
        c4 := false
    end if
    if chars (KEY_UP_ARROW) and chars (KEY_RIGHT_ARROW) then
        lastdir := 5
    end if
    if chars (KEY_UP_ARROW) and chars (KEY_LEFT_ARROW) then
        lastdir := 6
    end if
    if chars (KEY_DOWN_ARROW) and chars (KEY_RIGHT_ARROW) then
        lastdir := 7
    end if
    if chars (KEY_DOWN_ARROW) and chars (KEY_LEFT_ARROW) then
        lastdir := 8
    end if

    % Check to see if any button is being pressed
    if c1 = true or c2 = true or c3 = true or c4 = true then
        moveFlag := true
    else
        moveFlag := false
    end if
    % If buttons are held then the spaceship will speed up, or else will slow down.
    %*Handles speed restricitons change the number to limit the speed.
    if moveFlag = true then
        if accel < 50 then %*
            accel += 2
        end if
    elsif moveFlag = false and accel > 0 then
        accel -= 1
    end if
    % Moves according to the acceleration If A button is being pressed
    % *Moves according to the acceleration - handles 8 directional drifting
    if accel > 0 and moveFlag = true then
        if c1 = true then
            y += accel
        end if
        if c2 = true then
            x += accel
        end if
        if c3 = true then
            x -= accel
        end if
        if c4 = true then
            y -= accel
        end if
    elsif accel > 0 and moveFlag = false then %*
        if lastdir = 1 then
            y += accel
        elsif lastdir = 2 then
            x += accel
        elsif lastdir = 3 then
            x -= accel
        elsif lastdir = 4 then
            y -= accel
        elsif lastdir = 5 then
            x += accel
            y += accel
        elsif lastdir = 6 then
            x -= accel
            y += accel
        elsif lastdir = 7 then
            x += accel
            y -= accel
        elsif lastdir = 8 then
            y -= accel
            x -= accel
        end if
    end if
end move

proc shoot
    % Test enforced acceleration (eg. for boosts, extreme speed.)
    if chars (KEY_CTRL) then
        accel := 50
    end if
    % Space Key to shoot
    %* Uncomment if automatic fire is desired.
    if chars (' ') then
        if stimer = 0 then % and overheat < maxHeatLimit then
            shotcount += 1
            eshotcount += 1
            shootFlag := true

            new shotx, shotcount
            new shoty, shotcount
            new shotdir, shotcount
            shotdir (shotcount) := leftOrRight
            shotx (shotcount) := x
            shoty (shotcount) := y
            overheat += 5
            tempDec := 0
        end if
        stimer += 1
        %*
        if stimer >= 1 then
            stimer := 0
        end if
    else
        stimer := 0
    end if
    % CoolDown of Gun
    if overheat > 0 then
        overheat -= 1
    end if

    % Moves all the shots going on at the time.
    for i : 1 .. shotcount
        if shootFlag = true then
            if shotdir (i) = true then
                shotx (i) -= 20
            elsif shotdir (i) = false then
                shotx (i) += 20
            end if
        end if
        drawfilloval (shotx (i), shoty (i), 2, 2, green)
    end for
    % Handles if the shot has gone off the screen, if it has then the data is deleted.
    for i : 1 .. shotcount - 1
        if shotx (i) < 0 or shotx (i) > maxx then
            for k : i .. shotcount - 1
                shotx (k) := shotx (k + 1)
                shoty (k) := shoty (k + 1)
                shotdir (k) := shotdir (k + 1)
            end for
            shotcount -= 1
        end if
    end for
end shoot



loop
    move
    shoot
    drawfilloval (x, y, 5, 5, red)
    locate (1, 1)
    put accel, " ", moveFlag, " ", shootFlag, " ", shotcount, " ", overheat, " " ..
    View.Update
    cls
    delay (75)
    drawfillbox (0, 0, maxx, maxy, black)
    starBackground
end loop