2012-04-05 14 views
1

私はJavaの完全なnoobです。私はまだ本当にコードする方法を知らない。 私の迷路に問題があります。私は今スタート(2)からエンド(3)に行くことができますが、問題は(開始)のアイコンです。私は私たちの迷路(mazePlan)の値を印刷しようとしましたが、それは問題ありませんでした。唯一の問題はアイコンです。アイコンは、再帰関数が終了した後にのみ変更されました(私はsetIconsを使用しました)。私は開始移動のためにそれらのアイコンを取得する必要があります。ありがとう!私は本当に助けが必要です。ありがとう!コードのごHaugeのチャンクを解読しようとしなければJava:迷路のアイコン:何をする?

class solveButton implements ActionListener{ 
    private boolean goal; 
    public void actionPerformed(ActionEvent e1) 
    { 
     int i,j, a = 0,b = 0; 
     goal = false; 

     //Find 2/start 
     for(i = 0; i<10; i++){ 
      for (j = 0; j<10; j++){ 
       if (getMazePlan()[i][j] == 2){ 
        a= i; b = j; 
       }  
      } 
     } 

     function(a,b); 

     //print only 
     for (i=0;i<10;i++){ 
      for(j = 0; j < 10; j++){ 
       System.out.print(getMazePlan()[i][j] + " "); 
      } 
      System.out.println(); 
     } 

    } 

