2017-05-22 12 views
0

Javaを使用してレーシングカーゲームを作成していますが、GUIの部分で止まっています。Java Gui Gridlayout:特定のオブジェクトを削除して別のオブジェクトをその位置に追加します。

基本的に、私のゲームでは、あなたはダイスを投げ、2台のクルマの1台がポジション(9,0)からポジション(0,0)に向かって移動します。だれでも(0,0)が勝者になる。問題は、ゲームの準備が整っていて、動くプロセスを除いてすべてが完全に機能していることです。私はGridLayoutを使って地図をユーザーに提示しています。地図には、道路、障害物、ガソリンスタンド、ENDタイル、STARTタイル、2台の車の7種類のオブジェクトがあります。私はgenerateメソッドを使ってマップをランダムに生成し、それをGUIクラスに渡して、マップをユーザーに表示してジョブを実行できるようにします。

しかし、私はマップから特定のタイルを削除する方法がわからないので、車がどこにあるのかをユーザーに示すことができます。私はイメージを使用してラベルに配置します。私の最初のアクションは、グリッドからコンポーネント全体を削除し、新しいImageIconを車に追加することでした。また、私はメソッド ".setIcon"を認識していますが、編集するImageIconをどのように知っていますか?

generateメソッドです。

public void generate(){ 
    int result; 
    int greenCounter = 0; 
    int blackCounter = 0; 
    for (int i = 0; i < tiles.length; i++){ 
     for (int j = 0; j < tiles.length; j++){ 
      result = (int)(Math.random()*23 + 1); 
      if (i == 0 && j == 0) tiles[i][j] = new Start(); 
      else if (i == 9 && j == 0) tiles[i][j] = new End(); 
      else if (result > 2) tiles[i][j] = new Grey(); 
      else if (result == 1) { 
       blackCounter++; 
       if (blackCounter <=6) tiles[i][j] = new Black(); 
       else tiles[i][j] = new Grey(); 
      } 
      else if (result == 2){ 
       greenCounter++; 
       if (greenCounter <=6) tiles[i][j] = new Green(); 
       else tiles[i][j] = new Grey(); 
      } 
     } 
    } 
} 

GUIコンストラクタ内部のマップ作成:

車がマップ内を移動しながら示すことになっている方法
for(int i = 0; i < tiles.length; i++){ 
     for(int j = 0; j < tiles.length; j++){ 
      if(tiles[i][j] instanceof Green) { 
       roadGas = new ImageIcon ("road/road_gas.jpg"); 
       roadGasLb = new JLabel(roadGas); 
       tilesPanel.add(roadGasLb); 
      } 
      else if(tiles[i][j] instanceof Grey){ 
       road = new ImageIcon ("road/road.jpg"); 
       roadLb = new JLabel(road); 
       tilesPanel.add(roadLb); 
      } 
      else if(tiles[i][j] instanceof Black){ 
       roadObstacle = new ImageIcon("road/road_obstacle.jpg"); 
       roadObstacleLb = new JLabel(roadObstacle); 
       tilesPanel.add(roadObstacleLb); 
      } 
      else if (i == 9 && j==0) { 
       roadStart = new ImageIcon ("road/roadStart_car.jpg"); 
       roadStartLb = new JLabel(roadStart); 
       tilesPanel.add(roadStartLb); 
      } 
      else if (i == 0 && j == 0) { 
       roadEnd = new ImageIcon ("road/roadEnd.jpg"); 
       roadEndLb = new JLabel(roadEnd); 
       tilesPanel.add(roadEndLb); 
      } 
     } 
    } 

。私はこれが働く方法がないことを知っていますが、私は何をすべきか分かりません。

   carLocation = nissan.getCarLocation(); 
       int x; 
       int y; 
       for (int i = 0; i < carLocation.length; i++){ 
        for (int j = 0; j < carLocation.length; j++){ 
         if (carLocation[i][j] != null){ 
          if (tiles[i][j] instanceof Black) tiles[i][j].action(nissan);; 
          if (tiles[i][j] instanceof Grey) tiles[i][j].action(nissan); 
          if (tiles[i][j] instanceof Green) tiles[i][j].action(nissan); 
          x = i; 
          y = j; 
          if (x % 2 == 0){ 
           roadCar = new ImageIcon ("road/road_GTR_right.jpg"); 
           roadCarLb = new JLabel(roadCar); 
           tilesPanel.add(roadCarLb,x,y); 
           contentPanel.add(tilesPanel, BorderLayout.CENTER); 
          } 
          else { 
           roadCar = new ImageIcon ("road/road_GTR_left.jpg"); 
           roadCarLb = new JLabel(roadCar); 
           tilesPanel.add(roadCarLb,x,y); 
           contentPanel.add(tilesPanel, BorderLayout.CENTER); 
          } 
          break; 
         } 

How the map looks:

事前のおかげで、私はどんな答えを感謝しています。

答えて

0

ただし、特定のタイルを削除する方法はわかりません地図が表示され、車がどこにあるのかをユーザーに示すことができます。

行/列の値を使用してコンポーネントが配置されている「グリッド」ではありません。次に、Containerremove(...)add(...)メソッドを使用して、コンポーネントをパネルに追加/削除することができます。以下のような何か:

int index = (rowIndex * cellsInRow) + columnIndex. 
panel.remove(index); 
panel.add(component, index); 
panel.revalidate(); 
panel.repaint(); 

それとも

label.setIcon(...) method. 
を使用してラベルのアイコンを置き換えることであっても容易に
0

add(Component、index)を使用すると、置換コンポーネントを適切な場所に追加できます。 Container.getComponents()の結果の古いコンポーネントを見つけることによって、または行と列を知っている場合は数学的に正しいインデックスを見つけることができます。

関連する問題