C++ 80行 极简扫雷
一共5346个字符,MinGW编译通过(强烈不建议写这种代码!!!)
压行规则:一行不超过80个字符
代码:
#include<windows.h>
#include<stdio.h>
#include<time.h>
#define turn(x, y) (mapSize.X * (y) + (x))
#define Outside(x,y) (x < 0 || mapSize.X - 1 < x || y < 0 || mapSize.Y - 1 < y)
int *map,*mark,count,bomb,firstOpen,game,bombCount,beginTime,node[8][2] = {1,0,
-1,0,0,1,0,-1,-1,-1,-1,1,1,-1,1,1};
char *num[10] = { " ", "①", "②", "③", "④", "⑤", "⑥", "⑦", "⑧", "●" };
COORD size = { 18, 11 }, origin = { 0, 0 }, mapSize = { 0, 0 }, pos = { 0, 0 };
HANDLE hOut, hIn;INPUT_RECORD Buf;
int *color[10] = { 0, 11, 10, 12, 14, 1, 2, 6, 4, 4 };
void gotoxy(int x,int y){COORD pos;pos.X=x;pos.Y=y;SetConsoleCursorPosition(
hOut,pos);}
void setScreenSize(int l,int c){COORD size={l,c};SMALL_RECT rect={0,0,size.X-1,
size.Y-1};SetConsoleWindowInfo(hOut,1,&rect);SetConsoleScreenBufferSize(hOut,
size);SetConsoleWindowInfo(hOut,1,&rect);}
void hideCursor(){CONSOLE_CURSOR_INFO CursorInfo;GetConsoleCursorInfo(hOut,&
CursorInfo);CursorInfo.bVisible=0;SetConsoleCursorInfo(hOut,&CursorInfo);}
void delay(int t){static clock_t oldtime=0;while(clock()-t<oldtime)Sleep(1);
oldtime=clock();}
void open(int x,int y){if(Outside(x,y))return;if(!mark[turn(x,y)])return;mark[
turn(x,y)]=0;gotoxy(x*2,y);SetConsoleTextAttribute(hOut,color[map[turn(x,y)]]);
printf(num[map[turn(x,y)]]);count--;if(map[turn(x, y)] > 0)return;for(int i=0;i
<8;i++)open(x+node[i][0],y+node[i][1]);}
void sign(int x,int y){if(Outside(x, y))return;int *temp=&mark[turn(x,y)];if(!*
temp)return;gotoxy(x*2,y);if(*temp==1){*temp=2;SetConsoleTextAttribute(hOut,4);
printf("★");bombCount--;}else{*temp=1;SetConsoleTextAttribute(hOut,15);printf(\
"■");bombCount++;}}
void setBomb(int x,int y){for(int i=0,j,k;i<bomb;){j=rand()%mapSize.X,k=rand()%
mapSize.Y;if((-2<x-j&&x-j<2)&&(-2<y-k&&y-k<2))continue;if(map[turn(j,k)]==9)
continue;map[turn(j,k)]=9,i++;for(int i=0,m,n;i<8;i++){m=j+node[i][0],n=k+node[
i][1];if(!Outside(m,n)&&map[turn(m,n)]-9)map[turn(m,n)]++;}}}
void fun(int x,int y){int num=0;for(int i=0,j,k;i<8;i++){j=x+node[i][0],k=y+
node[i][1];if(!Outside(j,k)&&mark[turn(j,k)]==2)num++;}if(map[turn(x,y)]==num){
for(int i=0,j,k;i<8;i++) {j=x+node[i][0],k=y+node[i][1];if(Outside(j,k)||mark[
turn(j,k)]-1)continue;if(open(j,k),map[turn(j,k)]==9)game=0;}}}
int main(){DWORD mode;HANDLE hStdin=GetStdHandle((DWORD)-10);
GetConsoleMode(hStdin,&mode);mode&=~ENABLE_QUICK_EDIT_MODE;
SetConsoleMode(hStdin,mode);int Result,i=0,fps=10;hIn=GetStdHandle((DWORD)-10);
hOut=GetStdHandle((DWORD)-11);hideCursor();back:;setScreenSize(19,11);
FillConsoleOutputCharacter(hOut,' ',(size.X-1)*(size.Y+1),origin,&i);
SetConsoleCursorPosition(hOut,origin);
SetConsoleTextAttribute(hOut,15),printf(" Minesweeper! \n\n");
SetConsoleTextAttribute(hOut,10),printf(" Easy \n");
SetConsoleTextAttribute(hOut,14),printf(" Medium \n");
SetConsoleTextAttribute(hOut,13),printf(" Hard \n");
SetConsoleTextAttribute(hOut,12),printf(" Custom \n\n\n");
SetConsoleTextAttribute(hOut,11),printf(" by:_WndProc");
SetConsoleTextAttribute(hOut,15);for(;;){ReadConsoleInput(hIn,&Buf,1,&Result);
pos=Buf.Event.MouseEvent.dwMousePosition;if(Buf.Event.MouseEvent.dwButtonState)
{if(pos.Y==2)mapSize.X=mapSize.Y=9,bomb=10;else if(pos.Y==3)mapSize.X=mapSize.Y
=16,bomb=40;else if(pos.Y==4)mapSize.X=30,mapSize.Y=16,bomb=99;else if(pos.Y==5
){gotoxy(0,6);printf("input:");scanf_s("%d,%d,%d",&mapSize.X,&mapSize.Y,&bomb);
num[0]=" ";}else continue;break;}if(GetAsyncKeyState(32)&0x8000)exit(0);}
size.X=mapSize.X*2,size.Y=mapSize.Y+2;setScreenSize(size.X,size.Y);Sleep(100);
FlushConsoleInputBuffer(hIn);restart:;srand((unsigned)time(0));if(map)free(map
);if(mark)free(mark);map=(int*)calloc(mapSize.X*mapSize.Y,sizeof(int));mark=(
int*)calloc(mapSize.X*mapSize.Y,sizeof(int));count=mapSize.X*mapSize.Y,
bombCount=bomb;firstOpen=1,game=1,beginTime=clock();SetConsoleTextAttribute(
hOut,15);SetConsoleCursorPosition(hOut,origin);for(i=0;i<mapSize.X*mapSize.Y;
i++)printf("■");for(i=0;i<mapSize.X*mapSize.Y;i++)mark[i]=1;gotoxy(mapSize.X*2-
7,mapSize.Y);printf("restart");gotoxy(mapSize.X*2-5,mapSize.Y+1);printf("back"
);for(;;){if(GetNumberOfConsoleInputEvents(hIn,&i));if(i){while(i--){
ReadConsoleInput(hIn,&Buf,1,&Result);pos=Buf.Event.MouseEvent.dwMousePosition;
if(Buf.Event.MouseEvent.dwButtonState){pos.X=pos.X/2;switch(
Buf.Event.MouseEvent.dwButtonState){case FROM_LEFT_1ST_BUTTON_PRESSED:if(
firstOpen)setBomb(pos.X,pos.Y),firstOpen=0;open(pos.X,pos.Y);if(map[turn(pos.X,
pos.Y)]==9)game=0;if(pos.Y==mapSize.Y)goto restart;if(pos.Y==mapSize.Y+1)
goto back;break;case RIGHTMOST_BUTTON_PRESSED:if(!Outside(pos.X,pos.Y))sign(
pos.X,pos.Y);break;case FROM_LEFT_2ND_BUTTON_PRESSED:if(!Outside(pos.X,pos.Y))
fun(pos.X,pos.Y);break;}}}}gotoxy(0,mapSize.Y);SetConsoleTextAttribute(hOut,1);
if(count<=bomb&&printf("\nyou win! "))break;if(!game){
printf("\nGame over! ");SetConsoleTextAttribute(hOut,4);for(i=0;i<mapSize.X*
mapSize.Y;i++)if(map[i]==9&&mark[i]){gotoxy(i%mapSize.X*2,i/mapSize.X);printf(
"●");}break;}SetConsoleTextAttribute(hOut,15);printf("time:%-5d\nresidue:%-5d",
(clock()-beginTime)/1000,bombCount);delay(1000/fps);}for(;;){ReadConsoleInput(
hIn,&Buf,1,&Result);pos=Buf.Event.MouseEvent.dwMousePosition;
if(Buf.Event.MouseEvent.dwButtonState){if(pos.Y==mapSize.Y)goto restart;if(
pos.Y==mapSize.Y+1)goto back;}if(GetAsyncKeyState(32)&0x8000)break;
Sleep(1000/fps);}}
运行结果:



