网站设置为默认主页,厦门做网页网站的公司,外链相册,wordpress 标签id什么是扫雷游戏#xff1f;
扫雷游戏作为一种老少咸宜的益智游戏#xff0c;
它的游戏目标十分简单#xff0c;就是要求玩家在最短的时间内#xff0c;
根据点击格子之后所出现的数字来找出所有没有炸弹的格子#xff0c;
同时在找的时候要避免点到炸弹#xff0c;一…什么是扫雷游戏
扫雷游戏作为一种老少咸宜的益智游戏
它的游戏目标十分简单就是要求玩家在最短的时间内
根据点击格子之后所出现的数字来找出所有没有炸弹的格子
同时在找的时候要避免点到炸弹一旦踩到炸弹则游戏结束。 扫雷游戏的规则
扫雷的棋盘是9*9的格子默认随机布置10个雷。
如果位置不是雷就显示周围有几个雷如果位置是雷游戏结束。
玩家需要找到雷区中所有不是地雷的方格同时避免踩到地雷。 为什么我们要学习制作扫雷游戏呢
C语言是一门重要的基础课程应用广泛也是不少后续课程的基础。
然而由于C语言语法规则较多在实际编程时又相对灵活
很多初学者接触这门课程会觉得有难度普遍有畏惧心理。
而通过制作扫雷等小游戏可以逐步将已学的语法知识用起来
帮助我们更好的理解C语言里蕴含的知识点逐步提高对编程的兴趣和能力。 制作扫雷游戏的步骤 1.先设计三个⽂件 test.c // ⽂件中写游戏的测试逻辑 game.c // ⽂件中写游戏中函数的实现等 game.h // ⽂件中写游戏需要的数据类型和函数声明等 2.game.h #define _CRT_SECURE_NO_WARNINGS
#pragma once
#include stdio.h
#include stdlib.h
#include time.h
#define EASY_COUNT 10
#define ROW 9
#define COL 9
#define ROWS ROW2
#define COLS COL2//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
//打印棋盘
void DisplayBoard(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); 3.game.c #define _CRT_SECURE_NO_WARNINGS#include game.h
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{int i 0;for (i 0; i rows; i){int j 0;for (j 0; j cols; j){board[i][j] set;}}
}
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{int i 0;printf(--------扫雷游戏-------\n);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)
{//布置10个雷//⽣成随机的坐标布置雷int count EASY_COUNT;while (count){int x rand() % row 1;int y rand() % col 1;if (board[x][y] 0){board[x][y] 1;count--;}}
}
int GetMineCount(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;while (win row * col - EASY_COUNT){printf(请输⼊要排查的坐标:);scanf(%d %d, x, y);if (x 1 x row y 1 y col){if (mine[x][y] 1){printf(很遗憾你被炸死了\n);DisplayBoard(mine, ROW, COL);break;}else{//该位置不是雷就统计这个坐标周围有⼏个雷int count GetMineCount(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);}
} 4.test.c #define _CRT_SECURE_NO_WARNINGS#include game.h
void menu()
{printf(***********************\n);printf(***** 1. play *****\n);printf(***** 0. exit *****\n);printf(***********************\n);
}
void game()
{char mine[ROWS][COLS];//存放布置好的雷char show[ROWS][COLS];//存放排查出的雷的信息//初始化棋盘//1. mine数组最开始是全0//2. show数组最开始是全*InitBoard(mine, ROWS, COLS, 0);InitBoard(show, ROWS, COLS, *);//打印棋盘//DisplayBoard(mine, ROW, COL);DisplayBoard(show, ROW, COL);//1. 布置雷SetMine(mine, ROW, COL);//DisplayBoard(mine, ROW, COL);//2. 排查雷FindMine(mine, show, ROW, COL);
}
int main()
{int input 0;srand((unsigned int)time(NULL));do{menu();printf(请选择:);scanf(%d, input);switch (input){case 1:game();break;case 0:printf(退出游戏\n);break;default:printf(选择错误重新选择\n);break;}} while (input);return 0;
}