?? saolei.m
字號:
% 摘要:
% 使用matlab寫的一款掃雷游戲,格子使用axes上的網格表示。
% 方向鍵可以改變當前位置,按"="鍵或者"end"鍵相當于windows
% 下的雙擊作用,按空格鍵標記雷的位置。
%
% 程序未經仔細調試還存在一些bug。
%
% 程序如下:
%
% 主程序:
% 掃雷 mine sweeping
close all;clc;clear;
M=16; % 行數
N=16; % 列數
NL=40; % 雷的總數
axes('Position',[0.2,0.1,0.6,0.8]);
% % \copyright: zjliu
% % Author's email: zjliu2001@163.com
set(gcf,'DoubleBuffer','on');
% set(gca,'YDir','reverse');
hold on;
% for m=0:M;
% plot([0.5+m,0.5+m],[0.5,N+0.5],'k');
% end
for n=0:N;
plot([0.5,0.5+M],[0.5+n,n+0.5],'k');
end
rr=randperm(M*N);
Zk=zeros(M,N);
Zk(rr(1:NL))=1;
Nu=zeros(M,N);
dm=[-1,-1,-1,0,0,1,1,1];
dn=[-1,0,1,-1,1,-1,0,1];
for m=1:M;
for n=1:N;
if Zk(m,n)==0;
for k=1:8;
mt=m+dm(k);
nt=n+dn(k);
if mt>=1&&mt<=M&&nt>=1&&nt<=N;
Nu(m,n)=Nu(m,n)+Zk(mt,nt);
end
end
end
end
end
mt=8;nt=8;
ha=plot(mt,nt,'rs','markersize',10);
% Sw=zeros(M,N);
% ht=title(['坐標: (',num2str(mt),',',num2str(nt),')']);
% Yk=ylabel({'剩余','雷數',num2str(sum(Zk(:)))},...
% 'fontsize',16,'rotation',0,'color','r');
% set(gcf,'KeyPressFcn',['K=get(gcf,''CurrentKey'');',...
% 'if K(1)==117;nt=nt-1;if nt>0.5&nt<N+0.5;',...
% 'set(ha,''Xdata'',mt,''YData'',nt);else nt=nt+1;end;end;',...
% 'if K(1)==100;nt=nt+1;if nt>0.5&nt<N+0.5;',...
% 'set(ha,''Xdata'',mt,''YData'',nt);else nt=nt-1;end;end;',...
% 'if K(1)==108;mt=mt-1;if mt>0.5&mt<M+0.5;',...
% 'set(ha,''Xdata'',mt,''YData'',nt);else mt=mt+1;end;end;',...
% 'if K(1)==114;mt=mt+1;if mt>0.5&mt<M+0.5;',...
% 'set(ha,''Xdata'',mt,''YData'',nt);else mt=mt-1;end;end;',...
% 'set(ht,''string'',[''坐標: ('',num2str(mt),'','',num2str(nt),'')'']);',...
% 'if K(1)==115;plot(mt,nt,''r.'',''markersize'',20,''EraseMode'',''xor'');',...
% 'Sw(mt,nt)=~Sw(mt,nt);Zk(mt,nt)=~Zk(mt,nt);end;',...
% 'if K(1)==101;if Zk(mt,nt)==1;title(''游戲結束,按p鍵重新開始'');',...
% 'set(gcf,''KeyPressFcn'',''K=get(gcf,''''CurrentKey'''');if K(1)==112;sweep_mine;end;'');',...
% 'plot(mt,nt,''r.'',''markersize'',24,''EraseMode'',''xor'');for m=1:M;for n=1:N;',...
% 'if Zk(m,n)>0.5;plot(m,n,''b.'',''markersize'',20);end;end;end;else ',...
% '[mm,nn]=looks(mt,nt,M,N,Zk);for k=1:length(mm);',...
% 'text(mm(k)-0.2,nn(k),num2str(Nu(mm(k),nn(k))));end;end;end;',...
% 'if K(1)==119;for m=1:M;for n=1:N;if Zk(m,n)==1;',...
% 'plot(m,n,''r.'',''markersize'',20,''EraseMode'',''xor'');end;end;end;',...
% 'for m=1:M;for n=1:N;text(m-0.2,n,num2str(Nu(m,n)));end;end;end;',...
% 'if sum(sum(abs(Zk-Sw)))==0;title(''你成功了'');',...
% 'set(gcf,''CurrentKey'',[]);end;',...
% 'set(Yk,''string'',{''剩余'',''雷數'',num2str(sum(Zk(:)))});']);
% % 探雷函數[請另存為looks.m文件]:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -