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驱动怎么搞的呢ÿ…...
IPFS去中心化存储实战指南:黑马程序员音乐播放器项目开发完整教程
IPFS去中心化存储实战指南:黑马程序员音乐播放器项目开发完整教程 【免费下载链接】BlockChain 黑马程序员 120天全栈区块链开发 开源教程 项目地址: https://gitcode.com/gh_mirrors/blockchain95/BlockChain 你是否想过如何构建一个真正去中心化的音乐播放…...
打不开JupyterLab
因为安装某些依赖导致JupyterLab的依赖被动升级或降级,从而影响了JupyterLab的运行,此时可以SSH登录到实例,然后输入jupyter-lab命令进行确认,如果执行命令报错则说明是此问题,那么可以通过pip install jupyterlab再次…...
2026论文顶级降AI率工具大曝光:一键把AIGC率降至安全线!
步入2026年,学术圈的规则已经彻底变了味。过去那种只盯着查重率的“降重焦虑”早就被更可怕的“降AI焦虑”取代了。AI检测算法越来越聪明,高校审核标准也越来越严苛,光是把重复率压下去已经完全不够用了。现在摆在学生和科研人员面前的难题是…...
AB包相关知识
Lua与AB包/Addressables以及YooAsset 摘自千问: Lua 是菜谱(逻辑):决定了菜怎么做,味道如何。因为你需要随时换菜谱(热更新),所以菜谱不能死板地印在墙上(编译进主包&a…...
基于PIC32单片机实现Android USB音频转SPDIF输出的DIY方案
1. 项目概述:为Android设备打造一个高保真SPDIF音频接口作为一名长期折腾嵌入式音频和家庭影院的玩家,我经常遇到一个痛点:手头那些性能不错的Android手机或平板,其内置的3.5mm耳机孔或者USB-C口的音频输出质量,在连接…...
Java网络编程基础分享
在学习 Java 的过程中,网络编程是非常重要的一环。无论是后端开发、分布式系统、即时通讯、文件传输,还是游戏服务、物联网设备,都离不开网络通信一、计算机网络基础1.1 什么是计算机网络把不同地理位置、具有独立功能的计算机,通…...
Sora 2 GIF导出速度提升300%?20年多媒体架构师亲授GPU加速转码链路(CUDA 12.4 + cuVID硬编实测)
更多请点击: https://kaifayun.com 第一章:Sora 2 GIF导出方法概览 Sora 2 并非 OpenAI 官方发布的模型,当前(截至2024年)并无名为“Sora 2”的公开产品。因此,所谓“Sora 2 GIF导出”实为社区对视频生成工…...
机器学习赋能矩方法:破解稀薄气体强非平衡流动模拟难题
1. 项目概述:当矩方法遇见机器学习在计算流体力学领域,模拟稀薄气体动力学和强非平衡流动,一直是个让工程师和科学家们头疼的“硬骨头”。想象一下,你正在设计一架高超音速飞行器,当它以数倍音速在大气层边缘飞行时&am…...
Oracle数据库的DBCA界面创建数据库
一、采用DBCA界面方式创建数据库搜索dbca用管理员去运行疯狂的点下一步采用默认就行到监听这里会出有一些问题出问题了先把Enterprise Manager关掉就行,出问题了能自己找出来就行,一般不建议关掉,我这里直接图方便了这里选择所有账号使用同一…...
全方位防护矿山开采三维透明化智能安全防控整体方案
依托黎阳之光核心技术矿山开采三维透明化智能安全防控整体方案一、方案前言1.建设背景矿山开采井下巷道错综复杂、采掘工作面地质隐蔽,顶板、透水、瓦斯、边坡失稳、三违作业、设备故障为高发安全风险。传统二维监控、分散监测系统存在场景碎片化、地质不可视、风险…...
