2017-02-10 5 views
0

これは私が作っているゲーム用です。主人公が地球山のタイル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行すべての各タイル)の位置変更子を変更するだけでも問題ありません。

これを短くして、すべての必要なタイルで機能させるにはどうすればよいですか?

+1

データをコードとミックスしていますが、これはやりたくないものです。地図データをコードから、データベースやテキストファイル、XMLファイルなどの永続的なデータに変換して、あなたのために最適な方法で取得し、データを読み込んでモデルに変換するコードを記述します。 –

+0

重複するコードがメソッドになるはずです。パラメータの変更だけで十分です。 –

+0

@HovercraftFullOfEelsしかし、彼は地形の状態を切り替える方法を尋ねています。 2つのアイデア:いくつかのクラスに付随する静的変数を使用します。代わりに、地形を表現するオブジェクトのいくつかのインスタンスへのポインタを渡すこともできます。シングルトンは、もはや優先されません。 (グローバル状態)つまり、単一のスイッチを使用できるように地形を表現します。 – synchronizer

答えて

1

私はアプローチを変更し、各タイルに地形タイプを表すコレクションを持たせ、これらのタイプをこれらのコレクション間で移動する代わりに、変更することをお勧めします。

+1

あなたは、(上のレベルで)あなたが何を記述するかを具体化しますか? – synchronizer

+1

この回答が役立つためには細かいことが重要かどうかは実際に分かりません。私は彼が、関連するすべてのタイルを一度参照する[COLLECTION]と呼ばれるコードの塊をどこかに持つことができるということを意味すると思います。その後、そのタイプのすべてのタイルに影響を与えたい場合は、[コレクション]を参照してください。私はかなりの簡潔なやり方で作業するために、ポジションに関係なくタイプのタイルをすべて変更しています。 – user5352515

関連する問題