1.进入菜单栏,出现提示;输入1进入游戏,输入0退出游戏,输入其他后重新输入;
do{
srand((unsigned int)time(NULL));
menu();
printf("请输入:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;//break只是跳出switch
case 0:
break;
default:
break;
}
} while (input);
2.输入1,进入游戏;根据棋盘的格式,建立两个合适大小的棋盘,一个是实际棋盘,一个是显示棋盘;
char qi[Rows][Cols] = { 0 };
char pan[Rows][Cols] = { 0 };
chushi(qi, Rows, Cols, '0');
chushi(pan, Rows, Cols, '*');
3.将两个棋盘初始化;一个全为零,一个全为星;初始化运用了调用函数,两层for循环,将他们初始化为传给函数的符号;
void chushi(char board[Rows][Cols], int row, int col, char x)
{
int i = 0;
for (i = 0;i < row;i++)
{
int j = 0;
for (j = 0;j < col;j++)
{
board[i][j] = x;
}
}
}
4.打印出显示出显示棋盘;打印函数主要是由两层for循环组成,第一层for循环时为了显示最上侧的列标;第二层for循环里面包着另一层for循环,先显示出每行的行标,再打印每一行,每行打印完后,换行,进入下一行的处理;
void print(char board[Rows][Cols], int row, int col)
{
int i = 0;
for (i = 0;i <= col;i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1;i <= row;i++)
{
printf("%d ", i);
int j = 0;
for (j = 1;j <= col;j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
}
5.显示函数执行完后,进入埋雷函数,这里主要是用到了随机数的产生和取模;设置i j变量,是他们成为雷的行列坐标,对产生的随机数对9取模,得到0-8的数,再加1,得到1-9的数;设置计数器,每埋完一个雷计数器减1,直到埋完所有的雷,退出循环;
void setmine(char board[Rows][Cols], int row, int col)
{
int i = 0;
int j = 0;
int cout = cunt;
while (cout)
{
i = rand() % 9 + 1;
j = rand() % 9 + 1;
if (board[i][j] != '1')
{
board[i][j] = '1';
}
cout--;
}
}
6.进入找雷函数,输入两个棋盘,设置次数变量,输入x y,如果输入的坐标对应实际棋盘里的字符是1,打印出实际棋盘,跳出while函数;否则,执行else语句,进入雷的次数的函数,雷的次数函数是返回周围八个空格字符1的和再减去8个字符0(字符1减去字符0得到的值为1,数字1加字符0得到的是字符1);得到的是x y坐标周围1的个数,即雷的个数,赋给显示棋盘此坐标的元素;打印出显示棋盘,次数加1;最后循环结束,判断次数的值是否为71(81个格-10个雷),如果是,则排出10个雷所有的位置,游戏胜利;否则游戏结束,被炸死;
int leicnt(char board[Rows][Cols], int x, int y)
{
return board[x - 1][y] + board[x - 1][y-1] + board[x][y-1] + board[x+1][y-1] + board[x+1][y] + board[x+1][y+1] + board[x][y+1] + board[x - 1][y+1] - 8 * '0';
}
void findmine(char board[Rows][Cols], char board1[Rows][Cols], int row, int col)
{
int x = 0;
int y = 0;
int cishu = 0;
while (cishu<=71)
{
scanf("%d %d", &x, &y);
if ('1' == board[x][y])
{
print(board, Row, Col);
break;
}
else
{
board1[x][y] = leicnt(board, x, y) + '0';
print(board1, Row, Col);
cishu++;
}
}
if (cishu == 71)
{
printf("游戏胜利\n");
}
else
{
printf("对不起,你被炸死了\n");
}
}
7.完整代码
函数声明文件:
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define Row 9
#define Col 9
#define Rows Row+2
#define Cols Col+2
#define cunt 10
void menu();
void game();
void chushi(char board[Rows][Cols], int row, int col, char x);
void print(char board[Rows][Cols], int row, int col);
void setmine(char board[Rows][Cols], int row, int col);
void findmine(char board[Rows][Cols], char board1[Rows][Cols], int row, int col);
int leicnt(char board[Rows][Cols], int x, int y);
函数实现文件:
#include"shengming.h"
void menu()
{
printf("**************\n");
printf("***1.enter****\n");
printf("***0.exit ****\n");
printf("**************\n");
}
void game()
{
char qi[rows][cols] = { 0 };
char pan[rows][cols] = { 0 };
chushi(qi, rows, cols, '0');
chushi(pan, rows, cols, '*');
/*print(qi, row, col);*/
print(pan, row, col);
setmine(qi, row, col);
findmine(qi, pan, row, col);
}
void chushi(char board[rows][cols], int row, int col, char x)
{
int i = 0;
for (i = 0;i < row;i++)
{
int j = 0;
for (j = 0;j < col;j++)
{
board[i][j] = x;
}
}
}
void print(char board[rows][cols], int row, int col)
{
int i = 0;
for (i = 0;i <= col;i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1;i <= row;i++)
{
printf("%d ", i);
int j = 0;
for (j = 1;j <= col;j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
}
void setmine(char board[rows][cols], int row, int col)
{
int i = 0;
int j = 0;
int cout = cunt;
while (cout)
{
i = rand() % 9 + 1;
j = rand() % 9 + 1;
if (board[i][j] != '1')
{
board[i][j] = '1';
}
cout--;
}
}
int leicnt(char board[rows][cols], int x, int y)
{
return board[x - 1][y] + board[x - 1][y-1] + board[x][y-1] + board[x+1][y-1] + board[x+1][y] + board[x+1][y+1] + board[x][y+1] + board[x - 1][y+1] - 8 * '0';
}
void findmine(char board[rows][cols], char board1[rows][cols], int row, int col)
{
int x = 0;
int y = 0;
int cishu = 0;
while (cishu<=71)
{
scanf("%d %d", &x, &y);
if ('1' == board[x][y])
{
print(board, row, col);
break;
}
else
{
board1[x][y] = leicnt(board, x, y) + '0';
print(board1, row, col);
cishu++;
}
}
if (cishu == 71)
{
printf("游戏胜利\n");
}
else
{
printf("对不起,你被炸死了\n");
}
}
函数调用文件:
#include"shengming.h"
int main()
{
int input = 0;
do{
srand((unsigned int)time(NULL));
menu();
printf("请输入:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;//break只是跳出switch
case 0:
break;
default:
break;
}
} while (input);
return 0;
}
8.运行结果: