Некоторые шахты печатают как 0 для расположения сетки тральщика - PullRequest
0 голосов
/ 19 февраля 2020

Я начинающий C программист, который должен создать начальную сетку для игры тральщика, где я должен создать 2 сетки: первая сетка печатает точки и звездочки (мины), сгенерированные случайной функцией, которая выбирает число между 0 и 1 для каждой ячейки, а вторая сетка сохраняет звездочки одинаковыми, но заменяет точки числом, указывающим, сколько мин касается этой ячейки.

Сейчас у меня есть условия, чтобы проверить для всех 8 клеток вокруг клетки, в которой находится мина, подсчитать количество мин, которые ее окружают. Однако, когда я печатаю, не все мины печатаются в виде звездочек, а некоторые печатаются в виде цифр, и я не уверен почему.

У меня есть условия для печати второй сетки, как будто ячейка содержит мою, она напечатает звездочку, а для всего остального отобразит число, подсчитанное счетчиком, который я установил ранее.

Мои счетчики правильны, но это только некоторые из ячеек, которые есть мины в них, которые не печатают звездочки. У меня также возникают проблемы с правильной печатью строк da sh в соответствии с длиной матрицы, и я не уверен, как это исправить.

Любая помощь, которую я могу получить, будет принята с благодарностью.

Пример того, что происходит здесь: https://i.stack.imgur.com/NnKyE.jpg

А это мой код:

#include <stdio.h>
#include "lab6.h" //THIS REPLACES <stdlib.h> AND USES A FUNCTION CALLED rand() TO GENERATE # BETWEEN 0-1

#define MAX 100
int m, n; //m rows, n columns
double p;

int main(void) {    
    //GET INPUT
    printf("Enter the number of rows: ");
    scanf("%d", &m);

    printf("Enter the number of columns: ");
    scanf("%d", &n);

    do {
    printf("Enter the probability p value: ");
    scanf("%lf", &p);        
    }
    while(p>1 || p<0);

    //PRINT DASHED LINE
    char dash[MAX];
    int k;
    for (k=0; k<m; k++) {
     dash[k] = '-';
     printf("%c", dash[k]);
    }
    printf("\n");

    //PRINT ARRAY W/DOTS
    char array[MAX][MAX];
    int i, j;
    for (i=0; i<m; i++) {
     for (j=0; j<n; j++) {
         double t=rand();
         if (t<p) {
             array[i][j] = '*';
         }
         else {
             array[i][j] = '.';
         }
         printf("%c ", array[i][j]);
     }
    printf("\n");
    }

    //PRINT DASHED LINE
    for (k=0; k<m; k++) {
     dash[k] = '-';
     printf("%c", dash[k]);
    }
    printf("\n");

    //PRINT ARRAY W/NUMBERS
    int num[MAX][MAX];
    for (i=0; i<m; i++) {
     for (j=0; j<n; j++) {
         if (array[i][j] == '*') {
             num[i-1][j]++; //1 row down, same column
             num[i][j-1]++; //1 column left, same row
             num[i-1][j-1]++; //1 row down, 1 column left
             num[i+1][j]++; //1 row up, same column
             num[i][j+1]++; //1 column right, same row
             num[i+1][j+1]++; //1 row up, 1 column right
             num[i+1][j-1]++; //1 row up, 1 column down
             num[i-1][j+1]++; //1 row down, 1 column right
             num[i][j] = -1; //mine
         }
     }
    }

    for (i=0; i<m; i++) {
     for (j=0; j<n; j++) {
         if (num[i][j] == -1) {
             printf("* ");
         }
         else {
             printf("%d ", num[i][j]);
         }
     }
    printf("\n");
    }

    //PRINT DASHED LINE
    for (k=0; k<=m; k++) {
     dash[k] = '-';
     printf("%c", dash[k]);
    }
    printf("\n");

    return 0;
}
...