How to attach turrets to tiles in a tile based game

Posted by Joseph St. Pierre on Game Development See other posts from Game Development or by Joseph St. Pierre
Published on 2011-11-25T13:24:14Z Indexed on 2011/11/25 18:05 UTC
Read the original article Hit count: 380

Filed under:

I am a flash developer, and I am building a Tower Defense game. The world is being built through tiles, and I have gotten that accomplished easily. I have also gotten level changes and enemy spawning down as well. However, I wish the player to be able to spawn turrets, and have those turrets be on specific tiles, based upon where the player placed it. Here is my code:

stop();

colOffset = 50;
rowOffset = 50;
guns = [];
placed = true;
dead = 0;
spawned = 0;
level = 1;
interval = 350 / level;
amount = level * 20;
counter = 0;
numCol = 14;
numRow = 10;
tiles = [];
k = 0;
create = false;
tileName = new Array("road","grass","end", "start");
board = new Array(
    new Array(1,1,1,1,3,1,1,1,1,1,2,1,1,1),
    new Array(1,1,1,0,0,1,1,1,1,1,0,1,1,1),
    new Array(1,1,1,0,1,1,1,1,1,1,0,0,1,1),
    new Array(1,1,1,0,0,0,1,1,1,1,1,0,1,1),
    new Array(1,1,1,0,1,0,0,0,1,1,1,0,0,1),
    new Array(1,1,1,0,1,1,1,0,0,1,1,1,0,1),
    new Array(1,1,0,0,1,1,1,1,0,1,1,0,0,1),
    new Array(1,1,0,1,1,1,1,1,0,1,0,0,1,1),
    new Array(1,1,0,0,0,0,0,0,0,1,0,1,1,1),
    new Array(1,1,1,1,1,1,1,1,0,0,0,1,1,1)

    );

buildBoard();
function buildBoard(){
        for ( col = 0; col < numCol; col++){
            for ( row = 0; row < numRow; row++){
                  _root.attachMovie("tile", "tile_" + col + "_" + row, _root.getNextHighestDepth());
                    theTile = eval("tile_" + col + "_" + row);
               theTile._x = (col * 50);
                 theTile._y = (row * 50);

                 theTile.row = row;
                 theTile.col = col;

                 tileType = board[row][col];

                theTile.gotoAndStop(tileName[tileType]);
                tiles.push(theTile);


                }



    }

}

init();

function init(){
    onEnterFrame = function(){
        counter += 1;
    if ( spawned < amount && counter > 50){
    min= _root.attachMovie("minion","minion",_root.getNextHighestDepth());
    min._x = tile_4_0._x + 25;
    min._y = tile_4_0._y + 25;
    min.health = 100;
    choose = Math.round(Math.random());
    if ( choose == 0 ){
    min.waypointX = [ tile_4_1._x +25, tile_3_1._x + 25, tile_3_2._x + 25, tile_3_6._x + 25, tile_2_6._x + 25, tile_2_8._x + 25, tile_8_8._x + 25, tile_8_9._x + 25, tile_10_9._x + 25, tile_10_7._x + 25, tile_11_7._x + 25, tile_11_6._x + 25, tile_12_6._x + 25, tile_12_4._x + 25, tile_11_4._x + 25, tile_11_2._x + 25, tile_10_2._x + 25, tile_10_0._x + 25];
    min.waypointY = [ tile_4_1._y +25, tile_3_1._y + 25, tile_3_2._y + 25, tile_3_6._y + 25, tile_2_6._y + 25, tile_2_8._y + 25, tile_8_8._y + 25, tile_8_9._y + 25, tile_10_9._y + 25, tile_10_7._y + 25, tile_11_7._y + 25, tile_11_6._y + 25, tile_12_6._y + 25, tile_12_4._y + 25, tile_11_4._y + 25, tile_11_2._y + 25, tile_10_2._y + 25, tile_10_0._y + 25];
    }
    else if ( choose == 1 ){
        min.waypointX = [ tile_4_1._x +25, tile_3_1._x + 25, tile_3_2._x + 25, tile_3_3._x + 25, tile_5_3._x + 25, tile_5_4._x + 25, tile_7_4._x + 25, tile_7_5._x + 25, tile_8_5._x + 25, tile_8_8._x + 25, tile_8_9._x + 25, tile_10_9._x + 25, tile_10_7._x + 25, tile_11_7._x + 25, tile_11_6._x + 25, tile_12_6._x + 25, tile_12_4._x + 25, tile_11_4._x + 25, tile_11_2._x + 25, tile_10_2._x + 25, tile_10_0._x + 25 ];
        min.waypointY = [ tile_4_1._y +25, tile_3_1._y + 25, tile_3_2._y + 25, tile_3_3._y + 25, tile_5_3._y + 25, tile_5_4._y + 25, tile_7_4._y + 25, tile_7_5._y + 25, tile_8_5._y + 25, tile_8_8._y + 25, tile_8_9._y + 25, tile_10_9._y + 25, tile_10_7._y + 25, tile_11_7._y + 25, tile_11_6._y + 25, tile_12_6._y + 25, tile_12_4._y + 25, tile_11_4._y + 25, tile_11_2._y + 25, tile_10_2._y + 25, tile_10_0._y + 25 ];


    }
    min.i = 0;

    counter = 0;
    spawned += 1;

    min.onEnterFrame = function(){
        dx = this.waypointX[this.i] - this._x;
        dy = this.waypointY[this.i] - this._y;
        radians = Math.atan2(dy,dx);
        degrees = radians * 180 / Math.PI;
        xspeed = Math.cos(radians);
        yspeed = Math.sin(radians);

        this._x += xspeed;
        this._y += yspeed;

        if( this._x == this.waypointX[this.i] && this._y == this.waypointY[this.i]){
            this.i++;
        }
        if ( this._x == tile_10_0._x + 25 && this._y == tile_10_0._y + 25){
            this.removeMovieClip();
            dead += 1;

        }

    }

    }
    if ( dead >= amount ){

        dead = 0;
        level += 1;
        amount = level * 20;
        spawned = 0;


    }
}
btnM.onRelease = function(){
    create = true;
}



}

game.onEnterFrame = function(){



}

It is possible for me however to complete this task, but only once. I am able to make the turret, drag it over to a tile, and have it attach itself to the tile. No problem. The issue is, I cannot do these multiple times. Please Help.

© Game Development or respective owner

Related posts about tower-defense