如何更轻松地完成此任务? 【JAVA]

时间:2017-02-10 23:55:42

标签: java

这是我正在制作的游戏。当英雄走在组成地球山的第1行,第1层的地砖上时,它会将所有相邻的地砖变成不同类型的地形。

pos是玩家的位置。

需要Level.set来更改图块。

需要Gamescene.update来显示图块。

Dungeon.observe需要停止更改。

输入是指玩家进入图块以更改图块外观。

离开是指播放器离开磁贴时,并更改磁贴外观。

所有实际工作都在下面的代码中进行。

以下是我所拥有的:

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;

} }

我希望以这样的方式完成这项工作:当玩家移动时,MT_EARTH地形占据的所有位置都会变成MT_EARTH_SHADOW地形。

我可以复制并粘贴所有这些线条并更改每个位置的位置修改器(对于所有四行的每个图块),但这似乎很乏味且不必要。

如何缩短它并使其适用于所有必需的瓷砖?

1 个答案:

答案 0 :(得分:1)

我建议更改方法,而不是为每个图块指定一个terran类型,其集合表示地形类型,并在这些集合之间移动这些类型。