当前位置: 首页 > ds >正文

【趣味小游戏】--扫雷游戏

目录

一.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);}}}

结语;本篇文章就到此结束了,扫雷游戏的实现三个文件都必不可少,当然这只是最基础版本的,更多进阶功能还需要后续的学习。大家可以通过注释来理解一下所写的代码,感谢大家的支持。

http://www.xdnf.cn/news/1170.html

相关文章:

  • 盈达科技GEO解决方案:破解AI时代品牌增长困局
  • 【微服务】SpringBoot制作Docker镜像接入SkyWalking详解
  • webrtc使用
  • python数据分析(二):Python Pandas索引技术详解
  • 【RAG】一篇文章介绍多模态RAG(MRAG)
  • 【leetcode100】零钱兑换
  • Oracle高级语法篇-分析函数详解
  • ORA 600 [qkaQknLTPruneKaf:1] BUG 分析与处理
  • RSGISLib:一款功能强大的GIS与RS数据处理Python工具包
  • 【深度学习新浪潮】新视角生成的研究进展调研报告(2025年4月)
  • 具身智能的理论基础
  • 2025年五大ETL数据集成工具推荐
  • MongoDB索引
  • 智能座舱测试内容与步骤
  • 影刀RPA怎么和AI结合,制作自动采集小红书爆款文章+自动用AI改写标题、内容+用AI文生图生成发文图片+自动在小红书上发布文章
  • PyTorch 多 GPU 入门:深入解析 nn.DataParallel 的工作原理与局限
  • 基于贝叶斯优化的Transformer多输入单输出回归预测模型Bayes-Transformer【MATLAB】
  • 三网通电玩城平台系统结构与源码工程详解(五):客户端热更机制与多端资源分发流程
  • AI 技术发展:从起源到未来的深度剖析
  • 电容加速电路!
  • 二、Python编程基础02
  • 【机器学习-线性回归-2】理解线性回归中的连续值与离散值
  • Spring XML 配置
  • Kotlin集合全解析:List和Map高频操作手册
  • LM35 温度传感器介绍
  • 学习前端(前端技术更新较快,需持续关注技术更新)
  • 深入探讨:如何完美完成标签分类任务(数据治理中分类分级的分类思考)
  • 短信验证码安全实战:三网API+多语言适配开发指南
  • 网络原理 - 4(TCP - 1)
  • 短视频+直播商城系统源码全解析:音视频流、商品组件逻辑剖析