C语言---扫雷
源代码game.h
#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" InitBoard(char board[ROWS][COLS], int rows, int cols,char set) { int i = 0; int j = 0; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { board[i][j] = set; } } } DisplayBoard(char board[ROWS][COLS], int row, int col) { int i = 0; int j = 0; //打印列号 for (i = 0; i <= col; i++) { printf("%d ", i); } printf("\n"); for (i = 1; i <= row; i++) { printf("%d ", i); for (j = 1; j <= col; j++) { printf("%c ", board[i][j]); } printf("\n"); } } SetMine(char board[ROWS][COLS], int row, int col) { int count = EASY_COUNT; while (count) { int x = rand() % row + 1;//1-9 int y = rand() % col + 1;//1-9 if (board[x][y] == '0') { board[x][y] = '1'; count--; } } } //'1'-'0'=1 //'3'-'0'=3 //'0'-'0'=0 int get_mine_count(char mine[ROWS][COLS], int x, int y) { return mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1] - 8*'0'; } void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) { int x = 0; int y = 0; int win = 0; //9*9-10=71 while (win<row*col-EASY_COUNT) { printf("请输入排查雷的坐标:>"); scanf("%d%d", &x, &y); if (x >= 1 && x <= row && y >= 1 && y <= col) { //坐标合法 //1.踩雷 if (mine[x][y] == '1') { printf("很遗憾,你被炸死了\n"); DisplayBoard(mine, row, col); break; } else//不是雷 { //计算x,y坐标周围有几个雷 int count = get_mine_count(mine, x, y); show[x][y] = count + '0'; DisplayBoard(show, row, col); win++; } } else { printf("输入坐标非法,请重新输入!\n"); } } if (win == row * col - EASY_COUNT) { printf("恭喜你,排雷成功\n"); DisplayBoard(mine, row, col); } }
源文件test.c
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include"game.h" #include<stdlib.h> #include<time.h> void menu() { printf("***********************\n"); printf("*****1.play 0.exit****\n"); printf("***********************\n"); }void game() { //雷的信息储存 //1.布置好的雷的信息 char mine[ROWS][COLS] = {0};//11*11 //2.排查出的雷的信息 char show[ROWS][COLS] = {0}; //初始化 InitBoard(mine, ROWS, COLS,'0'); InitBoard(show, ROWS, COLS,'*'); //打印棋盘 //DisplayBoard(mine,ROW,COL); DisplayBoard(show, ROW, COL); //布置雷 SetMine(mine,ROW,COL); //DisplayBoard(mine, ROW, COL); //扫雷 FindMine(mine,show,ROW,COL); } void test() { int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("请选择:>"); scanf("%d",&input); switch (input) { case 1: game(); break; case 0: printf("退出游戏\n"); default: printf("选择错误,重新选择!\n"); break; } } while(input); } int main() { test(); return 0; }
头文件game.h
#define _CRT_SECURE_NO_WARNINGS 1 #define ROW 5 #define COL 5 #define ROWS ROW+2 #define COLS COL+2 #define EASY_COUNT 5 InitBoard(char board[ROWS][COLS], int rows, int cols,char set); DisplayBoard(char board[ROWS][COLS], int row, int col); SetMine(char board[ROWS][COLS],int row,int col); void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);
程序运行

浙公网安备 33010602011771号