【问题标题】:How to create a board game in Java?如何在 Java 中创建棋盘游戏?
【发布时间】:2016-02-28 18:15:58
【问题描述】:

我有一个 Batlle-ship 计划项目要做。我试图弄清楚如何打印棋盘游戏(NxN)。

我使用的是这样一个嵌套的 for 循环:

for(int i=0; i<=10; i++){ 
    for(int=j=0; j<=10; j++){
        System.out.println("-");
    }
    System.out.println("A B C D E F G H I J");
}

要打印这样的内容:

  A B C D E F G H I J
A - - - - - - - - - -
B - - - - - - - - - -
C - - - - - - - - - -
D - - - - - - - - - -
E - - - - - - - - - -
F - - - - - - - - - -
G - - - - - - - - - -
H - - - - - - - - - -
I - - - - - - - - - -
J - - - - - - - - - -

但是有一些问题,因为它没有像那样显示板。如果有人可以帮助确定这里发生了什么,我将不胜感激。

【问题讨论】:

  • 尝试在 for 循环中打印“-”,而不仅仅是“-”。额外的空间将使打印出来的内容看起来像一个网格。
  • 你真的应该告诉我们你得到了什么输出,否则我们不能真正帮助你。一个问题可能是System.out.println() 每次调用时都会附加一个换行符。尝试改用System.out.printf(),因为它不会在每个- 之后添加换行符,然后您可以在您认为合适的地方添加换行符
  • println() 表示打印文本和换行符(并将 carret 放在下一行)。这就是为什么您的代码每行打印一个符号的原因。如果您希望 carret 保持在同一行,请改用 System.out.print("....")
  • public class Tester { public static void main(String[] args){ Tester game = new Tester(); } public Tester(){ for(int i=0; i&lt;=10; i++){ System.out.printf("A B C D E F G H I J"); for(int j=0; j&lt;=10; j++){ System.out.println("- "); } } } } 我做了一些修改,但现在它只打印了 10 个板而不是一个。这是输出(打印 10 次):A B C D E F G H I J- - - - - - - - - -

标签: java arrays multidimensional-array


【解决方案1】:

A) 根据您的索引值测试您是在第一行还是第一列。

B) 如果是,请打印这些字母。我建议您将它们放在一个数组中,并通过它们的索引来访问它们,该索引对应于有问题的行/列的索引。

C) 如果不是,打印“-”

D) 每次通过内循环时不要忘记打印空格


剧透

这里有两种方法可以实现你想要的

String[] letters = {" ", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J"};
for (int i = 0 ; i <= 10 ; i++){
    for (int j = 0 ; j <= 10 ; j++){
        System.out.print(i == 0 || j == 0 ? i == 0 ? letters[j] : letters[i] : "-");
        System.out.print(" ");
    }
    System.out.println();
}

String[] letters = {" ", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J"}; 
for (int i = 0 ; i <= 10 ; i++){
    for (int j = 0 ; j <= 10 ; j++){
        if (i == 0) {
            System.out.print(letters[j]);
        } else if (j == 0){
            System.out.print(letters[i]);
        } else {
            System.out.print("-");
        }           
        System.out.print(" ");
    }
    System.out.println();
}

【讨论】:

  • 谢谢!现在打印效果更好了。
  • 你知道我可以通过键盘输入来制作电路板尺寸 (NxN) 的方法吗?限制行/列的最小数量为 5,最大为 26 @YassinHajaj
【解决方案2】:

这段代码对你有用:

    System.out.println("  A B C D E F G H I J");
    for(int i=0; i<10; i++){ 
        System.out.print((char)('A'+i)+" ");
        for(int j=0; j<10; j++){
            System.out.print("- ");
        }
        System.out.println();
    }

【讨论】:

    【解决方案3】:

    我不确定这是否有帮助,但这里有一个使用二维数组打印电路板的简单代码:

    int row,col;
    char[][] boardGame = new char[11][11];
    for(row=0; row<boardGame.length;row++){
    for(col=0; col<boardGame[row].length;col++){
    if(row==0)
    boardGame[row][col]=(char)('A'+col);
    else if(col==0)
    boardGame[row][col]=(char)('A'+row);
    else boardGame[row][col]='-';
    }}
    
    for(row=0; row<boardGame.length;row++){
    System.out.println();
    for(col=0; col<boardGame[row].length;col++){
    System.out.print(boardGame[row][col]);
    }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多