本文指的扫雷是简单模拟电脑中的扫雷游戏,但以我目前的水平,也就只能在黑框中实现
test.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
|
#include<stdio.h> #include<stdlib.h> #include<time.h> #include "game2.h" void menu() { printf ( "********* welcome ********\n" ); printf ( "**********1.play**********\n" ); printf ( "**********0.exit**********\n" ); } enum Option { EXIT, PLAY }; void game() { int x = 0; int y = 0; int i = 0; int win = 0; char mine[ROWS + 2][COLS + 2] = { 0 }; char show[ROWS + 2][ROWS + 2] = { 0 }; init_board(mine, ROWS + 2, COLS + 2, '0' ); init_board(show, ROWS + 2, COLS + 2, '*' ); //display(mine, ROWS + 2, COLS + 2);#define _CRT_SECURE_NO_WARNINGS //display(show, ROWS + 2, COLS + 2); mine_set(mine, ROWS + 2, COLS + 2); display(mine, ROWS + 2, COLS + 2); while (win<ROWS*COLS - DEFAULT_COUNT) { for (i = 0; i <= win; i++) { printf ( "请输入坐标:>" ); scanf ( "%d%d" , &x, &y); //合法性判断 if ((x>0) && (x <= ROWS) && (y > 0) && (y <= COLS)) { if ((i == 0) && (mine[x][y] == '1' )) { (mine[x][y] = '0' ) ; } if (mine[x][y] == '1' ) { printf ( "很遗憾,你被炸死了\n" ); break ; } else { int count = 0; win++; count = get_mine_num(mine, x, y); show[x][y] = count + '0' ; display(show, ROWS + 2, COLS + 2); } } else { printf ( "输入错误请重新输入\n" ); } } if (win >= ROWS*COLS - DEFAULT_COUNT) { printf ( "恭喜你,扫雷成功\n" ); } } } int main() { int input = 0; srand ((uint_t) time (NULL)); do { menu(); printf ( "请选择:>" ); scanf ( "%d" , &input); switch (input) { case PLAY: game(); break ; case EXIT: break ; default : printf ( "输入错误,请重新输入\n" ); break ; } } while (input); system ( "pause\n" ); return 0; } |
game.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
|
#define _CRT_SECURE_NO_WARNINGS 1 #include "game2.h" #include<stdlib.h> #include<stdio.h> #include<string.h> void init_board( char arr[ROWS + 2][COLS + 2], int row, int col, char ch) { memset (arr, ch, sizeof ( char ) * row * col); } void display( char arr[ROWS + 2][COLS + 2], int row, int col) { int i = 0; int j = 0; printf ( " " ); for (i = 0; i < col - 2; i++) { printf ( "%d " , i + 1); } printf ( "\n" ); for (i = 0; i < row - 2; i++) { printf ( "%2d " , i + 1); for (j = 0; j < col - 2; j++) { printf ( "%c " , arr[i + 1][j + 1]); } printf ( "\n" ); } } void mine_set( char arr[ROWS + 2][COLS + 2], int row, int col) { int x = 0; int y = 0; int count = DEFAULT_COUNT; while (count) { x = rand () % 10 + 1; y = rand () % 10 + 1; if (arr[x][y] != '1' ) { arr[x][y] = '1' ; count--; } } } int get_mine_num( char arr[ROWS + 2][COLS + 2], int x, int y) { return (arr[x][y - 1] - '0' ) + (arr[x - 1][y - 1]- '0' )- + (arr[x - 1][y]- '0' ) + (arr[x - 1][y + 1]- '0' ) + (arr[x][y + 1]- '0' ) + (arr[x + 1][y + 1]- '0' ) + (arr[x + 1][y]- '0' ) + (arr[x + 1][y - 1]- '0' ); //返回周围雷的个数 } |
game.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#ifndef __GAME_H__ #define __GAME_H__ #define ROWS 10 #define COLS 10 #define DEFAULT_COUNT 20 typedef unsigned int uint_t; //类型重命名 #include<string.h> #include<stdio.h> #include<time.h> #include<stdlib.h> void init_board( char arr[ROWS + 2][COLS + 2], int row, int col, char ch); //初始化 void display( char arr[ROWS + 2][COLS + 2], int row, int col); void mine_set( char arr[ROWS + 2][COLS + 2], int row, int col); //放雷 int get_mine_num( char arr[ROWS + 2][COLS + 2], int row, int col); //统计坐标周围雷的个数 #endif //__GAME_H__ |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/ChaseRaod/article/details/54344985