All pastes #24749 Raw Edit

Stuff

public text v1 · immutable
#24749 ·published 2005-10-06 18:31 UTC
rendered paste body
/* Pooyan Game...
 ---------------- POOYAN --------------------
 -   TODO:                                  -
 - * passes level one when x wolves killed  -
 - * fails level when x wolves reach bottom -
 - * add a splash screen, restart option    -
 - * add difficulty levels                  -
 - * make the wolves move up the screen and -
 -   attack you                             -
 - * add a second level, when wolves move ^ -
 - * clean up code!                         -
 */
View.Set ("graphics:225,262;offscreenonly;title:Pooyan;position:center,center;nocursor")

% Declares the pictures, fonts
var arrow : int := Pic.FileNew ("pic1.jpg")
var titleScreen : int := Pic.FileNew ("title.jpg")
var chars : array char of boolean
var tahomaLarge : int := Font.New ("tahoma:12:bold")
var serifLarge : int := Font.New ("serif:12:bold")
var serifMed : int := Font.New ("serif:10:bold")

% --------------------------- PROCEDURE DECLARATIONS ------------------------------

proc Intro
    Pic.Draw (titleScreen, 0, 0, picCopy)
    loop
        exit when hasch
        delay (20)
    end loop
end Intro

proc drawScreen
    drawfillbox (0, 0, maxx, maxy, blue)
    drawfillbox (0, 0, maxx, 30, 114)
    drawfillbox (0, 30, maxx, 35, green)
    drawline (200, 35, 200, 240, 114)
    drawline (180, 35, 180, 240, 114)
    for y : 50 .. 240 by 15
        drawline (180, y, 200, y, 114)
    end for
    drawline (165, 45, 165, 200, 114)
    drawfillbox (0, 220, maxx, maxy, black)
    Font.Draw ("Score: 0", 0, 230, tahomaLarge, white)
    View.Update
end drawScreen

proc difficulty (var diff : int)
    drawfillbox (0, 0, maxx, maxy, blue)
    Font.Draw ("Select Difficulty:", 65, 225, serifLarge, yellow)
    Font.Draw ("1. Child's Play", 65, 210, serifMed, yellow)
    Font.Draw ("2. Mediocre", 75, 195, serifMed, yellow)
    Font.Draw ("3. Madness", 77, 180, serifMed, yellow)
    Font.Draw ("4. Better off using your time for ", 30, 165, serifMed, yellow)
    Font.Draw ("   perpetual motion devices...", 40, 150, serifMed, yellow)
    View.Update
    loop
        Input.KeyDown (chars)
        if chars ('1') then
            diff := 1
        elsif chars ('2') then
            diff := 2
        elsif chars ('3') then
            diff := 3
        elsif chars ('4') then
            diff := 4
        end if
        if diff > 0 then
            drawScreen
            View.Update
            exit
        end if
    end loop
    drawScreen
end difficulty

proc endGame (var loseGame : boolean)
    loseGame := true
    cls
end endGame

proc refreshScreen (charY : int, wolfFallCount : int)
    drawline (200, 35, 200, 240, 114)
    drawline (180, 35, 180, 240, 114)
    drawfillbox (160, charY, 170, charY + 20, blue)
    for i : 1 .. wolfFallCount
        drawfilloval (190, 30 + (i * 20), 7, 7, green)
    end for
end refreshScreen

proc moveChar (var y : int)
    Input.KeyDown (chars)
    if chars (KEY_UP_ARROW) and y < 220 then
        y += 5
    elsif chars (KEY_DOWN_ARROW) and y > 57 then
        y -= 5
    end if
    delay (10)
    drawline (165, 45, 165, 200, 114)
    drawfillbox (160, y, 170, y + 20, red)
end moveChar

