Я должен сделать игру для одного игрока.У нас есть 4-4 игрока X и O и пробел (от 0 до 8).Это выглядит так:
|X|X|X|X| |O|O|O|O|
Я должен поменять местами буквы X и O:
|O|O|O|O| |X|X|X|X|
Правила:
- Любой символ может быть перемещенв соседнее пустое пространство.
X может перепрыгнуть через O, если место рядом с O пусто, и наоборот.Например:
|X|X|X| |X|O|O|O|O| -> |X|X|X|O|X| |O|O|O|
Нет другого способа переместить их.
Я застрял со вторым правилом как 2 дня.
public static final int charX = 88;
public static final int charO = 79;
public static final int charSpace = 32;
//steps[0] = from;
//steps[1] = to
// X = 88 ; O = 79 ; Space = 32;
//char[] table = {'X', 'X', 'X', 'X', ' ', 'O', 'O', 'O', 'O'};
//int[] table = {88, 88, 88, 88, 32, 79, 79, 79, 79};
public static int[] ask() {
Scanner sc = new Scanner(System.in);
int from;
int to;
System.out.println("From where? (0-8)");
from = sc.nextInt();
System.out.println("To where? (0-8)");
to = sc.nextInt();
int[] step = {from, to};
return step;
}
public static boolean isValidMove(int[] steps, int[] table) {
int from = steps[0];
int to = steps[1];
boolean checker = (Math.abs(from - to) != 1 && table[to] != charSpace);
if (checker == true) {
return true;
} else
return false;
}
public static int[] validMove(Scanner sc, int to, int from, int[] table) {
int[] steps = ask();
from = steps[0];
to = steps[1];
while (isValidMove(steps, table)) {
System.out.println("Invalid move!");
steps = ask();
from = steps[0];
to = steps[1];
}
return steps;
}