写个小游戏娱乐娱乐!
目录:1.简要分析
2.实现扫雷游戏细节
3.总代码
1.简要分析
一般写这种小游戏要分为两个模块:头文件,源文件。头文件中声明各种函数和库函数以及宏定义,全局变量等。源文件中主要是实现函数和逻辑函数等。
在扫雷游戏中,我将我的模块分为三部分,一部分是game.h–声明头文件等,game.c–实现游戏函数,test.c–实现总体逻辑
接下来就是扫雷游戏的细节处理
2.游戏细节
1.定义两个数组
char mine[ROW][COL];//用于存放雷的位置,以及非雷的位置,初始化为‘0’,然后才将雷的位置‘1’来替换原来的字符
char show[ROW][COL];//用于展示在游戏界面的雷阵,并不会将雷的位置暴露,且初始化为‘*’。
2.布雷
srand((unsigned int )time(NULL));
int x=0,y=0;
x=rand()%row+1;//用srand((unsigned int )time(NULL))来随机生成雷的位置坐标
y=rand()%col+1;//生成10个雷,就循环十次,将雷的位置存放在mine[ROW][COL]中
3.排雷
if(arr[x][y]==1)//当位置输入坐标在mine[ROW][COL]中存放的字符为‘1’时,则为踩雷,游戏结束
printf(“游戏结束!”);
else
int count = get_mine(mine, x, y);
4.判断什么时候排雷成功
int win=0;//定义一个变量来判断什么时候排雷成功;
3.总代码
1.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];//用于展示给玩家的棋盘; //初始化棋盘 init_board(mine, ROWS, COLS, '0'); init_board(show, ROWS,COLS,'*'); //打印棋盘; show_board(show, ROW, COL); //show_board(mine, ROW, COL); //布置雷 set_mine(mine, ROW, COL); //show_board(mine, ROW, COL); //排雷 find_mine(mine, show, ROW, COL); } int main() { int input; srand((unsigned int)time(NULL)); do { menu(); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戏!\n"); break; default: printf("输入错误,请重新输入:\n"); break; } } while (input); return 0; }
2.game.h
#define _CRT_SECURE_NO_WARNINGS #include
#include
#include
#define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 #define EASY 10 //初始化棋盘 void init_board(char arr[ROWS][COLS], int rows, int cols, char set); //打印棋盘 void show_board(char arr[ROWS][COLS], int row, int col); //布置雷 void set_mine(char arr[ROWS][COLS], int row, int col); //排雷 void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
3.game.c
#define _CRT_SECURE_NO_WARNINGS #include "game.h" void init_board(char arr[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++) { arr[i][j] = set; } } } void show_board(char arr[ROWS][COLS], int row, int col) { int i = 1; int j = 1; printf("------扫雷-------\n"); for (i = 0; i <= row; i++) { printf("%d ", i); } printf("\n"); for (i = 1; i <= row; i++) { printf("%d ", i); for (j = 1; j <= col; j++) { printf("%c ", arr[i][j]); } printf("\n"); } } //布置雷 void set_mine(char arr[ROWS][COLS], int row, int col) { int count = EASY; int x=0, y=0; while (count) { x = rand() % row + 1; y = rand() % col + 1; if (arr[x][y] == '0') { arr[x][y] = '1'; count--; } } } int get_mine(char mine[ROWS][COLS], int x, int y) { return (mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][x + 1] + mine[x][x - 1] + mine[x][x + 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0' ); } void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) { int x; int 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(mine, x, y); show[x][y] = count+'0'; show_board(show, ROW, COL); win++; } } else { printf("坐标非法,请重新输入:\n"); } } if (win == row * col - EASY) printf("恭喜你,排雷成功!\n"); }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216867.html原文链接:https://javaforall.net
