扫雷程序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define row 9
#define col 9
#define mineNum 10
int Menu() {
printf("=========================\n");
printf("欢迎来到扫雷!\n");
printf("1.开始游戏!\n");
printf("2.退出游戏!\n");
printf("=========================\n");
int choice = 0;
scanf("%d", &choice);
return choice;
}
void Init(char showMap[row][col], char mineMap[row][col]) {
memset(showMap, '*', row * col);
memset(mineMap, '0', row * col);
srand((unsigned int)time(NULL));
int count = mineNum;
while (count > 0) {
int r = rand() % row;
int c = rand() % col;
if (mineMap[r][c] == '1') {
continue;
}
mineMap[r][c] = '1';
count--;
}
}
void PrintF(char showMap[row][col]) {
int i, j;
printf(" |");
for (int i = 0; i < col; i++) {
printf("%d ", i);
}
printf("\n");
printf("--+------------------\n");
for (i = 0; i < row; i++) {
printf("%d |", i);
for (j = 0; j < col; j++) {
printf("%c ", showMap[i][j]);
}
printf("\n");
}
printf("---------------------\n");
}
void Input(char showMap[row][col], int* r, int* c) {
while (1) {
printf("请输入坐标(行 列):");
scanf("%d %d", r, c);
if (*r < 0 || *r >= row || *c < 0 || *c >= col) {
printf("输入有误,请重新输入!\n");
continue;
}
if (showMap[*r][*c] != '*') {
printf("这个位置已经翻开了!");
continue;
}
break;
}
}
int CheckMine(char mineMap[row][col], int r, int c) {
if (mineMap[r][c] == '1') {
return 1;
}
return 0;
}
int CheckBlank(int* sum) {
*sum += 1;
if (*sum == 71) {
return 1;
}
return 0;
}
void UpdateMap(char mineMap[row][col], char showMap[row][col], int r, int c) {
int count = 0;
for (int i = r - 1; i <= r + 1; i++) {
for (int j = c - 1; j <= c + 1; j++) {
if (i < 0 || i >= r || c < 0 || c >= col) {
continue;
}
if (mineMap[i][j] == '1') {
count += 1;
}
}
}
showMap[r][c] = count + '0';
}
void Game() {
char showMap[row][col] = { 0 };
char mineMap[row][col] = { 0 };
int sum = 0;
Init(showMap, mineMap);
while (1) {
PrintF(showMap);
int r = 0;
int c = 0;
Input(showMap, &r, &c);
if (CheckMine(mineMap, r, c)) {
printf("游戏失败!\n");
PrintF(mineMap);
break;
}
if (CheckBlank(&sum)) {
printf("游戏胜利!\n");
break;
}
UpdateMap(mineMap, showMap, r, c);
}
}
int main() {
int choice = Menu();
if (choice == 1) {
Game();
}
else if (choice == 2) {
printf("byebye!\n");
}
else {
printf("输入有误!\n");
}
return 0;
}