文章创建一个九乘九的棋盘来实现扫雷游戏,用户通过输入一个二位坐标(横纵坐标的范围为1到9)来扫雷。
棋盘可显示此坐标周围8个坐标地雷的数目。
全部代码如下
//这一段代码是函数的声明与宏定义
#include <time.h>
#define ROWS 11
#define COLS 11
#define ROW 9
#define COL 9
void initboard(char board[ROWS][COLS], int rows, int cols,char ret);//声明初始化函数
void display(char board[ROWS][COLS], int rows, int cols);//声明打印棋盘的函数
void cunlei(char board[ROWS][COLS], int rows, int cols);//声明实现10个随机地雷的函数
void Findmine(char mine[ROWS][COLS],char show[ROWS][COLS], int row,int col);//声明寻找地雷的函数
//
void initboard(char board[ROWS][COLS], int rows, int cols,char ret){
int i;
int j;
for (i = 1; i < rows; i++){
for (j = 1; j < cols; j++){
board[i][j] = ret;
}
}
}
void display(char board[ROWS][COLS], int rows, int cols){
int i;
int j;
int c = 0;
printf("%d | ", c);
for (i = 1; i < 10; i++){
printf("%d ", i);
}
printf("\n");
printf("__|_");
for (i = 1; i < 10; i++){
printf("__");
}
printf("\n");
for (i = 1; i < rows-1; i++){
printf("%d ", i);
printf("| ");
for (j = 1; j < cols-1; j++){
printf("%c ",board[i][j]);
}
printf("\n");
}
printf("\n");
}
void cunlei(char board[ROWS][COLS], int rows, int cols){
int count = 10;
while (count){
int x = rand() % 9 + 1;
int y = rand() % 9 + 1;
if (board[x][y] == '0'){
board[x][y] = '1';
count = count - 1;
}
}
}
int sum_count(char mine[ROWS][COLS], int x, int y){
return mine[x - 1][y - 1] +
mine[x - 1][y] +
mine[x - 1][y + 1] +
mine[x][y - 1] +
mine[x][y + 1] +
mine[x + 1][y - 1] +
mine[x + 1][y] +
mine[x + 1][y + 1] - 8 * '0';
}
void Findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){
printf("请输入查雷的坐标:\n");
int count =0;
while (count<71){
int x;
int y;
int a;
scanf("%d %d", &x, &y);
if (x >= 1 && x <= row&&y >= 1 && y <= col){
if (mine[x][y] == '1'){
printf("抱歉,你被炸死了\n");
display(mine, ROWS, COLS);
break;
}
else{
a = sum_count(mine, x, y);
show[x][y] = a+'0';
display(show, ROWS, COLS);
count++;
}
}
else
{
printf("坐标输入错误,请重试:\n");
}
}
if (count == 71){
printf("恭喜你,已经成功排雷成功\n");
}
}
//此页面是实现扫雷步骤
#include "game.h"
void game(){
srand((unsigned int)time(NULL));
//实现简单的存雷操作
char mine[ROWS][COLS] = { 0 };
char show[ROWS][COLS] = { 0 };
//初始化一下棋盘
initboard(mine, ROWS, COLS,'0');
initboard(show, ROWS, COLS,'*');
cunlei(mine, ROWS, COLS);
//display(mine, ROWS, COLS);
//开始存10个地雷
display(show, ROWS, COLS);
Findmine(mine, show, ROW, COL);
}
void Menu(){
printf("***********************************************************\n");
printf("********************1.开始扫雷游戏*************************\n");
printf("********************0.退出扫雷游戏*************************\n");
printf("***********************************************************\n");
}
void test(){
int input;
do{
Menu();//显示游戏菜单
scanf("%d", &input);
if (input == 1){
printf("正在启动游戏......\n");
game();
}
} while (input);
}
int main(){
test();
}