给我一个matlab的扫雷游戏代码
时间: 2023-06-16 10:05:05 浏览: 246
以下是一个简单的 MATLAB 扫雷游戏代码:
```matlab
clc;
clear;
close all;
% 游戏设置
n = 10; % 网格大小
num_mines = 10; % 地雷数量
% 初始化游戏板
board = zeros(n);
% 随机放置地雷
mines = randperm(n^2, num_mines);
board(mines) = -1;
% 计算每个格子周围的地雷数量
for i = 1:n
for j = 1:n
if board(i,j) ~= -1
% 计算周围8个格子的坐标
coords = [i-1,j-1; i-1,j; i-1,j+1; i,j-1; i,j+1; i+1,j-1; i+1,j; i+1,j+1];
% 去除越界坐标
coords(coords(:,1)<1 | coords(:,1)>n | coords(:,2)<1 | coords(:,2)>n,:) = [];
% 计算周围地雷数量
board(i,j) = sum(board(sub2ind([n,n],coords(:,1),coords(:,2))) == -1);
end
end
end
% 游戏开始
game_over = false;
while ~game_over
% 显示当前游戏板
disp(board)
% 玩家输入下一步操作
choice = input('Enter your choice (row, column, flag[f]/unflag[u]): ');
row = choice(1);
col = choice(2);
action = choice(3);
% 标记/取消标记地雷
if action == 'f'
board(row,col) = -2;
elseif action == 'u'
board(row,col) = 0;
end
% 挖开格子
if board(row,col) == -1
disp('You lose!');
board(row,col) = -3;
game_over = true;
elseif board(row,col) == 0
board(row,col) = -4;
% 递归挖开相邻的空格子
coords = [row-1,col-1; row-1,col; row-1,col+1; row,col-1; row,col+1; row+1,col-1; row+1,col; row+1,col+1];
coords(coords(:,1)<1 | coords(:,1)>n | coords(:,2)<1 | coords(:,2)>n,:) = [];
for i = 1:size(coords,1)
if board(coords(i,1),coords(i,2)) >= 0
board(coords(i,1),coords(i,2)) = -4;
end
end
end
% 检查游戏是否结束
if sum(sum(board == 0)) == num_mines
disp('You win!');
game_over = true;
end
end
```
运行这个代码将会生成一个 $10\times 10$ 的扫雷游戏板,其中包含 $10$ 个地雷。你可以根据提示逐步操作,尝试标记/取消标记地雷,并挖开格子,直到游戏结束。
阅读全文