【matlab】拆雷的程序

前言

法术的仙意,无法遮盖你千年的痴迷。——《仙逆》

在这里插入图片描述


\;\\\;\\\;

目录

    • 前言
    • 拆雷

拆雷

function Bomb(n,mm)
clear;
close;
if nargin ~= 2n = [22,18];mm = 65;
end
if mm + 1 > n(1) * n(2)error('Setting error');
endf1 = figure('Name','Bombs','NumberTitle','off','Color',[1,1,1],...'Position',[100,50,900,600],'WindowButtonDownFcn',@BDF,...'WindowButtonMotionFcn',@BMF,'WindowButtonUpFcn',@BUF);
ax = axes(f1,'XTick',0.5:(n(1)+0.5),'YTick',0.5:(n(2)+0.5),'XColor',...[0.5,0.5,0.5],'YColor',[0.5,0.5,0.5],'Color',[1,1,1],'Parent',f1,...'Position',[0,0,13/14,0.98],'XTickLabel',[],'YTickLabel',[],...'XGrid','on','YGrid','on','XLim',[0,n(1)+1],'YLim',[0,n(2)+1],...'DataAspectRatio',[1,1,1]);
T = uicontrol(f1,'Style','text','BackgroundColor',[1,1,1],'String',...num2str(mm),'Units','normalized','Position',[13/14,0.80,1/14,0.1],...'FontSize',18,'FontWeight','bold');
hold onfor i = n(1):-1:1for j = n(2):-1:1M(i,j) = patch(ax,[i,i+1,i+1,i]-0.5,[j,j,j+1,j+1]-0.5,...[0.8,0.8,0.8],'EdgeColor',[0.7,0.7,0.7]);F(i,j) = image(ax,[i-0.4,i+0.4],[j-0.4,j+0.4],[]);end
endxd = 1;
yd = 1;
xm = 1;
ym = 1;
xu = 1;
yu = 1;
PC = [0.8,0.8,0.8]; % last color
CD = uint8([0,0,225;2,129,2;253,7,7;20,20,158;...128,1,1;0,128,128;10,10,10;128,128,128]); % CData of Number
MT = "";
btn_exit = "";FLAG = zeros(9,9,3,'uint8'); % Draw Flag
FLAG(:,:,1) = [204 204 204 204 204 204 204 204 204;204 0 0 0 0 0 0 0 204;204 204 0 0 0 0 0 204 204;204 204 204 204 0 204 204 204 204;204 204 204 204 255 204 204 204 204;204 204 255 255 255 204 204 204 204;204 204 204 255 255 204 204 204 204;204 204 204 204 255 204 204 204 204;204 204 204 204 204 204 204 204 204];
FLAG(:,:,2) = [204 204 204 204 204 204 204 204 204;204 0 0 0 0 0 0 0 204;204 204 0 0 0 0 0 204 204;204 204 204 204 0 204 204 204 204;204 204 204 204 0 204 204 204 204;204 204 0 0 0 204 204 204 204;204 204 204 0 0 204 204 204 204;204 204 204 204 0 204 204 204 204;204 204 204 204 204 204 204 204 204];
FLAG(:,:,3) = [204 204 204 204 204 204 204 204 204;204 0 0 0 0 0 0 0 204;204 204 0 0 0 0 0 204 204;204 204 204 204 0 204 204 204 204;204 204 204 204 0 204 204 204 204;204 204 0 0 0 204 204 204 204;204 204 204 0 0 204 204 204 204;204 204 204 204 0 204 204 204 204;204 204 204 204 204 204 204 204 204];BOMB = zeros(15,15,3,'uint8'); % draw the Bomb
BOMB(:,:,1) = [255 255 255 255 255 255 255 255 255 255 255 255 255 255 255;255 255 255 255 255 255 255 0 255 255 255 255 255 255 255;255 255 255 255 255 255 255 0 255 255 255 255 255 255 255;255 255 255 0 255 0 0 0 0 0 255 0 255 255 255;255 255 255 255 0 0 0 0 0 0 0 255 255 255 255;255 255 255 0 0 0 0 0 0 0 0 0 255 255 255;255 255 255 0 0 0 0 0 0 0 0 0 255 255 255;255 0 0 0 0 0 0 0 0 0 0 0 0 0 255;255 255 255 0 0 255 255 0 0 0 0 0 255 255 255;255 255 255 0 0 255 255 0 0 0 0 0 255 255 255;255 255 255 255 0 0 0 0 0 0 0 255 255 255 255;255 255 255 0 255 0 0 0 0 0 255 0 255 255 255;255 255 255 255 255 255 255 0 255 255 255 255 255 255 255;255 255 255 255 255 255 255 0 255 255 255 255 255 255 255;255 255 255 255 255 255 255 255 255 255 255 255 255 255 255];
BOMB([9,10],[6,7],[2,3]) = 255;MDATA = zeros(n,'logical'); % If this position was open
BF = zeros(n,'logical'); % Bombs found
NClick = true; % First protect
BDATA = zeros(n); % locate of Bomb
Ndata = zeros(n); % Map information
aa = 1;
bb = 1;
cc = false;function BDF(~,~)m = get(ax,'CurrentPoint');xd = round(m(1,1));yd = round(m(1,2));MT = get(f1,'SelectionType');if xd>=1 && xd<=n(1) && yd>=1 && yd<=n(2) && MDATA(xd,yd) &&...Ndata(xd,yd) > 0 && (MT == "normal" || MT == "alt")[a,b] = specialgrid(xd,yd);C = zeros(n,'logical');C(a,b) = true;[aa,bb] = find(C & ~MDATA & ~BF);for ii = [aa,bb].'M(ii(1),ii(2)).FaceColor = [0.6,0.6,0.6];endcc = true;endif NClickBset = randperm(n(1) * n(2) - 1,mm) + 1;Npoint = (yd - 1) * n(1) + xd;if ismember(Npoint,Bset)Bset(Bset <= Npoint) = Bset(Bset <= Npoint) - 1;endBDATA(Bset) = 1;Ndata = conv2(BDATA,[1,1,1;1,0,1;1,1,1],'same');Ndata(BDATA == 1) = -1;NClick = false;endendfunction BMF(~,~)M(xm,ym).FaceColor = PC;M(xm,ym).FaceAlpha = 1;m = get(ax,'CurrentPoint');x = sort([1,round(m(1,1)),n(1)]);y = sort([1,round(m(1,2)),n(2)]);xm = x(2);ym = y(2);PC = M(xm,ym).FaceColor;M(xm,ym).FaceColor = [0.8,0.8,0.8];M(xm,ym).FaceAlpha = 0.5;endfunction BUF(~,~)if ccfor ii = [aa,bb].'M(ii(1),ii(2)).FaceColor = [0.8,0.8,0.8];endcc = false;endm = get(ax,'CurrentPoint');xu = round(m(1,1));yu = round(m(1,2));if xd==xu && yd==yu && xu>=1 && yu>=1 && xu<=n(1) && yu<=n(2)if ~MDATA(xu,yu)if MT == "normal"if ~BF(xu,yu)if Ndata(xu,yu) == -1BF(xu,yu) = true;M(xu,yu).FaceColor = [1,0,0];PC = [1,0,0];F(xu,yu).CData = BOMB;if btn_exit ~= "end"ENDq(false)endelseMDATA(xu,yu) = true;M(xu,yu).FaceColor = [1,1,1];PC = [1,1,1];if Ndata(xu,yu) == 0swap(xu,yu)elseTEXT(xu,yu)endendendelseif MT == "alt"if ~BF(xu,yu)BF(xu,yu) = true;F(xu,yu).CData = FLAG;T.String = num2str(str2double(T.String) - 1);elseif btn_exit ~= "end"BF(xu,yu) = false;F(xu,yu).CData = [];T.String = num2str(str2double(T.String) + 1);endendelseif Ndata(xu,yu) > 0[a,b] = specialgrid(xu,yu);if sum(BF(a,b),'all') == Ndata(xu,yu) &&...sum(BF(a,b),'all') < sum(~MDATA(a,b),'all')C = zeros(n,'logical');C(a,b) = true;[a,b] = find(C & ~MDATA & ~BF);for ii = [a,b].'MDATA(ii(1),ii(2)) = true;if Ndata(ii(1),ii(2)) == -1BF(ii(1),ii(2)) = true;MDATA(ii(1),ii(2)) = false;M(ii(1),ii(2)).FaceColor = [1,0,0];F(ii(1),ii(2)).CData = BOMB;if btn_exit ~= "end"ENDq(false)endelseM(ii(1),ii(2)).FaceColor = [1,1,1];PC = [1,1,1];if Ndata(ii(1),ii(2)) == 0swap(ii(1),ii(2))elseTEXT(ii(1),ii(2))endendendendendendif (all(BDATA == ~MDATA,'all') ||...all(BDATA == BF,'all')) && btn_exit ~= "end"ENDq(true)endendfunction swap(x,y)C = zeros(n(1),n(2),'logical');C_ = C;C(x,y) = true;while ~all(C == C_,'all')C_ = C;[x,y] = find((~Ndata | BF) & C);for ii = [x,y].'if Ndata(ii(1),ii(2)) == 0[a,b] = specialgrid(ii(1),ii(2));C(a,b) = ~BF(a,b);endendend[x,y] = find(C);for ii = [x,y].'MDATA(ii(1),ii(2)) = true;M(ii(1),ii(2)).FaceColor = [1,1,1];if Ndata(ii(1),ii(2)) ~= 0TEXT(ii(1),ii(2))endendendfunction [a,b] = specialgrid(x,y)if x == 1a = [1,2];elseif x == n(1)a = [n(1)-1,n(1)];elsea = x-1:x+1;endif y == 1b = [1,2];elseif y == n(2)b = [n(2)-1,n(2)];elseb = y-1:y+1;endendfunction TEXT(x,y)text(x-0.2,y,num2str(Ndata(x,y)),'FontSize',15,'FontWeight',...'bold','Color',CD(Ndata(x,y),:));endfunction ENDq(a)if abtn_exit = questdlg('You Win !','YouWin',...'restart','close','restart');if isempty(btn_exit)btn_exit = "end";endif strcmp(btn_exit,'restart')Bomb;elseif strcmp(btn_exit,'close')close; clear;endelsebtn_exit = questdlg('You Lose.',...'YouLose','restart','close','restart');if isempty(btn_exit)btn_exit = 'end';endif strcmp(btn_exit,'restart')Bomb;elseif strcmp(btn_exit,'close')close; clear;endendend
end

