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语言简单扫雷实现

思想:创建一个棋盘,但是棋盘有边界,在统计雷时要考虑边界就很麻烦,所以不能直接将棋拿来使用,所以将棋盘边界不适用,数组下标从1开始,末处边界也不使用。创建两个字符数据,选字符数组可以可以直接通过字符设置雷,一个字符数组用于向外展示,一个字符数组不展示。向外展示的遮盖住,不向外展示的用来设置雷区,通过用户的输入,现在雷区中判定是否该位置有雷,或者是周围有多少雷,然后在向外展示数组将覆盖处改成雷的个数。

头文件

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<Windows.h>

#define Row 12//横通过改变此处来改变棋盘的大小
#define Col 12//纵
#define Num 20//雷的个数
#define Boom '@'//雷的字符

extern void Menu();
extern void Game();
extern void Show(char Bord[][Col]);//用于展示棋盘
extern void SetMine(char clear[][Col]);//设置雷在棋盘中
extern int BoomCount(char Bord[][Col],int x,int y);//统计改坐标附近八个位置雷的个数

源文件

#include"myclear.h"

int main() {
?? ?srand((unsigned long)time(NULL));//下次游戏重新设置雷
?? ?int flag = 1;
?? ?while (flag) {
? ? int select = 0;
?? ?Menu();
?? ?scanf("%d", &select);
?? ?switch (select) {
?? ?case 1:Game();
?? ??? ?break;
?? ?case 2:flag = 0;
?? ??? ?printf("拜拜\n");
?? ??? ?break;
?? ?default:
?? ??? ?printf("输入有误,重新输入\n");
?? ??? ?break;
?? ? }
?? ?}

Sleep(1000);

system("cls");
?? ?return 0;
}

源文件

#include"myclear.h"

void Menu() {
?? ?printf("#################\n");
?? ?printf("# 1.开始 2.退出 #\n");
?? ?printf("#################\n");
?? ?printf("Please select: ");
}

void SetMine(char clear[][Col]) {
?? ?int _x, _y;
?? ?int index = Num;
?? ?while (index) {
?? ??? ?_x = rand() % 10 + 1;
?? ??? ?_y = rand() % 10 + 1;
?? ??? ?if (clear[_x][_y] == Boom)
?? ??? ??? ?continue;
?? ??? ?clear[_x][_y] = Boom;
?? ??? ?index--;
?? ?}
}

void Show(char Bord[][Col]){
?? ?for (int i = 1; i <= Row - 2; i++) {
?? ??? ?for (int j = 1; j <= Col - 2; j++) {
?? ??? ??? ?printf("%2c", Bord[i][j]);
?? ??? ?}
?? ??? ?printf("\n");
?? ?}
}

int ?BoomCount(char Bord[][Col],int x,int y) {
?? ?return (Bord[x - 1][y - 1] + Bord[x - 1][y] +
?? ??? ?Bord[x - 1][y + 1] + Bord[x][y - 1] +
?? ??? ?Bord[x][y + 1] + Bord[x + 1][y - 1] +
?? ??? ?Bord[x + 1][y] + Bord[x + 1][y + 1] - 8 * '0') / 16;
}

void Game() {
?? ?char Show_clear[Row][Col];//向外展示的区域
?? ?char My_clear[Row][Col];//不向外展示的区域
?? ?memset(My_clear, '0', sizeof(My_clear));
?? ?memset(Show_clear, '*', sizeof(Show_clear));
?? ?SetMine(My_clear);
?? ?int blank = (Row - 2) * (Col - 2) - Num;//棋盘中不是雷的块
?? ?int clearnum = 0;//扫到不是雷块就记录起来
?? ?while (1) {
?? ??? ?system("cls");//清屏,保证再次输入的界面在最上面
?? ??? ?Sleep(1);//清屏的时间间隔
?? ??? ?Show(Show_clear);
?? ??? ?int x = 0, y = 0;
?? ??? ?printf("请输入坐标:");
?? ??? ?scanf("%d %d", &x, &y);
?? ??? ?if (x<1 && x>Row - 2 && y<1 && y>Col - 2) {
?? ??? ??? ?printf("输入有误,重新输入\n");
?? ??? ??? ?continue;
?? ??? ?}
?? ??? ?if (Show_clear[x][y] != '*') {
?? ??? ??? ?printf("该处雷已经被排除,重新输入\n");
?? ??? ??? ?continue;
?? ??? ?}
?? ??? ?if (My_clear[x][y] == '@') {
?? ??? ??? ?printf("你被炸死了!\n");

? ? ? ? ? ??printf("请选择:\n");
?? ??? ??? ?Sleep(1000);
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?else {
?? ??? ??? ?int count = BoomCount(My_clear, x, y);
?? ??? ??? ?Show_clear[x][y] = count + '0';//将该位置改成周围雷的数量
?? ??? ??? ?clearnum++;
?? ??? ?}
?? ??? ?if (clearnum >= blank) {//若扫雷区不是雷块数量大于等于blank
?? ??? ??? ?printf("你已经获得胜利!\n");
?? ??? ??? ?break;
?? ??? ?}
?? ?}
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:09:27  更:2021-11-22 12:11:15 
 
开发: 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 7:20:43-

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