    public void function(int y, int x){ 

     int ctr = 0,b ,a; 

     //CHECKING FOR WALLS 
     //LEFT 
      if(x-1 >= 0 && x-1 <= 9){ 
       if(getMazeBoolean()[y][x-1] == false) 
        ctr++; 
      } 
     //UP 
      if(y-1 >= 0 && y-1 <= 9){ 
       if(getMazeBoolean()[y-1][x] == false) 
        ctr++; 
      } 
     //RIGHT 
      if(x+1 >= 0 && x+1 <= 9){ 
       if(getMazeBoolean()[y][x+1] == false) 
        ctr++; 
      } 
     //DOWN 
      if(y+1 >= 0 && y+1 <= 9){ 
       if(getMazeBoolean()[y+1][x] == false) 
        ctr++; 
      } 

     try{ 
      Thread.sleep(1000); 
     }catch(Exception e){} 

      //print only 
     System.out.println("Move"); 
     for (int i=0;i<10;i++){ 
      for(int j = 0; j < 10; j++){ 
       System.out.print(getMazePlan()[i][j] + " "); 
      } 
      System.out.println(); 
     } 

     stack1.push(x); 
     stack1.push(y); 
     setMazePlan1(0, y, x); 
     maze[y][x].setIcon(end); 
     setMazeBoolean(true, y , x); 


     //LEFT 
     if(ctr > 0 && goal == false){ 
     if(x-1 >= 0 && x-1 <= 9){ 
      if(getMazeBoolean()[y][x-1] == false && getMazePlan()[y][x-1] != 3){ 
       setMazePlan1(2, y, x-1); 
       function(y, x-1); 
       ctr--; 

       if(ctr != 0 && goal == false){ 
        b = stack1.pop(); 
        a = stack1.pop(); 
        setMazePlan1(2, b , a); 
        stack1.push(a); 
        stack1.push(b); 

        try{ 
         Thread.sleep(1000); 
        }catch(Exception e){} 

        setMazePlan1(0, b , a); 
       } 
      } 
      else if(getMazePlan()[y][x-1] == 3){ 
       System.out.println("FINISH"); 
       goal = true; 
      } 
     } 
     } 
     //UP 
     if(ctr > 0 && goal == false){ 
     if(y-1 >= 0 && y-1 <= 9){ 
      if(getMazeBoolean()[y-1][x] == false && getMazePlan()[y-1][x] != 3){ 
       setMazePlan1(2, y-1, x); 
       function(y-1, x); 
       ctr--; 

      if(ctr != 0 && goal == false){ 
       b = stack1.pop(); 
       a = stack1.pop(); 
       setMazePlan1(2, b , a); 
       stack1.push(a); 
       stack1.push(b); 

       try{ 
        Thread.sleep(1000); 
       }catch(Exception e){} 

       setMazePlan1(0, b , a); 
      } 
      } 
      else if(getMazePlan()[y-1][x] == 3){ 
       System.out.println("FINISH"); 
       goal = true; 
      } 
     } 
     } 
     //RIGHT 
     if(ctr > 0 && goal == false){ 
     if(x+1 >= 0 && x+1 <= 9){ 
      if(getMazeBoolean()[y][x+1] == false && getMazePlan()[y][x+1] != 3){ 
       setMazePlan1(2, y, x+1); 
       function(y, x+1); 
       ctr--; 

      if(ctr != 0 && goal == false){ 
       b = stack1.pop(); 
       a = stack1.pop(); 
       setMazePlan1(2, b , a); 
       stack1.push(a); 
       stack1.push(b); 

       try{ 
        Thread.sleep(1000); 
       }catch(Exception e){} 

       setMazePlan1(0, b , a); 
      } 
      } 
      else if(getMazePlan()[y][x+1] == 3){ 
       System.out.println("FINISH"); 
       goal = true; 
      } 
     } 
     } 
     //DOWN 
     if(ctr > 0 && goal == false){ 
     if(y+1 >= 0 && y+1 <= 9){ 
      if(getMazeBoolean()[y+1][x] == false && getMazePlan()[y+1][x] != 3){ 
       setMazePlan1(2, y+1, x); 
       function(y+1, x); 
       ctr--; 

      if(ctr != 0 && goal == false){ 
       b = stack1.pop(); 
       a = stack1.pop(); 
       setMazePlan1(2, b , a); 
       stack1.push(a); 
       stack1.push(b); 

       try{ 
        Thread.sleep(1000); 
       }catch(Exception e){} 

       setMazePlan1(0, b , a); 
      } 
      } 
      else if(getMazePlan()[y+1][x] == 3){ 
       System.out.println("FINISH"); 
       goal = true; 
      } 
     } 
     } 
     //DEADEND 
     if(goal == false && ctr == 0){ 

      b = stack1.pop(); 
      a = stack1.pop(); 
      setMazePlan1(0, b , a); 
      try{ 
      b = stack1.pop(); 
      a = stack1.pop(); 
      stack1.push(a); 
      stack1.push(b); 
      setMazePlan1(2, b , a); 
      } 
      catch(Exception e){ 

      } 

      try{ 
       Thread.sleep(1000); 
      }catch(Exception e){} 

      //print only 
      System.out.println("Pop"); 
      for (int i=0;i<10;i++){ 
       for(int j = 0; j < 10; j++){ 
        System.out.print(getMazePlan()[i][j] + " "); 
       } 
       System.out.println(); 
      } 
     } 

    } 
} 
+1

ご返信が遅れました。 スイングタイマーについて読んだことがあります。そしてそれは動作します! :) わーい !ありがとうございました – Kopaka

答えて

1

EDT(Event Dispatch Thread)をブロックしないでください。このとき、GUIは「フリーズ」します。 Thread.sleep(n)を呼び出す代わりに、繰り返すタスクの場合はSwing Timer、長時間実行するタスクの場合はSwingWorkerを実装します。 詳細はConcurrency in Swingを参照してください。

0

は、アイコンを設定した後、再描画/ペイントを強制する必要がありますするように聞こえます。

再描画()を呼び出すために何を知るためにここではない、実際に十分なコードがあり...

また、あなたはすべてやるべきではないJavaのGUIアプリケーション/ GUIのスレッドを見て(すなわちを持っている場合があります

+0

申し訳ありませんコードを...アイコン、パネルとフレームを塗り替えようとしましたが、まだ動作しません – Kopaka