扫雷的实现:
1.盘的打印
2.随机布雷
3.安全第地周围雷的个数
4.判断输赢
#ifndef __GAME_H__
#define __GAME_H__
#include<stdio.h>
#include<stdlib.h>
#define ROW 11
#define COL 11 //在这里可以改变棋盘的大小
void init_board(char arr1[ROW][COL], char arr2[ROW][COL]);
void display_board(char arr2[ROW][COL]);
void set_lei(char arr1[ROW][COL]);
int lei_shu(char arr1[ROW][COL], int x, int y);
void player_move(char arr1[ROW][COL], char arr2[ROW][COL]);
#endif
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
#include<stdio.h>
void init_board(char arr1[ROW][COL], char arr2[ROW][COL])
{
memset(arr1, ' ', ROW*COL*sizeof(arr1));
memset(arr2, '*', ROW*COL*sizeof(arr2));
}
void display_board(char arr2[ROW][COL]) //打印棋盘
{
int i = 0;
int j = 0;
printf(" ");
for (i = 1; i < COL - 1; i++)
printf("%2d", i);
printf("\n");
for (i = 1; i < ROW - 1; i++)
{
printf("%2d ", i);
for (j = 1; j < COL - 1; j++)
{
printf("%c ", arr2[i][j]);
}
printf("\n");
}
}
void set_lei(char arr1[ROW][COL]) //利用srand随机生成雷
{
int x = 0;
int y = 0;
int count = 10; //可以改变雷的个数
srand((unsigned int)time(NULL));
while (count)
{
x = rand() % (ROW - 2) + 1;
y = rand() % (COL - 2) + 1;
if (arr1[x][y] = '0')
{
arr1[x][y] = '1';
count--;
}
}
}
int lei_shu(char arr1[ROW][COL], int x, int y) //显示出安全地周围雷的个数
{
int count = 0;
if (arr1[x + 1][y + 1] == '1')
count++;
if (arr1[x + 1][y] == '1')
count++;
if (arr1[x + 1][y - 1] == '1')
count++;
if (arr1[x][y - 1] == '1')
count++;
if (arr1[x][y + 1] == '1')
count++;
if (arr1[x - 1][y - 1] == '1')
count++;
if (arr1[x - 1][y] == '1')
count++;
if (arr1[x - 1][y + 1] == '1')
count++;
return count;
}
以下就是扫雷中最重要的部分:如何进行扫雷
void player_move(char arr1[ROW][COL], char arr2[ROW][COL])
{
int tmp = 1;
int i = 0;
int j = 0;
int num = 0;
while (num != (ROW - 2)*(COL - 2) - 10)
{
printf(" ");
for (i = 1; i<COL - 1; i++)
{
printf("%2d", i);
}
printf("\n");
for (i = 1; i<ROW - 1; i++)
{
printf("%2d", i);
for (j = 1; j<COL - 1; j++)
{
printf("%2c", arr1[i][j]);
}
printf("\n");
}
printf("请输入下子位置:");
scanf("%d%d", &i, &j);
int x = 0;
int y = 0;
if ((i >= 1) && (j >= 1) && (i <= ROW - 2) && (j <= COL - 2))
{
while (tmp == 1)
{
if (arr1[i][j] == '1')
{
while (tmp == 1)
{
arr1[i][j] = '0';
y = rand() % 9;
x = rand() % 9;
if (arr1[x][y] = '0')
{
arr1[x][y] = '1';
t = 0;
}
}
}
else
{
tmp = 0;
}
}
if (arr1[i][j] == '1')
{
printf("失败\n");
return;
}
else
{
int ret = lei_shu(arr1, i, j);
arr2[i][j] = ret + '0';
num++;
display_board(arr2);
}
}
else printf("请重新输入:\n");
}
printf("恭喜你。\n");
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include"game.h"
void menu()
{
printf("#######################\n");
printf("##### 1.play #####\n");
printf("##### 0.exit #####\n");
printf("#######################\n");
}
void game()
{
char arr1[ROW][COL] = { 0 };
char arr2[ROW][COL] = { 0 };
init_board(arr1, arr2);
display_board(arr2);
set_lei(arr1);
player_move(arr1, arr2);
}
int main()
{
int input;
do
{
menu();
printf("请选择:\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("输入错误。\n");
}
} while (input);
system("pause");
return 0;
}