Java 井字游戏的 ArrayList
Java ArrayList for Tic Tac Toe game
您好,我刚开始使用 Java,我需要一些帮助。我目前正在做一个井字游戏项目,但遇到了困难。在游戏开始时,我希望游戏板上的所有 9 个位置都有一个 ' ',以便棋盘显示为空,但是当玩家 select 他们的下一步行动时,我希望他们使用以下格式:A1, A2、A3、B1 等。如何使用这些字符串 link 我的 arrayList?
示例 A1 = 0,A2 = 1.... C3=8
public static void printGameBoard() {
System.out.println(" A B C");
System.out.println(" ______________");
System.out.println(" | | | |");
System.out.println("1 |" + board.get(0) + " | " + board.get(1) + " | " + board.get(2) + " | ");
System.out.println(" |----|----|----|");
System.out.println("2 |" + board.get(3) + " | " + board.get(4) + " | " + board.get(5) + " | ");
System.out.println(" |----|----|----|");
System.out.println("3 |" + board.get(6) + " | " + board.get(7) + " | " + board.get(8) + " | ");
System.out.println(" |____|____|____|\n");
public static int gameplay() {
boardSize = 9;
board = new ArrayList();
for(int i = 0; i < boardSize; i++) {
board.add(Character.valueOf(' '));
}
return playerTurn();
}
试试这个。
for(int i = 0; i < boardSize; i++) {
board.add(Character.valueOf(i+1));
}
所以,你ArrayList
是一个线性容器,包含0-n个元素。您的网格是一个二维容器,允许通过 y
xx
引用来引用元素。您需要一种能够在它们之间进行转换的方法。
您知道网格是一个 3x3
矩阵(3 行 x 3 列),所以一点点简单的数学运算会派上用场。
A
引用第一个列,因此您的索引将是 (y - 1) + (0 * 3)
(请记住,Java 是 0 索引)
B
引用第二列,因此您的索引将是 (y - 1) + (1 * 3)
C
引用第三列,因此您的索引将是 (y - 1) + (2 * 3)
现在,你需要的只是将字母转换成数字,惊人的是,这其实非常简单...
String cell = "A1";
int col = cell.charAt(0) - 'A';
将 return 0
.
稍微安全一点的解决方案是从您的操作中完全移除外壳,例如...
int col = cell.toLowerCase().charAt(0) - 'a';
现在,您需要对输入进行一些验证以确保值在范围内。
但是那一行呢??
String cell = "A1";
int col = cell.toLowerCase().charAt(0) - 'a';
int row = Integer.parseInt(cell.substring(1)) - 1;
System.out.println(row + "x" + col);
简单:)
因此,您可以将其组合在一起,例如...
if (row >= 0 && row < 3 && col >= 0 && col < 3) {
int index = (row * 3) + col;
board.set(index, "x");
}
或类似的东西
而且因为我的数学全部倒转了....
String[] cols = new String[]{"A", "B", "C"};
for (int rowIndex = 1; rowIndex < 4; rowIndex++) {
for (String colValue : cols) {
String cell = colValue + rowIndex;
int col = cell.toLowerCase().charAt(0) - 'a';
int row = Integer.parseInt(cell.substring(1)) - 1;
int index = (row * 3) + col;
System.out.println("Cell = " + cell + "; index = " + index);
}
}
产出
Cell = A1; index = 0
Cell = B1; index = 1
Cell = C1; index = 2
Cell = A2; index = 3
Cell = B2; index = 4
Cell = C2; index = 5
Cell = A3; index = 6
Cell = B3; index = 7
Cell = C3; index = 8
您好,我刚开始使用 Java,我需要一些帮助。我目前正在做一个井字游戏项目,但遇到了困难。在游戏开始时,我希望游戏板上的所有 9 个位置都有一个 ' ',以便棋盘显示为空,但是当玩家 select 他们的下一步行动时,我希望他们使用以下格式:A1, A2、A3、B1 等。如何使用这些字符串 link 我的 arrayList?
示例 A1 = 0,A2 = 1.... C3=8
public static void printGameBoard() {
System.out.println(" A B C");
System.out.println(" ______________");
System.out.println(" | | | |");
System.out.println("1 |" + board.get(0) + " | " + board.get(1) + " | " + board.get(2) + " | ");
System.out.println(" |----|----|----|");
System.out.println("2 |" + board.get(3) + " | " + board.get(4) + " | " + board.get(5) + " | ");
System.out.println(" |----|----|----|");
System.out.println("3 |" + board.get(6) + " | " + board.get(7) + " | " + board.get(8) + " | ");
System.out.println(" |____|____|____|\n");
public static int gameplay() {
boardSize = 9;
board = new ArrayList();
for(int i = 0; i < boardSize; i++) {
board.add(Character.valueOf(' '));
}
return playerTurn();
}
试试这个。
for(int i = 0; i < boardSize; i++) {
board.add(Character.valueOf(i+1));
}
所以,你ArrayList
是一个线性容器,包含0-n个元素。您的网格是一个二维容器,允许通过 y
xx
引用来引用元素。您需要一种能够在它们之间进行转换的方法。
您知道网格是一个 3x3
矩阵(3 行 x 3 列),所以一点点简单的数学运算会派上用场。
A
引用第一个列,因此您的索引将是 (y - 1) + (0 * 3)
(请记住,Java 是 0 索引)
B
引用第二列,因此您的索引将是 (y - 1) + (1 * 3)
C
引用第三列,因此您的索引将是 (y - 1) + (2 * 3)
现在,你需要的只是将字母转换成数字,惊人的是,这其实非常简单...
String cell = "A1";
int col = cell.charAt(0) - 'A';
将 return 0
.
稍微安全一点的解决方案是从您的操作中完全移除外壳,例如...
int col = cell.toLowerCase().charAt(0) - 'a';
现在,您需要对输入进行一些验证以确保值在范围内。
但是那一行呢??
String cell = "A1";
int col = cell.toLowerCase().charAt(0) - 'a';
int row = Integer.parseInt(cell.substring(1)) - 1;
System.out.println(row + "x" + col);
简单:)
因此,您可以将其组合在一起,例如...
if (row >= 0 && row < 3 && col >= 0 && col < 3) {
int index = (row * 3) + col;
board.set(index, "x");
}
或类似的东西
而且因为我的数学全部倒转了....
String[] cols = new String[]{"A", "B", "C"};
for (int rowIndex = 1; rowIndex < 4; rowIndex++) {
for (String colValue : cols) {
String cell = colValue + rowIndex;
int col = cell.toLowerCase().charAt(0) - 'a';
int row = Integer.parseInt(cell.substring(1)) - 1;
int index = (row * 3) + col;
System.out.println("Cell = " + cell + "; index = " + index);
}
}
产出
Cell = A1; index = 0
Cell = B1; index = 1
Cell = C1; index = 2
Cell = A2; index = 3
Cell = B2; index = 4
Cell = C2; index = 5
Cell = A3; index = 6
Cell = B3; index = 7
Cell = C3; index = 8