【趣味小游戏】--扫雷游戏
目录
一.test.c部分
二.game.h部分
三.game.c部分
前言:前面学习了数组和函数等c语言相关知识,这篇文章我们将通过这些知识分为三个文件来完成扫雷游戏;
1.test.c //文件中写游戏的测试逻辑
2.game.c //文件中写游戏中函数的实现等
3.game.h. //文件中写游戏需要的数据类型和函数声明等
一.test.c部分
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"void menu()
{printf("***********************\n");printf("***** 1. play *****\n");printf("***** 2. exit *****\n");printf("***********************\n");
}void game()
{char mine[ROWS][COLS] = { 0 };//用来存放布置好的雷的信息char show[ROWS][COLS] = { 0 };//用来存放排查出的雷的个数信息//棋盘初始化//mine全部初始化为0,表示还没布置好雷;//show全部初始化为*,表示还没被排查;initboard(mine, ROWS, COLS, '0');initboard(show, ROWS, COLS, '*');//打印棋盘9*9printboard(show, ROW, COL);//布置雷setmine(mine, ROW, COL);//排查雷findmine(mine, show, ROW, COL);}int main()
{int num = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:>");scanf("%d", &num);switch (num){case 1:game();break;case 2:printf("你已退出游戏\n");break;default:printf("选择错误,请重新选择\n");break;}} while (num != 2);return 0;
}
二.game.h部分
#pragma once#include<stdio.h>
#include<stdlib.h>
#include<time.h>//定义常量的符号
#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2#define EASY_COUNT 10//函数的声明//棋盘初始化
void initboard(char board[ROWS][COLS], int rows, int cols, int set);//打印棋盘
void printboard(char mine[ROWS][COLS], int row, int col);//布置雷
void setmine(char mine[ROWS][COLS], int row, int col);//获取周围雷的个数
int getmine(char mine[ROWS][COLS], int x, int y);//排查雷
void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
三.game.c部分
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"void initboard(char board[ROWS][COLS], int rows, int cols, int set)
{int i = 0;for (i = 0;i < rows;i++){int j = 0;for (j = 0;j < cols;j++){board[i][j] = set;}}
}void printboard(char mine[ROWS][COLS], int row, int col)
{int i = 0;printf("-----扫雷游戏-----\n");for (i = 0;i <= row;i++){printf("%d ", i);//打印行号}printf("\n");for (i = 1;i <= row;i++){int j = 0;printf("%d ", i);//打印列号for (j = 1;j <= col;j++){printf("%c ", mine[i][j]);}printf("\n");}
}void setmine(char mine[ROWS][COLS], int row, int col)
{//随机布置10个雷int count = EASY_COUNT;while (count){int x = rand() % row + 1;//生成随机的坐标int y = rand() % col + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}int getmine(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 w =0;while (w< 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");printboard(mine, ROW, COL);break;}else if(show[x][y]=='*'){//统计坐标周围雷的个数int c = getmine(mine, x, y);show[x][y] = c + '0';//数字+‘0’变为数字字符printboard(show, ROW, COL);w++;}else{printf("该坐标已被查找,请重新输入\n");}}else{printf("非法输入,请重新输入\n");}if (w == row * col - EASY_COUNT){printf("恭喜你,排雷成功\n");printboard(mine, ROW, COL);}}}
结语;本篇文章就到此结束了,扫雷游戏的实现三个文件都必不可少,当然这只是最基础版本的,更多进阶功能还需要后续的学习。大家可以通过注释来理解一下所写的代码,感谢大家的支持。