游戏逻辑与 Windows 经典扫雷一致:左键翻开、右键插旗/取消插旗,自动递归展开空白区域,实时显示剩余雷数。
(界面基于 uifigure + uigridlayout,MATLAB R2019b 及以上版本可直接运行;旧版可用 figure+uicontrol 的兼容版本见文末)
一、运行方式
minesweeper(9,9,10); % 9×9、10颗雷
二、完整源码
function minesweeper(m,n,k)
% m 行、n 列、共 k 颗雷
%
% 用法示例:
% minesweeper(9,9,10) % 初级
% minesweeper(16,16,40) % 中级
% minesweeper(16,30,99) % 高级
% ---------- 1. 参数初始化 ----------
if nargin<3, k=floor(m*n*0.15); end % 默认15%雷
if k>m*n-9, error('雷数太多!'); end
rng('shuffle');
% 逻辑矩阵: -1 表示雷,>=0 表示周围雷数
board = zeros(m,n);
mineIdx = randperm(m*n,k);
board(mineIdx) = -1;
% 计算每个非雷格子的周围雷数
for i = 1:m
for j = 1:n
if board(i,j) ~= -1
ii = max(i-1,1):min(i+1,m);
jj = max(j-1,1):min(j+1,n);
board(i,j) = sum(board(ii,jj)==-1);
end
end
end
% 状态矩阵:0=未翻开,1=已翻开,2=插旗
state = zeros(m,n);
gameOver = false;
win = false;
% ---------- 2. GUI ----------
fig = uifigure('Name','MATLAB 扫雷','Resize','off', ...
'Position',[500 300 35*n+25 35*m

最低0.47元/天 解锁文章
822

被折叠的 条评论
为什么被折叠?



