HiveBrain v1.2.0
Get Started
← Back to all entries
patternjavaMinor

Update on tileMap Class

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
tilemapclassupdate

Problem

This is an update from An Update on my TileMap Class. It's a tileMap class for a top-down old-school final fantasy game. User @Tim gave me suggestions and I updated some of the code accordingly.

Tile.java

import com.stardust.rpgtest2.gfx.Assets;
import java.awt.image.BufferedImage;

public enum Tile
{
    Grass(1, Assets.grass, false),
    Dirt(2, Assets.dirt, false),
    Tree(3, Assets.tree, true),
    Blank(36, Assets.blankTile, false);

    public int texKey;
    public BufferedImage texture;
    public boolean collidable;
    Tile(int texKey, BufferedImage texture, boolean collidable)
    {
       this.texKey = texKey;
       this.texture = texture;
       this.collidable = collidable;
    }
    public static BufferedImage getTileImage(int texKey1)
    {
        BufferedImage image;
        switch(texKey1)
        {
            case 1:
            {
                image = Grass.texture;
                break;
            }
            case 2:
            {
                image = Dirt.texture;
                break;
            }
            case 3:
            {
                image = Tree.texture;
                break;
            }

            case 36:
            {
                image = Blank.texture;
                break;
            }
            default:
            {
                image = Blank.texture;
                break;
            }
        }
        return image;
    }
}


TileMap.java render() method

public void render(Graphics g)
    {

        for(int y = 0; y < tilemap.length; y++)
        {       
            for(int x = 0; x < tilemap.length; x++)
            {
                int textureType = tilemap[x][y];

                BufferedImage texture =  Tile.getTileImage(textureType);
                g.drawImage(texture, posX, posY, null);
                posY += 32;
            }
            posX += 32;
            posY = Game.mapY;
        }
        posX = Game.mapX;
        posY = Game.mapY;
    }

Solution

posY += 32;
        }
        posX += 32;


You have your tile sizes hardcoded in the TileMap ... in an obscure place (render code).

Consider placing them as constants in Tile or TileMap. That way, upscaling to 64x64 tiles is a lot easier.

public static BufferedImage getTileImage(int texKey1)
{
    BufferedImage image;
    switch(texKey1)
    {
        case 1:
        {
            image = Grass.texture;
            break;
        }
        case 2:
        {
            image = Dirt.texture;
            break;
        }
        case 3:
        {
            image = Tree.texture;
            break;
        }

        case 36:
        {
            image = Blank.texture;
            break;
        }
        default:
        {
            image = Blank.texture;
            break;
        }
    }
    return image;
}


You could use a Map here. Map, or better, Map. Then you just have to get the Tile from the map, and ask that for the image. And if it's null you can return a blank.

Code Snippets

posY += 32;
        }
        posX += 32;
public static BufferedImage getTileImage(int texKey1)
{
    BufferedImage image;
    switch(texKey1)
    {
        case 1:
        {
            image = Grass.texture;
            break;
        }
        case 2:
        {
            image = Dirt.texture;
            break;
        }
        case 3:
        {
            image = Tree.texture;
            break;
        }

        case 36:
        {
            image = Blank.texture;
            break;
        }
        default:
        {
            image = Blank.texture;
            break;
        }
    }
    return image;
}

Context

StackExchange Code Review Q#84868, answer score: 2

Revisions (0)

No revisions yet.