gpt4 book ai didi

java - 棋盘将检查输入到棋盘上的棋子是否处于有效位置

转载 作者:行者123 更新时间:2023-12-04 08:32:01 25 4
gpt4 key购买 nike

我对 Java 编程很陌生,刚刚开始使用二维数组。我想做的是制作一个程序来创建一个 8x8 的棋盘,并要求用户输入要存储在棋盘上的字符串(棋子)。现在,我不想检查棋子是否是有效的棋子,但我想确保放置有效(即,当提示放置棋子并且用户选择无效坐标时,程序会告诉用户认为这是错误的)。否则,如果坐标正确,它将存储字符串,我将使用另一个类来打印字符串并将它们以及它们的放置位置输出给用户。由于它是一个棋盘,我试图将 8x8 转换为 8,后跟 a-g 中的一个字符。
这是我到目前为止所拥有的:

public class ChessBoard {
public static void main(String[] args) {
char rows = 'a';
String spot;
int[][] grid = new int[8][8];
for (int i = 0; i < grid.length; i++, rows++) {
for (int col = 0; col < grid[i].length; col++) {
System.out.print(rows + "" + (col + 1) + " ");
}
System.out.println();
}
}
}
这将打印棋盘的布局,但我不确定如何向用户询问有效坐标中的字符串,例如 e5,然后可以在另一个类中打印该字符串。
我希望我的预期输出是这样的:
Enter a coordinate: a5
Enter a piece to be placed here: Queen
继续直到用户希望看到他们放置的内容:
You have placed a Queen at a5
任何帮助将不胜感激,谢谢!

最佳答案

要从用户那里获取位置,您可以使用类似

// only once, to initialize the scanner
Scanner scanner = new Scanner(System.in);

// each time you need input from the user
String input = scanner.next();
要请求一个位置,您可以检查输入是否与您期望的匹配,否则请求一个新的输入:
String input = null;              // will be changed to a valid position
boolean iLikeThisInput = false; // will be true if position is valid
while ( ! iLikeThisInput) {
System.out.println("Enter a coordinate (for example, a5): ");
input = scanner.next();
iLikeThisInput = input.matches("[a-g][1-8]"); // this is a regular expression
};
// now we now that the input is valid
int col = (int)(input.charAt(0) - 'a'); // 'a' is column 0: 'a' - 'a' = 0.
int row = (int)(input.charAt(1) - '0'); // '0' is row 0: same trick
Regular expressions 对您来说可能是新的(如果您不熟悉编程),但它非常强大,可以检查文本是否与特定模式匹配,并且可以在所有主要编程语言中找到。
减去字符代码(最后 2 行)的技巧是有效的,因为数字 0123456789 的字符代码和字母 abcd 的字符代码......是按数字/字母顺序排列的,因此编写 (int)('b'-'a') 与编写 1 相同。
您将只是缺少获取该作品的代码。使用 | 可以轻松构建大量单词的正则表达式:
 input.matches("Bob|Robert|Rob"); // matches only Bob or Robert or Rob
最后一块是将整数转换为块名称,反之亦然。我建议编写两种方法:
 public static String pieceToName(int piece) { /**/ }
 public static int nameToPiece(String name) { /**/ }
使用 switch 语句,您可以使用您喜欢的编码快速实现两者:
 switch(name) {
case "Queen": return 9;
case "Pawn": return 1;
...
}
请注意,如果您开始构建实际的国际象棋程序,则必须区分白棋子和黑棋子。一种方法是对一种颜色使用正数,对另一种颜色使用负数。
祝你的程序好运!

关于java - 棋盘将检查输入到棋盘上的棋子是否处于有效位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64973598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com