0

この課題で困っています。マインスイーパ風の配列を作成することになっています。ファイルを読み取ります:

100
3
0 0
2 1
7 7
10
0 0
0 1
0 2
0 3
0 4
0 5
0 6
0 7
7 0
7 1

最初の行はボードの数 (100) で、2 行目はボード内の爆弾の数です。2 つの整数行は、それぞれ爆弾の位置の行と列です。

私の問題は、ボードが 1 つしか印刷されないことです。2 番目の質問は、ボードの 9 を * に切り替えるにはどうすればよいですか?

ありがとう!

#include <stdio.h>

#define BOARD_SIZE 8
#define BOMB 9

int main() {

    FILE *fp;

    fp = fopen("mine.txt","r");

    int numberBoards = 0;
    int numberMines  = 0;
    int col;
    int row;
    int currentBoard = 0;

    // first row is going to be the number of boards
    fscanf(fp,"%d",&numberBoards);

    while ( fscanf(fp,"%d",&numberMines) > 0 ) {
            int i,j;
            // start board with all zeros
            int board[BOARD_SIZE][BOARD_SIZE] = { {0} };

            currentBoard++;
            printf("Board #%d:\n",currentBoard);

            //Read in the mines and set them
            for (i=0; i<numberMines; i++) {
                    fscanf(fp,"%d %d",&col,&row);
                    board[col-1][row-1] = BOMB;
            }

            //mine proximity
            for (i=0; i<BOARD_SIZE; i++) {
                    for (j=0; j<BOARD_SIZE; j++) {
                            if ( board[i][j] == BOMB ) {
                                    //Square to the left
                                    if (j > 0 && board[i][j-1] != BOMB) {
                                            board[i][j-1]++;
                                    }
                                    //Square to the right
                                    if (j < 0 && board [i][j+1] !=BOMB){
                                            board [i][j+1]++;
                                    }

                                    //Square to the top
                                    if (i > 0 && board [i-1][j] !=BOMB) {
                                            board [i-1][j]++;
                                    }

                                    //Square to the bottom
                                    if ( i < 0 && board [i+1][j] !=BOMB){
                                            board [i+1][j]++;
                                    }


                    }



            }

            //Print out the minesweeper board
            for (i=0; i<BOARD_SIZE; i++) {
                    for (j=0; j<BOARD_SIZE; j++) {
                            printf("%d ",board[i][j]);
                    }
                    printf("\n");
            }
            printf("\n");
    }
    //Close the file.
    fclose(fp);

    return 0;
}
}
4

2 に答える 2

2

fcloseandreturnは while ループに含めるべきではありません。そのため、ボードを 1 つだけ作成しています。

于 2012-11-08T03:09:38.653 に答える
0

複数のボードの印刷に関する質問がわかりません。*の代わりに aを印刷するには9:

if ( board[i][j] == 9 ) printf("* ");
else printf("%d ",board[i][j]);
于 2012-11-08T01:26:45.080 に答える