0
点赞
收藏
分享

微信扫一扫

用C语言简单实现扫雷游戏

代码:

①mine.h

#define _CRT_SECURE_NO_WARNINGS 1
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define number 80
void initboard(char board[ROWS][COLS], int rows, int cols, char set);
void printboard(char board[ROWS][COLS],int row,int col);
void setmine(char board[ROWS][COLS], int row, int col);
void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

②main.c

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"mine.h"
void game() {
//布置雷的信息
char mine[ROWS][COLS] = { ' ' };
//排雷的信息
char show[ROWS][COLS] = { ' ' };
//初始化雷盘
initboard( mine,ROWS,COLS,'0');
initboard(show, ROWS, COLS,'*');
//打印
//printboard(mine,ROW,COL);
//printboard(show, ROW, COL);
//随机布置地雷
setmine(mine, ROW, COL);
printboard(mine, ROW, COL);
//排雷
findmine(mine, show, ROW, COL);

}
void menu() {
printf("**************************************\n");
printf("******** 1.play ********\n");
printf("******** 0.exit ********\n");
printf("**************************************\n");
}
void test() {
srand((unsigned int)time(NULL));
int choice = 0;
do {
menu();
printf("请输入将要进行的操作:");
scanf("%d", &choice);
switch (choice) {
case 1: {
game();
break;
}
case 0:
{
printf("退出游戏!");
break;
}
default: {
printf("输入错误!请重新输入!");
break;
}
}
} while (choice);
}
int main() {
test();
return 0;
}

③mine.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"mine.h"
void initboard(char board[ROWS][COLS], int rows, int cols, char set) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
board[i][j] = set;
}
}
}
void printboard(char board[ROWS][COLS], int row, int col) {
for (int i = 0; i <= col; i++) {
printf("%d ",i);
}printf("\n");
for (int i = 1; i <= row; i++) {
printf("%d ", i);
for (int j = 1; j <= col; j++) {
printf("%c ", board[i][j]);
}printf("\n");
}
}
void setmine(char board[ROWS][COLS], int row, int col) {
int count = number;
while (count) {
int x = rand()%row+1;//1-9
int y = rand() % col + 1;
if (board[x][y] == '0') {
board[x][y] = '1';
count--;
}

}
}
int get_mine(char mine[ROWS][COLS], int m, int n) {
int sum = 0;
for (int i = m - 1; i < m + 2; i++) {
for (int j = n - 1; j < n + 2; j++) {
sum = sum + mine[i][j] - '0';
}
}
return sum;
}
void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) {
int m = 0;
int n = 0;
int win = 0;
while (win<row*col-number) {
printf("进行扫雷!\n");
printf("请输入要扫雷的位置:");
scanf("%d%d", &m, &n);
//判断输入是否出错
if (m > 0 && m <= row && n > 0 && n <= col) {
if (mine[m][n] == '1') {
printf("游戏结束!中雷了!\n");
printboard(mine, ROW, COL);
break;
}
else {//计算m,n坐标周围有几个雷
int mnumber = get_mine(mine, m, n);
show[m][n] = mnumber + '0';
printboard(show, ROW, COL);
win++;
}
}
else {
printf("输入格式出现错误,请重新输入!");

}
}
if (win==row*col-number) {
printf("恭喜你!排雷完成!\n");
printboard(mine, ROW, COL);
}
}

测试结果:

用C语言简单实现扫雷游戏_循环

用C语言简单实现扫雷游戏_if  while_02

举报

相关推荐

0 条评论