2011-12-03 7 views
1

私はランダムな移動を掃除しようとしました、移動の方向は、配列リストにする必要がありますので、毎回マシンは方向の例としてリストからランダムに3方向を選択する必要があります(N 、N、S)。マシンは、それが再び選択すべき端に達するまで、方向に従って連続的に移動します。移動ランダムマトリックス8 * 8

エッジに達したときにマシンが方向を変えないという問題。

public boolean Wall(int x, int y) { 

    if (choices.contains("N") && y == 7) { 
     return false; 
    } else if (choices.contains("S") && y == 0) { 
     return false; 
    } else if (choices.contains("W") && x == 0) { 
     return false; 
    } else if (choices.contains("E") && x == 7) { 
     return false; 
    } else { 
     return true; 
    } 
} 

と私は(壁を呼び出す)、内部の動き():

私はこの方法を記述し、マシンがエッジに達するかどうかを判断する責任があります。

この私のすべてのコード:

import java.util.*; 

public class test { 

private static String[][] board; 
private static final int ROWS = 8; 
private static final int COLUMNS = 8; 
int moves = 0; 
List<String> orientation = Arrays.asList(new String[]{"N", "E", "W", "S"}); 
List<String> choices = new ArrayList<String>(3); 


public test() { 
    //String state = "d"; 
    board = new String[ROWS][COLUMNS]; 
    for (int i = 0; i < ROWS; i++) { 
     for (int j = 0; j < COLUMNS; j++) { 
      board[i][j] = " "; 

     } 
    } 
    board[4][4] = "d"; 
    board[0][2] = "d"; 
    board[4][7] = "d"; 
    board[1][5] = "d"; 
    board[6][6] = "d"; 
    board[4][0] = "d"; 
} 

public String toString() { 
    String r = ""; 
    for (int i = 0; i < ROWS; i++) { 

     for (int j = 0; j < COLUMNS; j++) { 
      r += "[" + board[i][j] + "]"; 
     } 
     r += "\n"; 
    } 
    return r; 
} 

public int[] gostright(int x, int y) { 
    if (choices.contains("N")) { 
     x--; 
     if (x == -1) { 
      x = 0; 
     } 

    } else if (choices.contains("W")) { 
     y--; 
     if (y == -1) { 
      y = 0; 
     } 

    } else if (choices.contains("S")) { 
     x++; 
     if (x == 8) { 
      x = 7; 
     } 
    } else if (choices.contains("E")) { 
     y++; 
     if (y == 8) { 
      y = 7; 
     } 
    } 
    System.out.println("choise taste equal" + x + ":" + y); 
    return new int[]{x, y}; 
} 

public boolean Wall(int x, int y) { 

    if (choices.contains("N") && y == 7) { 
     return false; 
    } else if (choices.contains("S") && y == 0) { 
     return false; 
    } else if (choices.contains("W") && x == 0) { 
     return false; 
    } else if (choices.contains("E") && x == 7) { 
     return false; 
    } else { 
     return true; 
    } 
} 

public int CountDirt() { 
    int count = 0; 
    for (int i = 0; i < ROWS; i++) { 
     for (int j = 0; j < COLUMNS; j++) { 
      if (board[i][j] == "d") { 
       count++; 
      } 
     } 
    } 
    // System.out.println("the found dirt " + count+" dirts"); 
    return count; 
} 

public void Move() { 
    Collections.shuffle(orientation); 
    int nowX = 4, nowY = 4; 
    int counter = 0; 
    int strightCounter = 1; 
    int wallx = 0; 
    int wally = 0; 
    while (CountDirt() > 0) { 
     for (int i = 0; i < 3; i++) { 
      choices.add(orientation.get(i)); 
      for (int x = 0; x < strightCounter; x++) { 
       for (int y = 0; y < strightCounter; y++) { 
        if(Wall(wallx,wally)) { 
         break; 
        }    

        System.out.println("Wall" + x + ":" + y); 
        board[nowX][nowY] = "1"; 
        int[] pos = gostright(nowX, nowY); 
        nowX = pos[0]; 
        nowY = pos[1]; 
        System.out.println("" + nowX + ":" + nowY); 
        System.out.println("nowX and nowY" + board[nowX][nowY]); 
        board[nowX][nowY] = "#"; 
        moves++; 
        System.out.println(toString()); 
        System.out.println(orientation.get(i)); 
        System.out.println("Choices " + choices); 
        System.out.println("# move" + moves); 
       } 
      } 
      counter++; 
      System.out.println("CountDirt()==" + CountDirt()); 


     } 
     choices.clear(); 

    } 

} 

I)は、(移動の問題点を考えて、しかし、わからないところ、それは正確です。

+0

ここにクロス投稿:[www.java-forums.org:help-vacuum-cleaner-code](http://www.java-forums.org/new-java/52123-help-vacuum-cleaner- code.html) –

答えて

0

このコードでは、wallxが2回表示されます。 int wallx = 0;およびif(Wall(wallx,wally))。これは、Wall()に常に0と0を渡していることを意味します。