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

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

目录

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

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

相关文章:

  • 小雨滴的奇妙旅行
  • 纽约大学具身智能体在城市空间中的视觉导航之旅!CityWalker:从海量网络视频中学习城市导航
  • vue项目中axios统一或单独控制接口请求时间
  • ROS 快速入门教程01
  • 基于大语言模型的减肥健身计划系统设计与实现
  • 《剥开卷积神经网络CNN的 “千层酥”:从基础架构到核心算法》
  • PostgreSQL性能调优与内核优化怎么做?
  • 【算法】双指针8道速通(C++)
  • 基于ssm的“安家”儿童福利院管理系统(源码+文档)
  • Missashe考研日记-day24
  • TDengine 集群高可用方案设计(一)
  • 零基础学Python——第八章:实战项目(1-3)
  • 黑阈免激活版:智能管理后台,优化手机性能
  • 数据库对象与权限管理-视图与索引管理
  • 广东食品销售初级考试主要考什么
  • 深度解析 Linux 内核中 fork 工作原理与实现机制
  • 如何让 vscode jupyter 访问 terminal 的环境变量?
  • 【数字图像处理】立体视觉基础(1)
  • CONDA:用于 Co-Salient 目标检测的压缩深度关联学习(翻译)
  • TM2SP-Net阅读
  • 神舟二十号载人飞船成功飞天,上海航天有何贡献?
  • “家门口的图书馆”有多好?上海静安区居民给出答案
  • 著名诗人、中国城市发展研究院原常务副院长吕贵品逝世
  • A股三大股指涨跌互现:人形机器人产业链爆发,两市成交超1.2万亿元
  • “中华优秀科普图书榜”2024年度榜单揭晓
  • 龚正会见巴西里约热内卢州州长克劳迪奥·卡斯特罗