これは私が作っているゲーム用です。主人公が地球山のタイル1を構成するタイルを歩くと、隣接するタイルがすべて別のタイプの地形に変わります。この作業をより簡単に完了するにはどうすればよいですか? [Java]
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地形に変換されます。
これらの行をすべてコピーして貼り付けて、各位置(4行すべての各タイル)の位置変更子を変更するだけでも問題ありません。
これを短くして、すべての必要なタイルで機能させるにはどうすればよいですか?
データをコードとミックスしていますが、これはやりたくないものです。地図データをコードから、データベースやテキストファイル、XMLファイルなどの永続的なデータに変換して、あなたのために最適な方法で取得し、データを読み込んでモデルに変換するコードを記述します。 –
重複するコードがメソッドになるはずです。パラメータの変更だけで十分です。 –
@HovercraftFullOfEelsしかし、彼は地形の状態を切り替える方法を尋ねています。 2つのアイデア:いくつかのクラスに付随する静的変数を使用します。代わりに、地形を表現するオブジェクトのいくつかのインスタンスへのポインタを渡すこともできます。シングルトンは、もはや優先されません。 (グローバル状態)つまり、単一のスイッチを使用できるように地形を表現します。 – synchronizer