相关文章:
C++ 80行 极简扫雷
一共5346个字符,MinGW编译通过(强烈不建议写这种代码!!!) 压行规则:一行不超过80个字符 代码: #include<windows.h> #include<stdio.h> #include<time.h> #def…...
常见VPS服务器附加组件一览
网络主机行业竞争非常激烈,因此主机服务提供商竭尽全力为客户提供完整的解决方案,其中包含构建和管理在线项目所需的一切。但客户通常有特定需求,因此需要不同的附加组件。在管理自己的网络服务器时尤其如此。 今天,我们将介绍您…...
Electron 使用Electron-build 进行打包
看完下面两篇就可以完成! 基于vue3vite的web项目改为Electron桌面应用(一)_vue3转electron-CSDN博客 将web项目打包成electron桌面端教程(二)vue3vitets_vue3 打包桌面端-CSDN博客 打包报错 1. 首先确定依赖包 npm …...
Springboot+Websocket+Security+Vue 实现弹幕推送功能
后端部分 (Spring Boot) 1. 创建一个 Spring Boot 项目 创建一个新的 Spring Boot 项目并添加以下依赖: <dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId…...
LangChain之网络爬虫
网络爬虫 概述 网络爬虫是LangChain中的一项关键功能,允许用户自动从互联网上收集信息。这项功能对于研究和数据收集尤其有价值,因为它可以大幅减少手动搜索和信息整理的工作量。 从网络收集内容有几个主要组件: Search搜索:使用…...
VueRouter 相关信息
VueRouter 是Vue.js官方路由插件,与Vue.js深度集成,用于构建单页面应用。构建的单页面是基于路由和组件,路由设定访问路径,将路径与组件进行映射。VueRouter有两中模式 :hash 和 history ,默认是hash模式。…...
[环境配置]Pycharm:Failed to start [PowerShell.exe]
解决方法,点Local旁边的 号,点击Command Prompt,即可在Pycharm中呼出控制台。 如果要修改Command Prompt的启动时访问的cmd.exe的路径,可以去Settings→Tools→Terminal中,修改Shell Path实现,改为cmd.exe…...
搜狗爬虫(www.sogou.com)IP及UA,真实采集数据
一、数据来源: 1、这批搜狗爬虫(www.sogou.com)IP来源于尚贤达猎头网站采集数据; 2、数据采集时间段:2023年10月-2024年7月; 3、判断标准:主要根据用户代理是否包含“www.sogou.com”和IP核实…...
北京青蓝智慧科技ITSS服务经理:长安链ChainBridge“链桥”问世 加速国家级区块链网络互联互通
8月5日,据国家区块链技术创新中心消息,我国首个完全自主控制的区块链软硬件技术系统——长安链,正式推出了全场景技术平台ChainBridge“链桥”。 此平台能够支持所有异构和同构的区块链进行协作,满足跨领域、跨地域、跨行业及跨层…...
音视频入门基础:WAV专题(5)——FFmpeg源码中解码WAV Header的实现
音视频入门基础:WAV专题系列文章: 音视频入门基础:WAV专题(1)——使用FFmpeg命令生成WAV音频文件 音视频入门基础:WAV专题(2)——WAV格式简介 音视频入门基础:WAV专题…...
爬虫:csv存储:写入和读取
目录 csv写入 csv读取 csv写入 import csv# data [ # (tf, 20, 180), # (dl, 20, 170), # (hc, 18, 190) # ] # header (姓名,年龄,身高) # # # csv写入数据会默认写一行隔一行 newline就是让它不要有空行 # with open(text.csv,w,encodingutf8,newline) as f:…...
Opencv-绘制几何图形
1. 绘制圆形 1.1 circle()函数原型 void cv::circle(InputOutputArray img, Point center, int radius, const Scalar & color, int thickness 1, int lineType LINE_8, int shift 0 ) img:需要绘制圆形的图像。 center:圆形的圆心位置坐标。 …...
ElasticSearch安装与集群部署
ElasticSearch安装与集群部署 很多小伙伴第一次接触ElasticSearch的时候是一脸愁容,这个东西他怎么用啊,不知道从哪里安装,那我们今天就着重从哪里下载?怎么下载?怎么安装?来研究一下吧! windows下载安装ElasticSearch 下载地址:https://www.elastic.co/cn/do…...
盘点12款企业常用源代码加密软件,源代码防泄密很重要!
在当今的商业环境中,源代码作为企业的核心资产之一,其安全性不容忽视。源代码的泄露可能导致企业丧失竞争优势、面临法律诉讼甚至经济损失。因此,选择合适的源代码加密软件成为企业保护知识产权和核心技术的关键步骤。 1. 安秉源代码加密软件…...
文件上传和下载
要想实现文件上传和下载,其实只需要下述代码即可: 文件上传和下载 import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import com.example.common.Result; import org.springframework.web.bind.annotation.*; import org.sprin…...
机械学习—零基础学习日志(高数22——泰勒公式理解深化)
核心思想:函数逼近 在泰勒的年代,如果想算出e的0.001次方,这是很难计算的。那为了能计算这样的数字,可以尝试逼近的思想。 但是函数又不能所有地方都相等,那退而求其次,只要在一个极小的范围,…...
Java | Leetcode Java题解之第318题最大单词长度乘积
题目: 题解: class Solution {public int maxProduct(String[] words) {Map<Integer, Integer> map new HashMap<Integer, Integer>();int length words.length;for (int i 0; i < length; i) {int mask 0;String word words[i];in…...
科普文:JUC系列之多线程门闩同步器Condition的使用和源码解读
一、概述 条件锁就是指在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件的出现才可以继续处理时使用的一种锁。 比如,在阻塞队列中,当队列中没有元素的时候是无法弹出一个元素的,这时候就需要阻塞在条件notEmpty上…...
Stable Diffusion绘画 | 图生图-基础使用介绍—提示词反推
按默认设置直接出图 拖入图片值图生图框中,保持默认设置,直接生成图片,出图效果如下: 因为重绘幅度0.7,所出图片与原图有差异,但整体的框架构图与颜色与原图类似。 输入关键词后出图 在正向提示词中输入…...
正点原子imx6ull-mini-Linux驱动之Linux SPI 驱动实验(22)
跟上一章一样,其实这些设备驱动,无非就是传感器对应寄存器的读写。而这个读写是建立在各种通信协议上的,比如上一章的i2c,我们做了什么呢,就是把设备注册成一个i2c平台驱动,这个i2c驱动怎么搞的呢ÿ…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
