C语言简易扫雷游戏

时间:2022-11-27 22:39:22

本文实例为大家分享了C语言扫雷游戏的具体代码,供大家参考,具体内容如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_ROW 9
#define MAX_COL 9
#define MINE_C0UNT 10
void menu() {
 printf("************************\n");
 printf("*****   1.play  ****\n");
 printf("*****   0.exit  ****\n");
 printf("************************\n");
}
//1、先初始化两个地图,玩家看到的,地雷布局图。
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] = '*';
 }
 }
 //对于地雷布局图,用0表示没有地雷,用1表示雷。
 for (int row = 0; row < MAX_ROW; row++) {
 for (int col = 0; col < MAX_COL; col++) {
  mine_map[row][col] = '0';
 }
 }
 //假设设置十个地雷
 int n = MINE_C0UNT;
 while (n > 0) {
 int row = rand() % MAX_ROW;
 int col = rand() % MAX_COL;
 if (mine_map == '1') {
  continue;
 }
 mine_map[row][col] = '1';
 --n;
 }
}
void printmap(char map[MAX_ROW][MAX_COL]) {
 //不光能打印出地图,还能带坐标
//先打印第一行
 printf("  ");
 for (int i = 0; i < MAX_COL; i++) {
 printf("%d ", i);
 }
 printf("\n");
 //打印一个分割线
 for (int col = 0; col < MAX_COL - 2; ++col) {
 printf("---");
 }
 printf("\n");
 //在打印其他行
 for (int row = 0; row < MAX_ROW; row++) {
 printf(" %d| ", row);
 //打印本行的每一列
 for (int col = 0; col < MAX_COL; col++) {
  printf("%c ", map[row][col]);
 }
 printf("\n");
 }
}
void updateshowmap(int row,int col,char show_map[MAX_ROW][MAX_COL], char mine_map[MAX_ROW][MAX_COL]) {
 int count = 0;
 if (row - 1 >= 0 && col - 1 >= 0 && row - 1 < MAX_ROW && col - 1 < MAX_COL && mine_map[row - 1][col - 1] == '1') {
 count++;
 }
 if (row - 1 >= 0 && col >= 0 && row - 1 < MAX_ROW && col < MAX_COL && mine_map[row - 1][col] == '1') {
 count++;
 }
 if (row - 1 >= 0 && col + 1 >= 0 && row - 1 < MAX_ROW && col + 1 < MAX_COL && mine_map[row - 1][col + 1] == '1') {
 count++;
 }
 if (row >= 0 && col - 1 >= 0 && row < MAX_ROW && col - 1 < MAX_COL && mine_map[row][col - 1] == '1') {
 count++;
 }
 if (row >= 0 && col + 1 >= 0 && row < MAX_ROW && col + 1 < MAX_COL && mine_map[row][col + 1] == '1') {
 count++;
 }
 if (row + 1 >= 0 && col - 1 >= 0 && row + 1 < MAX_ROW && col - 1 < MAX_COL && mine_map[row + 1][col - 1] == '1') {
 count++;
 }
 if (row + 1 >= 0 && col + 1 >= 0 && row + 1 < MAX_ROW && col + 1 < MAX_COL && mine_map[row + 1][col + 1] == '1') {
 count++;
 }
 show_map[row][col] = '0' + count;
}
void game() {
 char show_map[MAX_ROW][MAX_COL];
 char mine_map[MAX_ROW][MAX_COL];
 Init(show_map,mine_map);
 while (1) {
 printmap(show_map);
 printf("请玩家输入一组坐标:");
 int row, col;
 int blank_count_already_show = 0;
 scanf("%d%d", &row, &col);
 system("cls");
 if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) {
  printf("您的输入不合法,请您重新输入!\n");
  continue;
 }
 if (show_map[row][col] != '*') {
  printf("您输入的位置已经被占用了,请您重新输入!\n");
  continue;
 }
 //判断玩家输入的坐标对应的是不是地雷,如果是地雷则游戏就结束了
 if (mine_map[row][col] == '1') {
  printf("游戏结束!\n");
  printmap(mine_map);
  break;
 }
 //判断游戏是否胜利,通过计算已翻开的非雷的格子的个数
 ++blank_count_already_show;
 if (blank_count_already_show == MAX_ROW * MAX_COL - MINE_C0UNT) {
  printf("游戏胜利 !\n");
  printmap(mine_map);
  break;
 }
 //统计当前位置中周围雷的个数
 updateshowmap(row, col, show_map, mine_map);
 }
}
int main() {
 srand((unsigned)time(0));
 int input = 0;
 while (1) {
 menu();
 printf("请选择:");
 scanf("%d", &input);
 if (input == 1) {
  printf("开始游戏!\n");
  game();
 }
 else if (input == 0) {
  printf("退出游戏!\n");
  break;
 }
 else {
  printf("输入错误,请重新输入!\n");
  continue;
 }
 }
 system("pause");
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_43514458/article/details/88973831