All pastes #28326 Raw Edit

Stuff

public text v1 · immutable
#28326 ·published 2005-11-11 02:14 UTC
rendered paste body
View.Set ("graphics:max,max")

include "classes.t"

% Declare the terrain constants
const NORMAL := 1
const GRASS := 2
const FOREST := 3
const MOUNTAIN := 4
const ROAD := 5
const SHALLOW := 6
const WATER := 7
const SHORE := 8

var terrainTypes : array 1 .. 8 of int := init (49, 48, 2, 66, 15, 53, 55, 91)
var infantry : array 1 .. 100 of pointer to Infantry
var tank : array 1 .. 100 of pointer to Tank
var artillery : array 1 .. 100 of pointer to Artillery
var unitToAdd, infCount, tankCount, artyCount : int := 1
var map : array 1 .. 100, 1 .. 100 of int
var mx, my, mb, terrType : int := 1
var teamOn : boolean := false

% ********************* COMMON PROCEDURES AND FUNCTIONS *************************
var addTerr : boolean := false

function pixToGridX (mx : int) : int
    result (mx - 100) div 16
end pixToGridX

function pixToGridY (my : int) : int
    result (my - 100) div 16
end pixToGridY

function gridToPixX (gridX : int) : int
    result 100 + gridX * 16
end gridToPixX

function gridToPixY (gridY : int) : int
    result 100 + gridY * 16
end gridToPixY

proc updateTile (tileX, tileY, terrType : int)
    drawfillbox (100 + tileX * 16, 100 + tileY * 16, 116 + tileX * 16, 116 + tileY * 16, terrainTypes (map (tileX, tileY)))
end updateTile

proc initializeMap
    for i : 1 .. 100
        for j : 1 .. 100
            map (i, j) := 2
        end for
    end for
end initializeMap

proc drawMap
    for i : 1 .. 40
        for j : 1 .. 40
            drawfillbox (100 + i * 16, 100 + j * 16, 100 + i * 16 + 16, 100 + j * 16 + 16, terrainTypes (map (i, j)))
        end for
    end for
end drawMap

% ********************* MAP EDITOR PROCEDURES AND FUNCTIONS *************************

proc initializeEditor
    % The Save Button
    drawbox (50, 250, 100, 275, black)
    drawfill (51, 251, red, black)
    Font.Draw ("SAVE", 58, 258, verdana, white)

    % The Load Button
    drawbox (50, 280, 100, 305, black)
    drawfill (51, 281, red, black)
    Font.Draw ("LOAD", 58, 288, verdana, white)

    var unitnames : array 1 .. 3 of string := init ("Inf.", "Tank", "Art.")
    Draw.Text ("Units", 125, 90, verdana, black)
    drawbox (65, 75, 95, 100, black)
    drawfill (66, 76, red, black)
    drawbox (65, 30, 95, 55, black)
    drawfill (66, 31, blue, black)
    if teamOn = false then
        drawbox (64, 29, 96, 56, white)
        drawbox (64, 74, 96, 101, green)
    else
        drawbox (64, 73, 96, 101, white)
        drawbox (64, 29, 96, 56, green)
    end if
    for u : 1 .. 3
        drawbox (130 + (u * 35), 55, 155 + (u * 35), 80, black)
        Draw.Text (unitnames (u), 130 + (u * 35), 40, verdana, black)
    end for

    for i : 1 .. 2
        for j : 1 .. 4
            if i = 1 then
                drawfillbox (25 + (i * 25), 100 + (j * 25), 50 + (i * 25), 125 + (j * 25), terrainTypes (j))
            else
                drawfillbox (25 + (i * 25), 100 + (j * 25), 50 + (i * 25), 125 + (j * 25), terrainTypes (4 + j))
            end if
        end for
    end for
end initializeEditor

proc changeTerrType (mx, my, terrType : int)
    map (pixToGridX (mx), pixToGridY (my)) := terrType
end changeTerrType

proc saveMap
    var filename : string := ""
    var output : int
    locate (1, 1)
    put "Enter a name: " ..
    get filename
    open : output, "maps\\" + filename + ".map", put
    for i : 1 .. 40
        for j : 1 .. 40
            put : output, map (i, j), " " ..
        end for
    end for

    for i : 1 .. 100
        if infantry (i) -> x > 0 then
            put : output, infantry (i) -> x, infantry (i) -> y ..
        end if
    end for
    close : output
end saveMap

proc loadMap
    var filename : string := ""
    var input : int
    var character : string (1)
    locate (1, 1)
    put "Enter a name: " ..
    get filename
    open : input, "maps\\" + filename + ".map", get

    if Error.Last = eNoError then
        for i : 1 .. 40
            for j : 1 .. 40
                get : input, character
                if strintok (character) = false and character not= " " then
                    put "Data file corrupted! Tile (", i, ",", j, ") defaulted to Default Type"
                elsif strintok (character) then
                    map (i, j) := strint (character)
                end if
            end for
        end for
        close : input
        drawMap
    else
        locate (1, 1)
        put "File not Found."
    end if
