Для начала инициализируем 3 целых числа N, M и K, что соответственно означает число строк, столбцов и мин на поле. Инициализируем несколько массивов размерности N на M. Bool массив характеризует наличие или отсутствие мины на клетке, а второй показывает число мин с которыми эта клетка граничит, естественно логично что она несет значение unsigned int.
bool matr [N][M]; unsigned int nummatr [N][M]; short unsigned int mas[N][M]; for (int i =0 ;i<> { for (int j=0;j<> matr[i][j] = 0; nummatr[i][j] = 0; mas[i][j] =0; } } while(k){ int n = rand()%N; int m = rand()%M; if (!matr[n][m]) { matr [n][m] = true; int iF = max (0,n-1); int iL = min (n+1,N-1); int jF = max (0,m-1); int jL = min (m+1,M-1); for (int i = iF;i <> for (int j = jF;j <> nummatr[i][j]++; k--; } }
как видно для начала все массивы заполняются 0
далее пока есть возможность бросить мину на поле мы ее бросаем.
отсекаем нужное нам множество клеток где будут увеличены счетчики. В итоге мы получили игровое поле.
теперь осталось только начать игру
игра заключается в том что человек выбирает клетку и если на ней нет бомбы то открывается кусок карты до клетки пограничной с бомбой или до клетки с бомбой. в итоге функция поиска явно должна быть рекурсивной.
вот что получилось
void recsearch(short unsigned int *mas,bool *matr,unsigned int *nummatr,int N,int M, int i,int j){ if ((nummatr[i*N+j]==0)&&(mas[i*N+j]==0)){ //cout<< mas[i*N+j] = 1; if (i>0) recsearch(mas,matr,nummatr,N,M,i-1,j); if (i recsearch(mas,matr,nummatr,N,M,i+1,j); if (j recsearch(mas,matr,nummatr,N,M,i,j+1); if(j>0) recsearch(mas,matr,nummatr,N,M,i,j-1); } if ((nummatr[i*N+j]>0)&&(mas[i*N+j]==0)){ mas[i*N+j] = 1; }}
далее добавляем в main такой участок
int i,j; while (k>0){ cin>>i>>j; if (matr[i][j]){ cout<<"boom"< return 0; } recsearch (mas[0],matr[0],nummatr[0],N,M,i,j); for (i =0;i<> for (j=0;j<> if (mas[i][j]){ cout<<<'> } else cout<<"- "; } cout< } }
Таким образом получаем консольное приложение которое моделирует игровое поле а также функцию поиска бомбы. Осталось только написать пользовательский интерфейс. Для этого будет использоваться Qt но об этом уже в другой статье.






