IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 使用c语言制作扫雷 -> 正文阅读

[C++知识库]使用c语言制作扫雷

头文件(函数声明.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 lei 10//设置雷的个数

//初始化棋盘
void ?Initboard(char board[ROWS][COLS], int rows, int cols, char set);//set 设置
void Disboard(char board[ROWS][COLS], int row, int col);

//布置雷
void Setboard(char board[ROWS][COLS], int row, int col);

//排雷
void Findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

定义函数

#include"函数声明.h"

void ?Initboard(char board[ROWS][COLS], int rows, int cols,char set)
{
?? ?int i = 0;
?? ?for (i = 0; i < rows; i++)
?? ?{
?? ??? ?int j = 0;
?? ??? ?for (j = 0; j < cols; j++)
?? ??? ?{
?? ??? ??? ?board[i][j] = set;
?? ??? ?}
?? ?}
}


void Disboard(char board[ROWS][COLS], int row, int col)
{
?? ?int i = 0;
?? ?printf("----------------------------------\n");
?? ?for (i = 0; i <= 9; 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", board[i][j]);

?? ??? ?}
printf("\n");
?? ?}
?? ?printf("---------------------------------\n");
}


void Setboard(char board[ROWS][COLS], int row, int col)
{
?? ?int n = lei;
?? ?while(n)
?? ?{
?? ??? ?//1.生成随机下标
?? ??? ?int x = rand() % row + 1;
?? ??? ?int y = rand() % col + 1;//与参数关联,防止传死了

?? ??? ?if (board[x][y] != '1')
?? ??? ?{
?? ??? ??? ?board[x][y] = '1';
?? ??? ??? ?n--;
?? ??? ?}

?? ?}
}


int get_n(char mine[ROWS][COLS],int x,int y)//ASII码规定 ? 字符‘3’+或- 字符‘0’=数字 3
{//便例 点(x,y)/附近的八个点,如果有雷,点(x,y)显示雷的数量
?? ?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 Findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
?? ?
?? ?int x = 0;
?? ?int y = 0;
?? ?int win = 0;

?? ?
?? ?while (win<row*col-lei)
?? ?{
?? ??? ?printf("请输入要排查的坐标\n");
?? ??? ?scanf_s("%d%d", &x, &y);
?? ??? ?if (x >= 1 && x <= row && y >= 1 && y <= col)//写棋盘范围
?? ??? ?{
?? ??? ??? ?if (mine[x][y] == '1')
?? ??? ??? ?{
?? ??? ??? ??? ?printf("很遗憾,游戏结束\n");
?? ??? ??? ??? ?Disboard(mine, ROW, COL);
?? ??? ??? ??? ?break;
?? ??? ? ? ? }
?? ??? ??? ?else {
?? ??? ??? ??? ?int n = get_n(mine ,x,y);
?? ??? ??? ??? ?show[x][y] = n+'0';
?? ??? ??? ??? ?Disboard(show, ROW, COL);


?? ??? ??? ?}
?? ??? ?}
?? ??? ?else {
?? ??? ??? ?printf("输入错误,超出范围,请重新输入\n");
?? ??? ?}
?? ?}

?? ?if (win == row * col - lei)
?? ?{
?? ??? ?printf("扫完了,已经一个都不剩了");
?? ?}

游戏主体:


#include "函数声明.h"

//雷是“1” ?空格是‘0’
void menu()
{
?? ?printf("*******************\n");
?? ?printf("*****1.开始游戏****\n");
?? ?printf("*****2.结束********\n");
?? ?printf("*******************\n");
}

void game()
{
?? ?char mine[ROW+2][COLS] = { 0 };//存放雷的信息
?? ?char show[ROW+2][COLS] = { 0 };//存放排查出的雷的信息
?? ?
?? ?//初始化信息
?? ?Initboard(mine, ROWS, COLS,'0');//0,每一个位置都是0(空)
?? ?Initboard(show, ROWS, COLS,'*');//* 每一个位置都是炸弹

?? ?
?? ?//布置雷
?? ?
?? ?Setboard(mine, ROW, COL);
?? ?Disboard(show, ROW, COL);
?? ?//打印棋盘
?? ?//Disboard(mine, ROW, COL);
?? ?/*Disboard(show, ROW, COL);*/
//排雷
?? ?Findmine(mine,show,ROW,COL);
}


int main()
{?? ?int input = 0;
srand((unsigned int)time(NULL));
?? ?{
?? ??? ?menu();
?? ??? ?printf("请选1或2\n");
?? ?
?? ??? ?scanf_s("%d", &input);

?? ??? ?switch (input)
?? ??? ?{
?? ??? ?case 1:
?? ??? ??? ?printf("扫雷\n");
?? ??? ??? ??? ?game();
?? ??? ??? ??? ?break;
?? ??? ?case 2:
?? ??? ??? ?printf("退出游戏\n");
?? ??? ??? ?break;
?? ??? ?default:
?? ??? ??? ?printf("输入错误,请重新输入\n");
?? ??? ??? ?break;
?? ??? ?}

?? ?} while (input);
?? ?return 0;
}
?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:36:46  更:2021-10-08 11:37:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:13:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码