user5352515
user5352515

Reputation: 33

How can I complete this task more easily? [Java]

This is for a game I'm making. When the hero walks on the tile that makes up Row 1, Tile 1 of the Earth Mountain, it changes all the adjacent tiles into a different type of terrain.

pos is the player's position.

Level.set is needed to change the tiles.

Gamescene.update is needed to display the tiles.

Dungeon.observe is needed to stop the change.

enter is when the player enters the tile to change the tile appearance.

leave is for when the player leaves the tile, and changes the tile appearance back.

All the real work happens in the code below.

Here's what I've got:

public static void enter( int pos ) {
    switch(Dungeon.level.map[pos]){
        case Terrain.MT_EARTH_R1T1:
            Level.set(pos, Terrain.MT_EARTH_SHADOW_R1T1);
            Level.set(pos+1, Terrain.MT_EARTH_SHADOW_R1T2);
            Level.set(pos+2, Terrain.MT_EARTH_SHADOW_R1T3);
            Level.set(pos+3, Terrain.MT_EARTH_SHADOW_R1T4);
            Level.set(pos+4, Terrain.MT_EARTH_SHADOW_R1T5);
            Level.set(pos+49, Terrain.MT_EARTH_SHADOW_R2T1);
            Level.set(pos+50, Terrain.MT_EARTH_SHADOW_R2T2);
            Level.set(pos+51, Terrain.MT_EARTH_SHADOW_R2T3);
            Level.set(pos+52, Terrain.MT_EARTH_SHADOW_R2T4);
            Level.set(pos+53, Terrain.MT_EARTH_SHADOW_R2T5);
            Level.set(pos+54, Terrain.MT_EARTH_SHADOW_R2T6);
            Level.set(pos+55, Terrain.MT_EARTH_SHADOW_R2T7);
            Level.set(pos+99, Terrain.MT_EARTH_SHADOW_R3T1);
            Level.set(pos+100, Terrain.MT_EARTH_SHADOW_R3T2);
            Level.set(pos+101, Terrain.MT_EARTH_SHADOW_R3T3);
            Level.set(pos+102, Terrain.MT_EARTH_SHADOW_R3T4);
            Level.set(pos+103, Terrain.MT_EARTH_SHADOW_R3T5);
            Level.set(pos+104, Terrain.MT_EARTH_SHADOW_R3T6);
            Level.set(pos+105, Terrain.MT_EARTH_SHADOW_R3T7);
            Level.set(pos+148, Terrain.MT_EARTH_SHADOW_R4T1);
            Level.set(pos+149, Terrain.MT_EARTH_SHADOW_R4T2);
            Level.set(pos+150, Terrain.MT_EARTH_SHADOW_R4T3);
            Level.set(pos+151, Terrain.MT_EARTH_SHADOW_R4T4);
            Level.set(pos+152, Terrain.MT_EARTH_SHADOW_R4T5);
            Level.set(pos+153, Terrain.MT_EARTH_SHADOW_R4T6);
            Level.set(pos+154, Terrain.MT_EARTH_SHADOW_R4T7);
            Level.set(pos+155, Terrain.MT_EARTH_SHADOW_R4T8);
            Level.set(pos+156, Terrain.MT_EARTH_SHADOW_R4T9);
            GameScene.updateMap( pos );
            GameScene.updateMap( pos+1 );
            GameScene.updateMap( pos+2 );
            GameScene.updateMap( pos+3 );
            GameScene.updateMap( pos+4 );
            GameScene.updateMap( pos+49 );
            GameScene.updateMap( pos+50 );
            GameScene.updateMap( pos+51 );
            GameScene.updateMap( pos+52 );
            GameScene.updateMap( pos+53 );
            GameScene.updateMap( pos+54 );
            GameScene.updateMap( pos+55 );
            GameScene.updateMap( pos+99 );
            GameScene.updateMap( pos+100 );
            GameScene.updateMap( pos+101 );
            GameScene.updateMap( pos+102 );
            GameScene.updateMap( pos+103 );
            GameScene.updateMap( pos+104 );
            GameScene.updateMap( pos+105 );
            GameScene.updateMap( pos+149 );
            GameScene.updateMap( pos+150 );
            GameScene.updateMap( pos+151 );
            GameScene.updateMap( pos+152 );
            GameScene.updateMap( pos+153 );
            GameScene.updateMap( pos+154 );
            GameScene.updateMap( pos+155 );
            Dungeon.observe();
            break;

}

public static void leave( int pos ) {
    switch(Dungeon.level.map[pos]) {
        case Terrain.MT_EARTH_SHADOW_R1T1:
            Level.set(pos, Terrain.MT_EARTH_R1T1);
            Level.set(pos+1, Terrain.MT_EARTH_R1T2);
            Level.set(pos+2, Terrain.MT_EARTH_R1T3);
            Level.set(pos+3, Terrain.MT_EARTH_R1T4);
            Level.set(pos+4, Terrain.MT_EARTH_R1T5);
            Level.set(pos+49, Terrain.MT_EARTH_R2T1);
            Level.set(pos+50, Terrain.MT_EARTH_R2T2);
            Level.set(pos+51, Terrain.MT_EARTH_R2T3);
            Level.set(pos+52, Terrain.MT_EARTH_R2T4);
            Level.set(pos+53, Terrain.MT_EARTH_R2T5);
            Level.set(pos+54, Terrain.MT_EARTH_R2T6);
            Level.set(pos+55, Terrain.MT_EARTH_R2T7);
            Level.set(pos+99, Terrain.MT_EARTH_R3T1);
            Level.set(pos+100, Terrain.MT_EARTH_R3T2);
            Level.set(pos+101, Terrain.MT_EARTH_R3T3);
            Level.set(pos+102, Terrain.MT_EARTH_R3T4);
            Level.set(pos+103, Terrain.MT_EARTH_R3T5);
            Level.set(pos+104, Terrain.MT_EARTH_R3T6);
            Level.set(pos+105, Terrain.MT_EARTH_R3T7);
            Level.set(pos+148, Terrain.MT_EARTH_R4T1);
            Level.set(pos+149, Terrain.MT_EARTH_R4T2);
            Level.set(pos+150, Terrain.MT_EARTH_R4T3);
            Level.set(pos+151, Terrain.MT_EARTH_R4T4);
            Level.set(pos+152, Terrain.MT_EARTH_R4T5);
            Level.set(pos+153, Terrain.MT_EARTH_R4T6);
            Level.set(pos+154, Terrain.MT_EARTH_R4T7);
            Level.set(pos+155, Terrain.MT_EARTH_R4T8);
            Level.set(pos+156, Terrain.MT_EARTH_R4T9);
            GameScene.updateMap( pos);
            GameScene.updateMap( pos+1 );
            GameScene.updateMap( pos+2 );
            GameScene.updateMap( pos+3 );
            GameScene.updateMap( pos+4 );
            GameScene.updateMap( pos+49 );
            GameScene.updateMap( pos+50 );
            GameScene.updateMap( pos+51 );
            GameScene.updateMap( pos+52 );
            GameScene.updateMap( pos+53 );
            GameScene.updateMap( pos+54 );
            GameScene.updateMap( pos+55 );
            GameScene.updateMap( pos+99 );
            GameScene.updateMap( pos+100 );
            GameScene.updateMap( pos+101 );
            GameScene.updateMap( pos+102 );
            GameScene.updateMap( pos+103 );
            GameScene.updateMap( pos+104 );
            GameScene.updateMap( pos+105 );
            GameScene.updateMap( pos+149 );
            GameScene.updateMap( pos+150 );
            GameScene.updateMap( pos+151 );
            GameScene.updateMap( pos+152 );
            GameScene.updateMap( pos+153 );
            GameScene.updateMap( pos+154 );
            GameScene.updateMap( pos+155 );
            Dungeon.observe();
            break;

} }

I want to make this work in such a way that when the player moves, all the positions that are occupied by MT_EARTH terrain are turned into MT_EARTH_SHADOW terrain.

I could just copy and paste all these lines and change the position modifiers for each position (for each tile of all four rows), but that seems tedious and unnecessary.

How can I shorten this up and make it work for all the required tiles?

Upvotes: 0

Views: 56

Answers (1)

Yuriy Privezentsev
Yuriy Privezentsev

Reputation: 66

I would suggest changing the approach and instead of assigning each tile a terran type have the collections representing terrain types and move these types between these collections.

Upvotes: 1

Related Questions