- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 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 对您来说可能是新的(如果您不熟悉编程),但它非常强大,可以检查文本是否与特定模式匹配,并且可以在所有主要编程语言中找到。
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/
我正在尝试使用 GUI 的 NetBeans IDE 在 Java 中制作国际象棋游戏,但我无法使棋子停留在棋盘上方,当我尝试时,棋盘就会被推开。我对这两个图像都使用了标签。如何让棋子停留在棋盘上方而
编辑:要查看JS函数的工作版本,see the accepted answer in this followup thread 编辑:我使用的最终正则表达式是这样的: var pattern = /(
我一直在用 C++(使用 MVS2010)开发一个控制台国际象棋游戏,我似乎遇到了一个我自己无法解决的问题。问题是我需要在控制台中显示以下棋子: http://en.wikipedia.org/wik
我正在尝试用 Java 编写自己的国际象棋游戏。我已经开始编写类(class),我的高级想法如下: 我有一个包含这些字段的 Piece 类: private String name; private
我是一名优秀的程序员,十分优秀!