C语言 7 扫雷游戏

阅读: 评论:0

C语言 7 扫雷游戏

C语言 7 扫雷游戏

main函数:

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include "game.h"//9*9 棋盘 上面布置10个雷-->需要一个9*9的数组 为了数组元素不越界 需要一个11*11的数组
//排查雷 
//1.如果这个位置不是雷,就计算这个位置的周围8个坐标有几个雷,并显示雷的个数
//2.如果这个位置是雷,就炸死了,游戏结束了
//3.如果把不是雷的位置都找了出来,则游戏结束//1.假设要布置10个雷:随机布置 
void menu()
{printf("******************************n");printf("*********** 1.play ***********n");printf("*********** 0.exit ***********n ");printf("******************************n");
}void game()
{char mine[ROWS][COLS] = {0};//放布置好的雷的信息char show[ROWS][COLS] = {0};//排查出的雷的信息InitBoard(mine, ROWS, COLS, '0');//初始化棋盘函数 加外一层 初始化mine数组和show数组InitBoard(show, ROWS, COLS, '*');//c=初始化棋盘//DisplayBoard(mine,ROW,COL);//打印中间的9*9棋盘 打印雷的信息DisplayBoard(show, ROW, COL);//打印扫雷界面 row 显示棋盘 rows 布置棋盘//布置雷SetMine(mine, ROW, COL);DisplayBoard(mine, ROW, COL); //布置雷的过程 可以看雷的安置//排查雷FindMine(mine, show, ROW, COL);
}int main()
{srand((unsigned int)time(NULL)); //rand函数前要调用srandint input = 0;do{menu();printf("请选择>:n");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏n");break;default:printf("选择错误,重新选择n");break;}} while (input);return 0;
}

game.c

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)/t:要初始化的字符
{//for循环进行遍历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++)//打印列号 从0开始 对齐{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;//布置10个雷while (count)//循环次数大于等于10次{int x = rand() % row + 1;int y = rand() % col + 1;if (mine[x][y] != '1')//判断雷区有没有东西{mine[x][y] = '1';count--;}}
}int GetMineCount(char mine[ROWS][COLS], int x, int y)
{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;int z = 0;while (win<row*col-EASY_COUNT)//一直让你扫雷{printf("请您输入排查雷的坐标:x,yn");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (mine[x][y] == '1')//判断坐标处是否是0;{printf("很遗憾,你被炸死了n");DisplayBoard(mine, ROW, COL);//打印出mine数组 死得瞑目break;//被炸死了 跳出}else//不是雷 统计周围八个x,y坐标有几个雷 (x-1,y-1),(x-1,y),(x-1,y+1),(x,y-1),(x,y+1),(x+1,y-1),(x+1,y),(x+1,y+1){if (mine[x - 1][y - 1] == '1')z++;if (mine[x - 1][y] == '1')z++;if (mine[x - 1][y + 1] == '1')z++;if (mine[x][y - 1] == '1')z++;if (mine[x][y + 1] == '1')z++;if (mine[x + 1][y - 1] == '1')z++;if (mine[x + 1][y] == '1')z++;if (mine[x + 1][y + 1] == '1')z++;//不是雷,就统计x,y坐标周围雷的个数//int c = GetMineCount(mine, x, y);show[x][y] = z + '0';//遍历重新打印DisplayBoard(show, ROW, COL);win++;}}else{printf("坐标非法,请重新输入n");}}if (win == row * col - EASY_COUNT){printf("恭喜你,排雷成功!n");DisplayBoard(mine, ROW, COL);}
}

头文件 game.h:

#pragma once#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define ROW 9        //.h是头文件 .c是源文件
#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,char set);//11*11  rows:定义扫雷行列//显示棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col);//9*9  row:真实布置行列//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col);//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row,int col);

本文发布于:2024-02-02 23:37:38,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170688825647207.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:语言   游戏
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23