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)は、(移動の問題点を考えて、しかし、わからないところ、それは正確です。
ここにクロス投稿:[www.java-forums.org:help-vacuum-cleaner-code](http://www.java-forums.org/new-java/52123-help-vacuum-cleaner- code.html) –