\;\\\;\\\;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/267811.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊S3V4验签与MINIO验签区别

1、先看下官方文档 AWS S3V4 DEMO 2、实际调用试试 1&#xff09;代码 // 计算auth// for a simple GET, we have no body so supply the precomputed empty hashMap<String, String> headers new HashMap<String, String>();headers.put("x-amz-content…

2024年程序员必须掌握的10款开发工具

Chat GPT的升级节奏让人们越来越惊讶的同时&#xff0c;也让大家感觉到了压力&#xff0c;在如此快节奏的互联网世界中&#xff0c;开发人员需要不断学习与更新知识&#xff0c;保持领先地位并高效地交付高质量软件。 无论是集成开发环境 (IDE)、版本控制系统、测试工具、协作…

gcc tips - GCC使用技巧与高级特性

目录 1. 获取 GCC 编译器预定义的宏 2. 列出依赖的头文件 3. 保存预处理结果到文件&#xff08;展开define, 展开include header&#xff09; 4. 写回调跟踪记录函数运行 -finstrument-functions 5. -fdump-rtl-expand 画函数调用关系图 GCC&#xff0c;全称GNU Compiler …

利差是什么?anzo Capital昂首资本换个角度学利差

在交易论坛上最常问也是问的最多的一个问题就是“外汇中的利差是多少?”&#xff0c;今天让anzo Capital昂首资本换个角度试着找出答案。 在现代生活中&#xff0c;我们必须为商品和服务付费&#xff0c;包括金融市场上提供的商品和服务。同样的在金融市场中也需要为商品和服…

