简体   繁体   中英

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?

我建议更改方法,而不是为每个瓦片分配一个Terran类型,而要使用代表地形类型的集合并在这些集合之间移动这些类型。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM