//文字介绍在后半部分前半部分为代码
#include<stdio.h>
void menu() {
printf("\n");
printf("*************************\n");
printf("*************************\n");
printf("********扫******雷*******\n");
printf("*************************\n");
printf("********1.开始游戏*******\n");
printf("*************************\n");
printf("********2.退出游戏*******\n");
printf("*************************\n");
printf("*************************\n");
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include "zhege.h" //自己做的函数头文件
void game() {
char a[HANGS][LIES];
char b[HANGS][LIES];
//初始化棋盘
Init(a, HANGS, LIES, '0');//0
Init(b, HANGS, LIES, '*');//*
//打印棋盘
Display(b, HANG, LIE);
//布置雷
Plant(a, HANG, LIE);
//检查雷
check(a, b, HANG, LIE);
}
int main() {
srand((unsigned int)time(NULL));
int n;
do
{
menu();
scanf("%d", &n);
system("cls");
switch (n)
{
case 1:
game(); break;
case 2:
printf("游戏结束!\n感谢您的游玩\n"); break;
default:
printf("输出错误\n"); break;
}
} while (n != 2);
return 0;
}
#pragma once
#include<stdlib.h>
#include<time.h>
#define HANG 9
#define LIE 9
#define HANGS HANG+2
#define LIES LIE+2
#define difficulty 10
void Init(char arr[HANG][LIE], int hangs, int lies, char set);//加s因为不能一样
void Display(b, hang, lie);
void menu();
void Plant(char arr[HANGS][LIES], int hang, int lie);
void check(char a[HANG][LIE], char b[HANG][LIE], int hang, int lie);
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include "zhege.h"
#include <Windows.h>
void Init(char arr[HANG][LIE],int hangs,int lies,char set) {//初始化棋盘
int i,j;
for (i = 0; i < hangs; i++) {
for (j = 0; j < lies; j++) {
arr[i] [j] = set;
}
}
}
void Display(char arr[HANG][LIE], int hang, int lie) {//打印棋盘
int i, j;
printf("* * * * * * * * * * \n");
for(i=0;i<=hang;i++){
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= hang; i++) {
printf("%d ", i);
for (j = 1; j <= lie; j++) {
printf("%c ", arr[i][j]);
}
printf("\n");
}
printf("* * * * * * * * * * \n");
}
void Plant(char arr[HANGS][LIES],int hang,int lie) {//布置雷
int count = difficulty;//雷总量
while (count) {//设置雷坐标
int x = rand() % hang + 1;
int y = rand() % lie + 1;
if (arr[x][y] == '0') {//判断是否已经有了雷
arr[x][y] = '1';
count--;//减少一颗雷数量(因为放置了一颗)
}
}
}
static int get(char b[HANG][LIE],int x,int y) {//用来辅助展示周边雷的数字
return b[x - 1][y] + b[x - 1][y - 1] +
b[x - 1][y + 1] +
b[x][y - 1] +
b[x][y + 1] + b[x + 1][y - 0] +
b[x + 1][y] + b[x + 1][y + 1] - 8 * '0';
}
void check(char a[HANG][LIE], char b[HANG][LIE], int hang, int lie) {//排查雷
int x = 0;
int y = 0;
int win = 0;
while (win < hang * lie - difficulty) {
printf("请输入要排查的坐标:\n");
scanf_s("%d %d", &x, &y);
system("cls");
if (x >= 1 && x <= hang && y >= 1 && y <= lie) {
if (a[x][y] == '1') {
printf("你被炸死了"); Display(b, hang, lie); system("pause"); system("cls"); break;
}
else {
int n = get(a, x, y);
b[x][y] = n + '0';
Display(b, HANG, LIE);//展示周围几个雷
win++;
}
}
else
{
printf("非法坐标,重新输入");
}
if (win == hang * lie - difficulty) {
printf("游戏胜利!!!");
Display(b, hang, lie);
}
}
}
创建一个工程 包含四个文件 其中三个.c文件 一个.h头文件
源.c----main函数在这里
zhege.h-----编写的头文件 内部包含函数的生命
menu.c ---- 打印菜单
game.c-----存放各种函数
大致思路——————
1.数组存放数据
2.数组存放%c类型 存放字符便于实现扫雷过程
3.需要两个数组 一个展示外观 一个更改内部数据存放雷
4.编写函数 初始化、展示、存放、查找
5.实现代码
6.调试环节