当前位置:网站首页>《C语言小游戏》扫雷
《C语言小游戏》扫雷
2022-07-31 06:42:00 【郭郭学习之旅】
今天来一款简单的小游戏 扫雷 规则就不多说了懂的都懂 话不多说直接上效果图
直接一点 上代码 !!!一共分为三个源文件
头文件以及函数声明
#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
//界面
void menu();
//初始化数组
void init_board(char borad[ROWS][COLS],int rows,int cols,char ch);
//打印棋盘
void display_board(char borad[ROWS][COLS], int rows, int cols);
//布置雷
void set_mine(char mine[ROWS][COLS], int row, int col);
//排雷
void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
函数实现
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu() {
printf("*************************\n");
printf("****** 1.play *****\n");
printf("****** 0.exit *****\n");
printf("*************************\n");
}
void init_board(char borad[ROWS][COLS], int rows, int cols, char ch) {
int i = 0;
int j = 0;
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
borad[i][j] = ch;
}
}
}
void display_board(char borad[ROWS][COLS], int row, int col) {
int i = 0;
int j = 0;
for (i = 0; i <= 9; i++) {
printf("%d ", i);
}printf("\n");
for (i = 1; i < row+1; i++) {
printf("%d ", i);
for (j = 1; j < col+1; j++) {
printf("%c ", borad[i][j]);
}
printf("\n");
}
}
void set_mine(char borad[ROWS][COLS], int row, int col) {
int n = 10;
while (n) {
int x = rand() % 10;
int y = rand() % 10;
if (borad[x][y] == '0'&&x>0&&x<=row&&y>0&&y<=col) {
borad[x][y] = '1';
n--;
}
}
}
int get_mine_count(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 find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) {
int x = 0;
int y = 0;
int t = 0;
while (t<row*col-10) {
printf("请输入要排查的下标>");
scanf("%d %d", &x, &y);
if (x >= 1 && x <= row && y >= 1 && y <= col) {
if (show[x][y] == '*') {
if (mine[x][y] == '1') {
printf("很遗憾你GG了,游戏结束\n");
return;
}
else if(mine[x][y] != '1'){
int count = get_mine_count(mine, x, y);
show[x][y] = count + '0';
t++;
display_board(show, ROW, COL);
}
}
else { printf("此下标已经排完了"); }
}
else { printf("输入的坐标违法,请重新输入\n"); }
}
if(t== row * col - 10)
printf("恭喜你排雷成功\n");
}
游戏实现
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void game() {
char mine[ROWS][COLS] = { 0 };
char show[ROWS][COLS] = { 0 };
init_board(mine, ROWS, COLS, '0');
init_board(show, ROWS, COLS, '*');
set_mine(mine, ROW, COL);
//display_board(mine, ROW, COL);
display_board(show, ROW, COL);
find_mine(mine,show, ROW, COL);
}
int main()
{
srand((unsigned int)time(NULL));
int input = 0;
do {
menu();
printf("请输入你的选择>");
scanf("%d", &input);
switch (input) {
case 0:printf("退出游戏\n"); break;
case 1:printf("开始游戏\n"); game(); break;
default:printf("输入错误,请重新输入\n"); break;
}
} while (input);
return 0;
}
下面为大家分析一下思路
首先第一步需要先来构造界面 界面效果如下
首先构造完界面后我们还需要考虑到打印棋盘,效果图如下
但是我们要考虑到 在下棋的时候如果使用输入下标的方式,数起来会比较的麻烦,所以我们将这个棋盘进行一下简单的加工 ,效果图如下
然后我们需要考虑来布置一下雷,为了保证每一颗雷分布的随机性,我们请出了c语言中的随机数rand();函数 但是又考虑到让他变化更加玄幻,我们继续给它一个时间戳time(NULL);函数 所以开始我们先构造一次 srand(time(NULL));但是,问题来了,srand函数接收的是unsigned类型,我们要想更好的使用的话我们还需要使用到一个类型转换srand((unsigned int)time(NULL));
那么我们就可以很好的布雷了,随机截取一次雷的分布看一下
红框中的1便是雷的分布
那么我们开始玩家扫雷,首先我们需要考虑到的是玩家输入的下标是否合法,其次要考虑到的是玩家输入的下标是否已经被扫过,排除这两个因素后我们就要考虑到玩家输入的坐标下是否为雷,如果是雷那么就是gg了,否则打印出附近雷的分布个数到屏幕
每一次玩家扫雷之后,要检测一下玩家是否已经成功的将雷全部扫出,如果成功的开启了所有格子避免了所有雷,那么玩家就获得了胜利
好了,我们简单的小游戏就完成了,如果对你有帮助的话期待三连
边栏推荐
- van-uploader上传图片,使用base64回显无法预览的问题
- 金融租赁业务
- MySQL installation to the last step in the write the configuration file failed?And after the installation steps
- 03-SDRAM: Write operation (burst)
- DAY18: XSS vulnerability
- 我开发了一个利用 Bun 执行 .ts / .js 文件的 VS Code 插件
- 【微服务】 微服务学习笔记二:Eureka注册中心的介绍及搭建
- [PSQL] 复杂查询
- 超级详细的mysql数据库安装指南
- 2022.07.20_每日一题
猜你喜欢
电压源的电路分析知识分享
'vite' is not an internal or external command, nor is it a runnable program or batch file.
文件 - 03 下载文件:根据文件id获取下载链接
[PSQL] SQL基础教程读书笔记(Chapter1-4)
我开发了一个利用 Bun 执行 .ts / .js 文件的 VS Code 插件
Shellshock
Pygame Surface对象
链表实现及任务调度
The Perfect Guide|How to use ODBC for Agentless Oracle Database Monitoring?
【解决】mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止
随机推荐
DirectExchange switch simple introduction demo
2022.07.18_每日一题
Client navicat installation tutorial
bcos简介及自序
电脑开机密码怎么设置?如何给你的电脑加上“安全锁”
[PSQL] SQL基础教程读书笔记(Chapter1-4)
uniapp 高度不自适应
嵌入式系统驱动初级【2】——内核模块下_参数和依赖
SCI写作指南
【Go】Go 语言切片(Slice)
【Go报错】go go.mod file not found in current directory or any parent directory 错误解决
电压源的电路分析知识分享
SQLite数据库连接字符串
从入门到一位合格的爬虫师,这几点很重要
【愚公系列】2022年07月 Go教学课程 022-Go容器之字典
Embedded system driver primary [2] - _ parameters and dependencies under the kernel module
03-SDRAM: Write operation (burst)
XSS靶场prompt.ml过关详解
2022.07.18 _ a day
2704:寻找平面上的极大点