本文指的扫雷是简单模拟电脑中的扫雷游戏,但以我目前的水平,也就只能在黑框中实现
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