先创建2个.c和一个.h文件
着急用的先看代码
test.c
#include"game.h"
void menu() {
printf("*************************\n");
printf("* 1:>玩游戏 0:>退出 *\n");
printf("*************************\n");
}
void game() {
char mine[ROWS][COLS] = { 0 };
char shuw[ROWS][COLS] = { 0 };
init_board(mine, ROW, COL, '0');
init_board(shuw, ROW, COL, '*');
set_mine(mine, ROW, COL);
show_board(mine, ROW, COL);//
find_mine(mine, shuw, ROW, COL);
}
void test() {
int input = 0;
do {
menu();
printf("请输入1/0\n");
scanf("%d", &input);
switch (input) {
case 1:
printf("玩游戏\n");
game();
break;
case 0:
printf("退出\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
}
int main() {
srand((unsigned int)time(NULL));
test();
return 0;
}
game.c
#include"game.h"
void init_board(char mine[ROWS][COLS], int rows, int cols, char set) {
int i = 1;
for (; i <=rows; i++) {
int j = 1;
for (j=1; j <=cols; j++) {
mine[i][j] = set;
}
}
}
void show_board(char mine[ROWS][COLS], int row, int col) {
int i = 1;
int x = 1;
for(x = 0; x <=col; x++)
printf("%d ", x);
printf("\n");
for (; i <= row; i++) {
int j = 1;
printf("%d ", i);
for (; j <= col; j++) {
printf("%c ", mine[i][j]);
}
printf("\n");
}
}
void set_mine(char mine[ROWS][COLS], int row, int col) {
int count = EASY_COUNT;
int x = 0,y = 0;
while (count) {
x = rand() % row + 1;
y = rand() % row + 1;
if (mine[x][y] == '0') {
mine[x][y] = '1';
count--;
}
}
}
char get_mine_count(char mine[ROWS][COLS], int row, int col) {
return mine[row - 1][col - 1] + mine[row - 1][col] + mine[row - 1][col + 1] + mine[row][col - 1] + mine[row][col + 1] + mine[row + 1][col - 1] +mine[row + 1][col] + mine[row + 1][col + 1]- (8 * '0');
}
void find_mine(char mine[ROWS][COLS], char shuw[ROWS][COLS], int row, int col) {
int x, y;
int win = 0;
while (win= 1 && x <= row && y >= 1 && y <= col) {
if (mine[x][y] == '1') {
printf("被炸死了\n");
show_board(mine, ROW, COL);
break;
}
else {
int count = get_mine_count(mine,x,y);
shuw[x][y] = count+'0';
show_board(shuw, ROW, COL);
win++;
}
}
else
printf("输入错误\n");
}
if (win == row * col - EASY_COUNT) {
printf("恭喜你排雷成功\n");
}
}
game.h
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 80
void init_board(char mine[ROWS][COLS], int rows, int cols,char set);
void show_board(char mine[ROWS][COLS], int row, int col);
void set_mine(char mine[ROWS][COLS], int row, int col);
void find_mine(char mine[ROWS][COLS], char shuw[ROWS][COLS], int row, int col);
老规矩先写框架
#include"game.h"
void menu() {
printf("*************************\n");
printf("* 1:>玩游戏 0:>退出 *\n");
printf("*************************\n");
}
void game() {
}
void test() {
int input = 0;
do {
menu();
printf("请输入1/0\n");
scanf("%d", &input);
switch (input) {
case 1:
printf("玩游戏\n");
game();
break;
case 0:
printf("退出\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
}
int main() {
srand((unsigned int)time(NULL));
test();
return 0;
}
游戏在game函数里实现
void game() {
char mine[ROWS][COLS] = { 0 };
char shuw[ROWS][COLS] = { 0 };
}
先建两个数组,如果想玩9*9的就建(9+2)*(9+2)的
为什么建2个,因为都放在一个棋盘太乱的
就是前端和后端一样;只要把前端的给玩家看可以了
写一个初始化函数,我们把mine的棋盘初始化为‘0’
把shuw的棋盘初始化为‘*’
void init_board(char mine[ROWS][COLS], int rows, int cols, char set) {
int i = 1;
for (; i <=rows; i++) {
int j = 1;
for (j=1; j <=cols; j++) {
mine[i][j] = set;
}
}
}
现在game函数
void game() {
char mine[ROWS][COLS] = { 0 };
char shuw[ROWS][COLS] = { 0 };
init_board(mine, ROW, COL, '0');
init_board(shuw, ROW, COL, '*');
}
然后就是往mine的棋盘里放雷,1表示雷0表示没有雷
写个放雷的函数
void set_mine(char mine[ROWS][COLS], int row, int col) {
int count = EASY_COUNT;
int x = 0,y = 0;
while (count) {
x = rand() % row + 1;
y = rand() % row + 1;
if (mine[x][y] == '0') {
mine[x][y] = '1';
count--;
}
}
}
有与我把#define EASY_COUNT 80
把雷的数设置80所以有80个雷
现在的game函数
void game() {
char mine[ROWS][COLS] = { 0 };
char shuw[ROWS][COLS] = { 0 };
init_board(mine, ROW, COL, '0');
init_board(shuw, ROW, COL, '*');
set_mine(mine, ROW, COL);
}
接下来打印一下,写个打印函数
void show_board(char mine[ROWS][COLS], int row, int col) {
int i = 1;
int x = 1;
for(x = 0; x <=col; x++)
printf("%d ", x);
printf("\n");
for (; i <= row; i++) {
int j = 1;
printf("%d ", i);
for (; j <= col; j++) {
printf("%c ", mine[i][j]);
}
printf("\n");
}
}
然后就是核心,输入,判断是不是雷,是雷就炸死了,不是把周围的雷数打印出来
char get_mine_count(char mine[ROWS][COLS], int row, int col) {
return mine[row - 1][col - 1] + mine[row - 1][col] + mine[row - 1][col + 1] + mine[row][col - 1] + mine[row][col + 1] + mine[row + 1][col - 1] +mine[row + 1][col] + mine[row + 1][col + 1]- (8 * '0');
}
void find_mine(char mine[ROWS][COLS], char shuw[ROWS][COLS], int row, int col) {
int x, y;
int win = 0;
while (win= 1 && x <= row && y >= 1 && y <= col) {
if (mine[x][y] == '1') {
printf("被炸死了\n");
show_board(mine, ROW, COL);
break;
}
else {
int count = get_mine_count(mine,x,y);
shuw[x][y] = count+'0';
show_board(shuw, ROW, COL);
win++;
}
}
else
printf("输入错误\n");
}
if (win == row * col - EASY_COUNT) {
printf("恭喜你排雷成功\n");
}
}