首页 > 解决方案 > 如何通过将二维数组等同于具有 void 参数的函数来填充二维数组?

问题描述

我正在使用 2D 数组制作一个小游戏。我尝试制作一个函数,让你从一块干净的板子开始,并希望它以这样一种方式,即干净板子函数是一个右值,如果这有意义的话。

#include <stdio.h>
#include <stdlib.h>
#define MAX 8
#define EMPTY 0
#define BLACK 1
#define WHITE -1


//Fills the 2D array with 0s and places the 4 starting pieces in the middle
int **cleanboard(void){
    int newboard[MAX][MAX];
    (*newboard)[MAX] = malloc(sizeof*newboard*MAX);

    for(int row=0; row<MAX; row++){
        for(int col=0; col<MAX; col++){
            newboard[row][col] = EMPTY;
        }
    }

    newboard[3][3] = WHITE, newboard[4][4] = WHITE;
    newboard[4][3] = BLACK, newboard[3][4] = BLACK;

    return newboard;
}


//Displays the board
void printboard(int arr[][MAX]){
    printf("   1 2 3 4 5 6 7 8\n");               //Top numbers

    for(int i=0; i<MAX; i++){
        for(int j=0; j<MAX; j++){
            if(j==0){printf("%d ", i+1);}        //Side numbers
            switch(arr[i][j]){                   //Print piece
            case 0: printf(" .");
                    break;
            case 1: printf(" b");
                    break;
            case -1: printf(" w");
                    break;
            }
        }
     printf("\n");
    }
}


int main(){
    int **board;
    board = cleanboard();
    printboard(board);
    return 0;
}

使用给定的代码,它输出:

   1 2 3 4 5 6 7 8
1

但是,此示例是电路板的外观:

//Example 2D array:

int grid[MAX][MAX] = {{-1, 1, -1, 1, 0, -1, 1, 0},
                      {1, -1, -1, 1, 0, -1, -1, 1},
                      {1, 1, -1, 1, -1, 1, 1, 1},
                      {-1, 0, -1, -1, -1, 1, 1, -1},
                      {1, -1, 0, 1, 0, 1, 0, 0},
                      {0, 1, -1, 1, -1, -1, 1, -1},
                      {1, 1, 1, -1, 0, -1, -1, -1},
                      {0, -1, -1, -1, -1, 1, -1, 0}};

printboard(grid);

输出:

   1 2 3 4 5 6 7 8
1  w b w b . w b .
2  b w w b . w w b
3  b b w b w b b b
4  w . w w w b b w
5  b w . b . b . .
6  . b w b w w b w
7  b b b w . w w w
8  . w w w w b w .

清洁板功能不存储值或导致打印板功能停止的东西。任何帮助表示赞赏。

标签: arrayscpointers2d

解决方案


以下建议的代码:

  1. 创建董事会
  2. 初始化板

现在,建议的代码:

#include <stdio.h>
#include <stdlib.h>
#define MAX 8
#define EMPTY 0
#define BLACK 1
#define WHITE -1


//Fills the 2D array with 0s and places the 4 starting pieces in the middle
int **cleanboard(void)
{
    int **newboard = malloc( MAX * sizeof( int ) );;

    for(int row=0; row<MAX; row++)
    { 
         newboard[row] = malloc( MAX * sizeof( int ) );
    }
    
    for(int row=0; row<MAX; row++)
    {
        for(int col=0; col<MAX; col++)
        {
            newboard[row][col] = EMPTY;
        }
    }

    newboard[3][3] = WHITE;
    newboard[4][4] = WHITE;
    newboard[4][3] = BLACK;
    newboard[3][4] = BLACK;

    return newboard;
}

推荐阅读