proc dropWolf (var wx, wy, tempX, moveStage, wolfFallCount : int, var wolfFallFlag, deadWolf, loseGame : boolean)
    if wolfFallFlag = false and moveStage = 1 then
        tempX := 0
        randint (wx, 0, 140)
        wolfFallFlag := true
        wy := 210
        moveStage := 2
    end if

    if wolfFallFlag = true and moveStage = 2 and tempX < wx - 4 then
        drawfilloval (tempX, 210, 7, 7, blue)
        delay (10)
        tempX += 4
        drawfilloval (tempX, 210, 7, 7, green)
    elsif wolfFallFlag = true and moveStage = 2 and tempX >= (wx - 4) then
        drawfilloval (tempX, 210, 7, 7, blue)
        moveStage := 3
    end if

    if wolfFallFlag = true and moveStage = 3 and wy > 45 then
        drawfilloval (wx, wy, 7, 7, blue)
        wy -= 5
        delay (20)
        drawfilloval (wx, wy, 7, 7, green)
    end if
    if wolfFallFlag = true and moveStage = 3 and wy < 50 then
        drawfillbox (0, 36, maxx - 50, 60, blue)
        wolfFallFlag := false
        tempX := 0
        moveStage := 1
        if deadWolf = false then
            wolfFallCount += 1
        end if
    end if

    if deadWolf = true and wolfFallFlag = true and wy > 45 then
        drawfilloval (wx, wy, 7, 7, blue)
        wy -= 2
        delay (20)
        drawfilloval (wx, wy, 7, 7, red)
    end if
    if deadWolf = true and wy < 50 then
        drawfilloval (wx, wy, 7, 7, blue)
        deadWolf := false
        wolfFallFlag := false
        tempX := 0
        moveStage := 1
    end if
    if wolfFallCount > 5 then
        endGame (loseGame)
    end if
end dropWolf

proc arrowShoot (var ax, ay : int, charY : int, var arrowShot : boolean)
    var y : int
    Input.KeyDown (chars)
    if chars (KEY_CTRL) and arrowShot = false then
        arrowShot := true
        ax := 140
        ay := charY
    end if
    if arrowShot = true and ax > 0 then
        drawfillbox (ax, ay, ax + 30, ay + 14, blue)
        ax -= 10
        Pic.Draw (arrow, ax, ay, picMerge)
    elsif arrowShot = true and ax < 5 then
        arrowShot := false
        drawfillbox (ax, ay, ax + 30, ay + 14, blue)
    end if
end arrowShoot

proc hudUpdate (var score : int)
    drawfillbox (0, 220, maxx, maxy, black)
    Font.Draw ("Score: " + intstr (score), 0, 230, tahomaLarge, white)
end hudUpdate

proc hitWolf (ax, ay, wx, wy : int, var score : int, var deadWolf, wolfFallFlag, arrowShot : boolean)
    if ax - 7 <= wx + 10 and ax - 7 >= wx - 10 and ay + 7 <= wy + 10 and ay + 7 >= wy - 10 and deadWolf = false then
        deadWolf := true
        arrowShot := false
        score += 1
        drawfillbox (ax, ay, ax + 30, ay + 14, blue)
        hudUpdate (score)
    end if
end hitWolf

% ---------------------------- BEGIN MAIN PROGRAM LOOP -------------------------------
var charY : int := 100
var mx, my, mb : int
var wx, wy, ax, ay : int := 1
var arrowShot, deadWolf, wolfFallFlag, loseGame : boolean := false
var score, wolfFallCount := 0
var tempX : int := 10
var moveStage : int := 1
var diff : int := 0

Intro
difficulty (diff)
drawScreen

loop
    mousewhere (mx, my, mb)
    refreshScreen (charY, wolfFallCount)
    moveChar (charY)
    dropWolf (wx, wy, tempX, moveStage, wolfFallCount, wolfFallFlag, deadWolf, loseGame)
    arrowShoot (ax, ay, charY, arrowShot)
    hitWolf (ax, ay, wx, wy, score, deadWolf, wolfFallFlag, arrowShot)
    exit when loseGame = true
    View.Update
end loop