#include<stdio.h>
#include<stdlib.h>
#define MAX_ROW 9
#define MAX_COL 9
#define MINE_COUNT 10
void Init(char show_map[MAX_ROW][MAX_COL], char mine_map[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
show_map[row][col] = ‘’;
}
}
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
mine_map[row][col] = 0;
}
}
int count = MINE_COUNT;
while (count > 0) {
int row = rand() % MAX_ROW;
int col = rand() % MAX_ROW;
if (mine_map[row][col] == ‘1’) {
continue;
}
mine_map[row][col] = ‘1’;
--count;
}
}
void Printmap(char map[MAX_ROW][MAX_COL]) {
printf(" |");
for (int row = 0; row < MAX_ROW; row++) {
printf("%d “, row);
}
printf(”\n");
printf("------------------------");
printf("\n");
for (int col = 0; col < MAX_COL; col++) {
printf(" %d |",col);
for (int row = 0; row < MAX_ROW; row++) {
printf("%c “, map[row][col]);
}
printf(”\n");
}
}
void Scanf(char show_map[MAX_ROW][MAX_COL],int row, int* col) {
while (1) {
printf(“请输入要翻开的坐标:\n”);
scanf_s("%d,%d", row, col);
if (*row < 0 || *row >= MAX_ROW || *col < 0 || *col >= MAX_COL) {
printf(“请重新输入:\n”);
continue;
}
if (show_map[*row][col] != '’) {
printf(“您的输入有误,请重新输入!\n”);
continue;
}
break;
}
}
void Updatemap(char show_map[MAX_ROW][MAX_COL],char mine_map[MAX_ROW][MAX_COL],int row,int col) {
int mine_count = 0;
if (row-1>=0 && col-1>=0 && mine_map[row - 1][col - 1] == ‘1’) {
++mine_count;
}
if (row - 1 >= 0 && mine_map[row - 1][col] == ‘1’) {
++mine_count;
}
if (row - 1 >= 0 && col + 1 <MAX_COL && mine_map[row - 1][col + 1] == ‘1’) {
++mine_count;
}
if (col - 1 >= 0 && mine_map[row][col - 1] == ‘1’) {
++mine_count;
}
if (col+1<MAX_COL && mine_map[row - 1][col + 1] == ‘1’) {
++mine_count;
}
if (row+1<MAX_ROW && col-1>=0 && mine_map[row + 1][col - 1] == ‘1’) {
++mine_count;
}
if (row + 1 < MAX_ROW && mine_map[row + 1][col] == ‘1’) {
++mine_count;
}
if (row + 1 < MAX_ROW && col + 1 <MAX_COL && mine_map[row + 1][col + 1] == ‘1’) {
++mine_count;
}
show_map[row][col] = mine_count + ‘0’;
}
void Game() {
int row = 0;
int col = 0;
char show_map[MAX_ROW][MAX_COL];
char mine_map[MAX_ROW][MAX_COL];
Init(show_map, mine_map);
int safe_count = 0;
//Printmap(mine_map);
while (1) {
Printmap(show_map);
Scanf(show_map, &row, &col);
if (mine_map[row][col] == ‘1’) {
printf(“GAMEOVER!\n”);
break;
}
++safe_count;
if (safe_count == MAX_ROW * MAX_COL - MINE_COUNT) {
printf(“GAME WIN!\n”);
break;
}
system(“cls”);
Updatemap(show_map, mine_map, row, col);
}
}
int main() {
Game();
system(“pause”);
return 0;
}
05-16