目录
主函数111.c
#define _CRT_SECURE_NO_WARNINGS
//扫雷
#include "minesweeper.h"
void meau()
{
printf("--------------------\n");
printf("--------1.play------\n");
printf("--------0.退出------\n");
}
void game()
{
char bright[HANS][LIES] = { 0 };//建立 界面
char dark [HANS][LIES] = { 0 };//建立 布雷
fro_mine(dark,HANS,LIES,'0');//dark初始化为字符0
fro_mine(bright, HANS, LIES,'*');//bright初始化为*
print_bright(bright,HAN,LIE);//打印棋盘
placemine(dark, HAN, LIE);//布雷
// print_dark(dark, HAN, LIE);//打印雷盘
ifmine(dark, bright, HAN, LIE);//输入判断是否是雷
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
meau();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}while (input);
return 0;
}
头文件minesweeper.h
#pragma once
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
#define HANS HAN+2
#define LIES LIE+2
#define HAN 3
#define LIE 3
#define mine 2
//全部初始化为想要的字符
void fro_mine(char board[HANS][LIES], int han, int lie, char aim);
//打印棋盘
void print_bright(char bright[HANS][LIES], int han, int lie);
//打印雷盘
void print_dark(char dark[HANS][LIES], int han, int lie);
//布雷
void placemine(char dark[HANS][LIES], int han, int lie);
//输入判断是否是雷
void ifmine(char dark[HANS][LIES], char bright[HANS][LIES], int han, int lie);
游戏函数minesweeper.h
#define _CRT_SECURE_NO_WARNINGS
#include "minesweeper.h"
void fro_mine(char board[HANS][LIES],int han, int lie,char aim) //全部转化到aim
{
int x = 0;
for (x = 0; x < han; x++)
{
int y = 0;
for (y=0 ;y<lie ;y++)
{
board[x][y] =aim;
}
}
}
//打印棋盘
void print_bright(char bright[HANS][LIES], int han, int lie)
{
int x = 0;
printf("↘");
for (x = 1; x <=lie; x++)
{
printf(" %d", x);
}
printf("\n");
for (x = 1; x <= han; x++)
{
printf("%d|", x);
int y = 0;
for (y = 1; y <= lie; y++)
{
printf("%c", bright[x][y]);
if (y < lie)
{
printf("|");
}
}
printf("\n");
}
}
//打印雷盘
void print_dark(char dark[HANS][LIES], int han, int lie)
{
int x = 0;
printf("↘");
for (x = 1; x <= lie; x++)
{
printf(" %d", x);
}
printf("\n");
for (x = 1; x <=han; x++)
{
printf("%d|", x);
int y = 0;
for (y = 1; y <= lie; y++)
{
printf("%c",dark[x][y]);
if (y < lie)
{
printf("|");
}
}
printf("\n");
}
}
//布雷
void placemine(char dark[HANS][LIES], int han, int lie)
{
int x = 0; int y = 0;
int onmine = mine;
while(onmine)
{
x = rand() % han + 1;
y = rand() % lie + 1;
if (dark[x][y] == '0')
{
dark[x][y] = '1';
onmine--;
}
}
}
//判断有多少个雷
int calcumine(char dark[HANS][LIES], int x, int y)
{
int a = 0;
int b = 0;
int sum = 0;
for (a = -1; a <= 1; a++)
{
for (b = -1; b <= 1; b++)
{
sum += dark[x + a][y + b];
}
}
int result = sum - 8 * '0';
return result;
}
//输入判断是否是雷
void ifmine(char dark[HANS][LIES], char bright[HANS][LIES], int han, int lie)
{
int x = 0;
int y = 0;
int rest = han * lie - mine;
while (rest>0)
{
printf("请输入坐标");
scanf("%d %d", &x, &y);
if (x >= 1 && x <= han && y >= 1 && y <= lie)
{
if (bright[x][y] != '*')
{
printf("该坐标已被排查过\n");
continue;
}
if (dark[x][y] == '1') //是雷
{
printf("炸弹爆炸,游戏失败\n");
print_dark(dark, HAN, LIE);//打印雷盘
break;
}
else //不是雷 在bright打印有多少雷
{
int num = calcumine(dark, x, y);
bright[x][y] = num;
print_bright(bright, HAN, LIE);//打印棋盘
rest--;
}
}
else
printf("坐标非法\n");
}
if (rest == 0)
{
printf("恭喜您赢得游戏的胜利\n");
}
}
总结:
1.未实现标记功能 2.未实现空白铺开