一、实现的功能
(1)棋盘可改变大小(利用宏实现)
(2)雷的随机生成,可改变大小(利用宏实现)
(3)棋盘可实现展开,展示周围雷的个数(递归实现)
(4)第一次踩雷不死,改变雷的位置
二、效果截图
菜单:
游戏过程:
成功:
失败(小棋盘容易失败):
三、代码参考
注意点:
有两个数组分别代表给玩家展示的棋盘和雷盘(放雷的棋盘)
当失败是可以展示雷盘给玩家!
棋盘定义时要多定义两行两列,因为在后期扫雷的时候,要判断一个坐标点的周围8个坐标的雷数,当坐标为(1,1)的时候也可以正常扫雷,如图:
也就是说我们实际用的棋盘大小是内部的
代码参考:
多文件编写,运行环境是VS2013
注释很详细。可以相互学习,如果有错误的地方请提出来。
main.c
#include "sweep.h"
void Menu(){
printf("********************************\n");
printf(" 1.开始游戏 2.结束游戏 \n");
printf(" 3.游戏帮助 \n");
printf("********************************\n");
}
int main(){
int select = 0;
do{
Menu();
printf("请选择:\n");
scanf("%d", &select);
switch (select){
case 1:
Game();
break;
case 2:
break;
case 3:
printf("(1)实现了棋盘改变大小!雷的个数\n(2)第一次下棋不炸死\n(3)棋盘展开\n");
break;
default:
printf("没有这个选项!\n");
break;
}
} while (select != 2);
system("pause");
return 0;
}
sweep.h
#ifndef _SWEEP_H_
#define ROW 10
#define COL 10
#define COUNT 5 //雷的个数
#include <stdio.h>
#include <Windows.h>
#include <time.h>
#pragma warning(disable:4996)
void Game();
//埋雷函数
void MineBoard(char board[][COL], int row, int col);
//扫雷,扩展棋盘
void SweepBoard(char board[][COL], char board0[][COL], int x, int y);
//获得雷的数量
char GetMines(char board[][COL], int x, int y);
//转移雷的地放,只有第一次踩到雷采用到
void ChangeBoard(char board[][COL], int x, int y);
//展示棋盘
void ShowBoard(char board[][COL], int x, int y);
//判断是否踩到雷
int Fail(char board[][COL], int x, int y);
//扫描棋盘,判断是否雷已经扫描完毕
int Win(char board[][COL],int row, int col);
#endif
sweep.c
#include "sweep.h"
void Game(){
//定义一个棋盘(雷盘)
char board[ROW][COL] = {
'0'};
//定义一个棋盘(玩家盘)
char board0[ROW][COL] = {
'0'};
int x = 0;
int y = 0;
int result = 0;//结果是0,表示玩家没猜踩到雷,否则踩到雷
//初始化棋盘(这个棋盘是玩家棋盘)
int first = 1; //判断是否为第一次下棋
memset(board0, '*', sizeof(board0));
//千万要初始化雷盘,而且必须全盘初始化
memset(board, '0', sizeof(board));
//埋雷
MineBoard(board, ROW - 2, COL - 2);
while (1){
//展示棋盘
ShowBoard(board0, ROW - 2, COL -