网站开发的网课在哪,网站开发培训教程,logo的专业设计,佛山市网站建设哪家好文章目录 一、游戏规则二、 代码逻辑三、游戏实现1. 游戏菜单设计2.设计雷区并随机布置雷(1) 设置雷区(2) 布置雷 3.排查雷 四、源码 一、游戏规则 1. 在9*9的小格子中#xff0c;任意选取一个坐标#xff08;格子#xff09;#xff0c;选择后发现#xff0c;如果没点中雷… 文章目录 一、游戏规则二、 代码逻辑三、游戏实现1. 游戏菜单设计2.设计雷区并随机布置雷(1) 设置雷区(2) 布置雷 3.排查雷 四、源码 一、游戏规则 1. 在9*9的小格子中任意选取一个坐标格子选择后发现如果没点中雷的坐标会显示数字表示周围有几个雷如果点中雷游戏结束 排查雷 如果这个位置不是雷就计算这个位置的周围8个坐标有几个雷并显示雷的个数如果是 雷 就炸死了游戏结束如果把雷都找出来了胜利游戏结束链 接:网页版扫雷 2.选择后如图 3.点中雷的情况 二、 代码逻辑
游戏菜单设计设计雷区并随机布置雷排查雷
三、游戏实现
1. 游戏菜单设计
//test.c
#include game.h
void game()
{printf(扫雷\n);
}
void menu()
{printf(************************\n);printf(****** 扫雷 *******\n);printf(****** 1. play *******\n);printf(****** 0. exit *******\n);printf(************************\n);
}
int main()
{int input 0;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;
}2.设计雷区并随机布置雷
(1) 设置雷区 设置一个9*9的二维数组0表示没有雷1表示雷 但是为了避免显示给玩家看的数字 1雷的个数与设置雷的 1 重合所以选用 * 进行埋雷 因为扫雷 是扫周围的8个区域会遇到扫越界问题 故变成11*11的二维数组 设置棋盘
//test.c 中的 game()
void game()
{char mine[ROWS][COLS] {0};//放置雷的数组char show[ROWS][COLS] {0};//显示的数组InitBoard(mine,ROWS,COLS,0);DisplayBoard(mine, ROW, COL);InitBoard(show,ROWS,COLS,*);DisplayBoard(show, ROW, COL);}//game.c
#include game.h
void 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;}}
}void DisplayBoard(char board[ROWS][COLS], int row, int col)
{int i 0;int j 0;printf(--------扫雷---------\n);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);}printf(--------扫雷---------\n);}//game.h
#include stdio.h#define ROW 9
#define COL 9#define ROWS ROW2
#define COLS COL2void InitBoard(char board[ROWS][COLS],int rows,int cols,char set);
void DisplayBoard(char board[ROWS][COLS], int row, int col);(2) 布置雷
在这里随机生成雷 字符0表示不是雷。字符1表示是雷
//game.c
void SetMine(char mine[ROWS][COLS], int row, int col)
{int count Easy_count;while (count) {int x rand() % row 1;//生成坐标1-9int y rand() % col 1;if (mine[x][y] 0) //避免在同一个地方布置雷{mine[x][y] 1;count--;} }
}3.排查雷
输入排查雷的坐标如果是雷则GAME OVER !,则如果不是雷则显示该坐标周围有多少个雷
//game.c
//排查雷
int GetCountMine(char mine[ROWS][COLS],int x,int y)
{return (mine[x - 1][y - 1] mine[x - 1][y] mine[x - 1][y 1] mine[x][y - 1] mine[x][y 1] mine[x 1][y - 1] mine[x 1][y] 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(GAME OVER被炸死了\n);DisplayBoard(mine,ROW,COL);break;}else {//不是雷统计周围有多少雷int c GetCountMine(mine,x,y);show[x][y] c 0;DisplayBoard(show,ROW,COL);win;}}else {printf(坐标输入错误重新输入\n);}}if (win ((row * col)- Easy_count)) //需要排的区域数{printf(恭喜您排雷成功\n);}
}排雷的周围坐标
x-1, y - 1x-1,yx-1,y1x, y - 1x,yx,y1x1,y-1x1,yx1,y1
排完的情况这里设置80个雷用于测试排雷成功所以只有一个安全
排到雷游戏结束
四、源码
game.h
#include stdio.h
#include time.h
#include stdlib.h
#define ROW 9
#define COL 9#define ROWS ROW2
#define COLS COL2#define Easy_count 10//初始化
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 mine[ROWS][COLS],int row,int col);
//排查雷
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);test.c
#include game.h
void game()
{char mine[ROWS][COLS] {0};//放置雷的数组char show[ROWS][COLS] {0};//显示的数组InitBoard(mine,ROWS,COLS,0);InitBoard(show,ROWS,COLS,*); DisplayBoard(show, ROW, COL);//布置雷SetMine(mine,ROW,COL);//排查雷FindMine(mine,show,ROW,COL);}
void menu()
{printf(************************\n);printf(****** 扫雷 *******\n);printf(****** 1. play *******\n);printf(****** 0. exit *******\n);printf(************************\n);
}
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;
}game.c #include game.h
//初始化棋盘
void 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;}}
}
//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{int i 0;int j 0;printf(--------扫雷---------\n);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);}printf(--------扫雷---------\n);}
//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col)
{int count Easy_count;while (count) {int x rand() % row 1;//生成坐标1-9int y rand() % col 1;if (mine[x][y] 0) //避免在同一个地方布置雷{mine[x][y] 1;count--;}}
}
//排查雷
int GetCountMine(char mine[ROWS][COLS],int x,int y)
{return (mine[x - 1][y - 1] mine[x - 1][y] mine[x - 1][y 1] mine[x][y - 1] mine[x][y 1] mine[x 1][y - 1] mine[x 1][y] 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(GAME OVER被炸死了\n);DisplayBoard(mine,ROW,COL);break;}else {//不是雷统计周围有多少雷int c GetCountMine(mine,x,y);show[x][y] c 0;DisplayBoard(show,ROW,COL);win;}}else {printf(坐标输入错误重新输入\n);}}if (win ((row * col)- Easy_count)) //需要排的区域数{printf(恭喜您排雷成功\n);}
}