end loadMap

proc mapEditor
    initializeMap
    initializeEditor
    drawMap

    loop
        mousewhere (mx, my, mb)
        locate (1, 1)
        put mx, " ", my ..
        locate (2, 1)
        if teamOn = false then
            put "RED TEAM (Human)" ..
        else
            put "BLUE TEAM (Computer)" ..
        end if

        if mx >= 65 and mx <= 95 then
            if my >= 75 and my <= 100 and mb = 1 then
                teamOn := false
            elsif my >= 30 and my <= 55 and mb = 1 then
                teamOn := true
            end if
        end if

        % Choose units to add
        if my > 54 and my < 80 and mb = 1 then
            if mx > 165 and mx < 190 then
                unitToAdd := 1
                addTerr := false
            elsif mx > 200 and mx < 225 then
                unitToAdd := 2
                addTerr := false
            elsif mx > 235 and mx < 260 then
                unitToAdd := 3
                addTerr := false
            end if
        end if

        % Add New Units to the Map
        if mx > 116 and my > 115 and mx < 758 and my < 756 and mb = 1 and unitToAdd = 1 and addTerr = false then
            new Infantry, infantry (infCount)
            infantry (infCount) -> initialize (pixToGridX (mx), pixToGridY (my), teamOn)
            infCount += 1
            delay (50)
        elsif mx > 116 and my > 115 and mx < 758 and my < 756 and mb = 1 and unitToAdd = 2 and addTerr = false then
            new Tank, tank (tankCount)
            tank (tankCount) -> initialize (pixToGridX (mx), pixToGridY (my), teamOn)
            tankCount += 1
            delay (50)
        elsif mx > 116 and my > 115 and mx < 758 and my < 756 and mb = 1 and unitToAdd = 3 and addTerr = false then
            new Artillery, artillery (artyCount)
            artillery (artyCount) -> initialize (pixToGridX (mx), pixToGridY (my), teamOn)
            artyCount += 1
            delay (50)
        end if

        % Choose the terrain type to add
        if mx > 50 and my > 125 and mx < 100 and my < 225 and mb = 1 then
            if mx < 75 then
                terrType := 1 + (my - 125) div 25
                addTerr := true
            else
                terrType := 5 + ((my - 125) div 25)
                addTerr := true
            end if
        end if
        if mx > 116 and my > 115 and mx < 758 and my < 756 and mb = 1 and addTerr = true then
            changeTerrType (mx, my, terrType)
            updateTile (pixToGridX (mx), pixToGridY (my), map (pixToGridX (mx), pixToGridY (my)))
        end if
        if mx > 50 and my > 250 and mx < 100 and my < 275 and mb = 1 then
            saveMap
        elsif mx > 50 and my > 280 and mx < 100 and my < 305 and mb = 1 then
            loadMap
        end if
    end loop

end mapEditor

mapEditor


% NEW FILE, CALL IT CLASSES.T
class Infantry
    import verdana
    export x,y,initialize
    var x, y, col : int

    proc initialize (gridX, gridY : int, teamOn : boolean)
        if teamOn = false then
            col := red
        else
            col := blue
        end if
        drawfillbox (100 + (gridX * 16), 100 + (gridY * 16), 116 + (gridX * 16), 116 + (gridY * 16), col)
        Font.Draw ("I", 105 + (gridX * 16), 105 + (gridY * 16), verdana, white)
        x := gridX
        y := gridY
    end initialize
end Infantry

class Tank
    import verdana
    export x,y,initialize
    var x, y, col : int

    proc initialize (gridX, gridY : int, teamOn : boolean)
        if teamOn = false then
            col := red
        else
            col := blue
        end if
        drawfillbox (100 + (gridX * 16), 100 + (gridY * 16), 116 + (gridX * 16), 116 + (gridY * 16), col)
        Font.Draw ("T", 105 + (gridX * 16), 105 + (gridY * 16), verdana, white)
        x := gridX
        y := gridY
    end initialize
end Tank

class Artillery
    import verdana
    export x,y,initialize
    var x, y, col : int

    proc initialize (gridX, gridY : int, teamOn : boolean)
        if teamOn = false then
            col := red
        else
            col := blue
        end if
        drawfillbox (100 + (gridX * 16), 100 + (gridY * 16), 116 + (gridX * 16), 116 + (gridY * 16), col)
        Font.Draw ("A", 105 + (gridX * 16), 105 + (gridY * 16), verdana, white)
        x := gridX
        y := gridY
    end initialize
end Artillery