在C中连接四个游戏板



我正在编写一个程序,允许用户玩游戏四个与计算机连接。我在打印正确的尺寸时遇到了困难。我尝试使用嵌套进行循环,但输出有点关闭。这是我的代码的一部分:

#include <stdio.h>
#define BOARD_SIZE_VERT 6
#define BOARD_SIZE_HORIZ 7
void display_board(int board[] [BOARD_SIZE_VERT]);
int main ()
{
  int board[BOARD_SIZE_HORIZ][BOARD_SIZE_VERT] = {{0}};
  display_board(board);
  return 0;
}

  void display_board(int board[] [BOARD_SIZE_VERT])
{
  int i,j;
  for (i=0; i<BOARD_SIZE_HORIZ; i++) {
    printf ("+---+---+---+---+---+---+---+");
    printf ("n");
    for (j=0; j<BOARD_SIZE_VERT; j++)
     printf ("|   ");
     printf("n");
  }
}

这是我的输出:

+---+---+---+---+---+---+---+
|   |   |   |   |   |   
+---+---+---+---+---+---+---+
|   |   |   |   |   |   
+---+---+---+---+---+---+---+
|   |   |   |   |   |   
+---+---+---+---+---+---+---+
|   |   |   |   |   |   
+---+---+---+---+---+---+---+
|   |   |   |   |   |   
+---+---+---+---+---+---+---+
|   |   |   |   |   |   
+---+---+---+---+---+---+---+
|   |   |   |   |   |   

这就是我想要的样子:

+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+
void display_board(int board[] [BOARD_SIZE_VERT]){
    int i,j;
    for (i=0; i<BOARD_SIZE_VERT; i++) {
        printf ("+");
        for (j=0; j<BOARD_SIZE_HORIZ; j++)
            printf("---+");
        printf ("n");
        printf ("|");
        for (j=0; j<BOARD_SIZE_HORIZ; j++)
            printf("   |");
        printf ("n");
    }
    printf ("+");
    for (j=0; j<BOARD_SIZE_HORIZ; j++)
        printf("---+");
    printf ("n");
}

两个主要问题:您的循环是倒置的,您需要打印一些额外的字符才能在底部和右侧获取额外的线条。尝试以下操作:

void display_board(int board[] [BOARD_SIZE_HORIZ])
{
  int row,col;
  for (row=0; row<BOARD_SIZE_VERT; row++) {
    printf ("+---+---+---+---+---+---+---+");
    printf ("n");
    for (col=0; col<BOARD_SIZE_HORIZ; col++) {
      printf ("|   ");
    }
    printf("|n");
  }
  printf ("+---+---+---+---+---+---+---+");
}

这是相关更改:

  • 我交换了循环中Vert/Horiz常数的用法。由于您一次打印一条线,因此外圈控制板的高度。内部循环控制板上的列数
  • ij重命名为rowcol,因此代码更自我记录
  • printf("n")上添加了一个管道,因为您需要的垂直分离器线比每条线的实际插槽数
  • 最后添加了一个额外的printf("+---....,因为您需要比实际行数更多的水平分离器

另外,我更改了函数原型中的数组定义,以便第一个索引是行,第二个索引是列。如果您选择遵循此操作,则需要更改代码中数组的其他用法。例如:

int board[BOARD_SIZE_VERT][BOARD_SIZE_HORIZ] = {{0}};

您的代码效果很好。但是您有8个"| "可以显示,并且仅循环B OARD_SIZE_VERT值6。因此,您应该将其增加到8或添加到8。尝试以下操作:

void display_board(int board[] [BOARD_SIZE_VERT]){
    int i,j;
    for (i=0; i<BOARD_SIZE_HORIZ - 1; i++) {
        printf ("+---+---+---+---+---+---+---+");
        printf ("n");
        for (j=0; j<BOARD_SIZE_VERT + 2; j++)
             printf ("|   ");
         printf("n");
    }
    printf ("+---+---+---+---+---+---+---+n");
}

最新更新