大家好,欢迎来到IT知识分享网。
目录
在线扫雷游戏链接
- 棋盘的定义
- 棋盘的初始化
- 打印棋盘
- 布置雷
- 排查雷
- 周围没有雷展开一片
- 获取坐标周围雷的个数
游戏完整代码
8. test.c
9. game.c
10. game.h
游戏实现效果
在线扫雷游戏:http://www.minesweeper.cn/
1. 棋盘的定义
2. 棋盘的初始化
3. 打印棋盘
4. 布置雷
5. 排查雷
6. 周围没有雷展开一片
7. 获取坐标周围雷的个数
游戏完整代码
1. test.c
#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" void eum() {
printf("\n"); printf(" 1.play 0.exit \n"); printf("\n"); } void game() {
char mine[ROWS][COLS];//存放布置好的雷 char show[ROWS][COLS];//存放排查出的雷的信息 //初始化棋盘 //1.mine数组最开始全是'0' //2.show数组最开始全是'*' isbord(mine, ROWS, COLS, '0'); isbord(show, ROWS, COLS, '*'); //打印棋盘 //Display(mine, ROW, COL); Display(show, ROW, COL); //1.布置雷 setmine(mine, ROW, COL); //Display(mine, ROW, COL); //2.排查雷 findmine(mine, show, ROW, COL); } int main() {
int input = 0; //设置随机数的时间戳 srand((unsigned int)time(NULL)); do {
eum(); printf("请输入>:"); scanf("%d", &input); switch (input) {
case 1: game(); break; case 0: printf("退出游戏\n"); break; default: printf("输入错误,重新输入\n"); break; } } while (input); return 0; }
2. game.c
#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" //棋盘初始化 void isbord(char bord[ROWS][COLS], int rows, int cols, char set) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
bord[i][j] = set; } } } //打印棋盘 void Display(char bord[ROWS][COLS], int row, int col) {
printf("-------扫雷游戏-------\n"); for (int i = 0; i <= col; i++) {
printf("%d ", i); } printf("\n"); for (int i = 1; i <= row; i++) {
printf("%d ", i); for (int j = 1; j <= col; j++) {
printf("%c ", bord[i][j]); } printf("\n"); } } //布置雷 void setmine(char bord[ROWS][COLS], int row, int col) {
//布置10个雷 //生成随机的坐标,布置雷 int count = iscount; while (count) {
int x = rand() % row + 1; int y = rand() % col + 1; if (bord[x][y] == '0') {
bord[x][y] = '1'; count--; } } } //获取坐标周围雷的个数 int Getmine(char mine[ROWS][COLS], int x, int y) {
//也可以写成这样 //int count = 0; //for (int i = x - 1; i <= x + 1; i++) //{
// for (int j = y - 1; j <= y + 1; j++) // {
// if (mine[i][j] == '1') // {
// count++; // } // } //} //return count; //字符转换成数字加起来 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 ExplosionSpread(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col, int x, int y, int* pw) {
//判断坐标是否为排查范围内 if (x >= 1 && x <= row && y >= 1 && y <= col) {
int sum = Getmine(mine, x, y); //获取坐标周围雷的个数 if (sum == 0) {
(*pw)++; //如果该坐标周围没有雷,就把该坐标置成空格,并向周围八个坐标展开 show[x][y] = ' '; for (int i = x - 1; i <= x + 1; i++) {
for (int j = y - 1; j <= y + 1; j++) {
if (show[i][j] == '*') //限制递归条件,防止已经排查过的坐标再次递归,从而造成死递归 ExplosionSpread(mine, show, row, col, i, j, pw); } } } else {
(*pw)++; show[x][y] = sum + '0'; } } } //排查雷 void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) {
int x = 0; int y = 0; int win = 0; int* pw = &win; while (win < row * col - iscount) {
printf("请输入要排查的坐标>:"); scanf("%d %d", &x, &y); //判断坐标是否为排查范围内 if (x >= 1 && x <= row && y >= 1 && y <= col) {
if (mine[x][y] == '1') {
printf("很遗憾你被炸死\n"); //被炸死打印mine数组看看怎么被炸死的 Display(mine, ROW, COL); break; } else {
if (show[x][y] != '*') //判断是否重复排查 {
printf("该坐标已被排查,请重新输入!\n"); continue; } else {
ExplosionSpread(mine, show, row, col, x, y, pw); //周围没有雷展开一片 system("cls");//清空屏幕 Display(show, ROW, COL); } } } else {
printf("坐标非法,重新输入\n"); } } if (win == row * col - iscount) {
printf("恭喜你,排雷成功\n"); Display(mine, ROW, COL); } }
3. game.h
#pragma once #include <stdio.h> #include <time.h> #include <stdlib.h> #include <windows.h> #define iscount 10 #define ROW 9 #define COL 9 #define ROWS ROW + 2//防止越界访问 #define COLS COL + 2//防止越界访问 //初始化棋盘 void isbord(char bord[ROWS][COLS], int rows, int cols, char set); //打印棋盘 void Display(char bord[ROWS][COLS], int row, int col); //布置雷 void setmine(char bord[ROWS][COLS], int row, int col); //排查雷 void findmine(char mine[ROWS][COLS],char show[ROWS][COLS], int row, int col);
游戏实现效果
扫雷代码运行实现_test.c
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/140082.html