MYSQL练题笔记-子查询-电影评分

一、题目相关内容 1&#xff09;相关的表 2&#xff09;题目 3&#xff09;帮助理解题目的示例&#xff0c;提供返回结果的格式 二、自己初步的理解 1.字典序是指从前到后比较两个字符串大小的方法。 首先比较第1个字符&#xff0c;如果不同则第1个字符较小的字符串更小&…

linux(5):linux基础命令第五弹

在linux基础命令第四弹中http://t.csdnimg.cn/tvuNl我们了解了echo、tail命令、管道符和vim文本编辑器的相关内容。这一篇我们会了解关于命令选项的说明 我们在之前的学习中&#xff0c;发现命令中的选项是非常多的&#xff0c;比如-l -c -m -r -w 等等&#xff0c;命令有很多&…

12月11日作业

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示登录成功&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#xff0c;弹…

Python3 中常见的数据类型

目录 数字(Number)总结 字符串(String)字符串运算符字符串格式化字符串的截取总结 List&#xff08;列表&#xff09;更新列表删除列表元素列表函数&方法总结 Tuple&#xff08;元组&#xff09;修改元组删除元组总结 Set&#xff08;集合&#xff09;Dictionary&#xff0…

Anaconda安装-超详细版(2023)

Anaconda安装 - 超详细版&#xff08;2023&#xff09; 前言&#xff1a;彻底卸载pythonAnaconda下载地址安装详细步骤配置环境变量检验安装是否成功更改conda源&#xff08;后续安装第三方库可以加快速度&#xff09;超详细彻底卸载Anaconda教程Tensorflow-gpu 安装 前言&…

基于FPGA的视频接口之高速IO(光纤)

简介 对于高速IO口配置光纤&#xff0c;现在目前大部分开发板都有配置&#xff0c;且也有说明&#xff0c;在此根据自己的工作经验以及对于各开发板的说明归纳 通过高速IO接口&#xff0c;以及硬件配置&#xff0c;可以实现对于光纤的收发功能&#xff0c;由于GTX的速率在500Mb…

【NR技术】NR NG-RAN整体架构 -网络接口以及无线协议框架(四)

1 引言 本博文介绍NR NG-RAN的网络节点间的接口以及无线协议框架。网络接口介绍包括RAN和NGC之间的NG接口&#xff1b;无线协议框架包括用户面和控制面协议。 2 NG接口 2.1 NG用户面接口 NG-U (user plane interface)是NG-RAN节点与UPF之间的接口。NG接口的用户平面协议栈如图…

算法Day28 二进制差异序列(格雷码)

二进制差异序列&#xff08;格雷码&#xff09; Description n 位二进制差异序列是一个由2^n个整数组成的序列&#xff0c;其中&#xff1a; 每个整数都在范围[0, 2^n - 1]内&#xff08;含0和2^n - 1&#xff09; 第一个整数是0 一个整数在序列中出现不超过一次 每对相邻整数…