如何创建一个扫雷艇董事会使用矩阵

30视图(30天)
作品简介:
我目前在做一个项目的基础上游戏 扫雷艇 通过 创建一个扫雷游戏板使用9 x9矩阵。下面的代码我输入:
清晰;
clc;
网格= 0 (9)
i = 1:5
%进入我的坐标
row_coord =输入(的输入行坐标(1 - 9):);
col_coord =输入(的输入列坐标(1 - 9):);
流(' \ n ');
%与9号我指定坐标
网格(row_coord col_coord) = 9;
结束
(行,坳)=大小(网格)
r = 1:行%处理所有列在每一行
c = 1:坳
如果r = = 1 & & c = = 1%的第一个角落(左上)
如果网格(r、c) = = 9%如果协调,协调修改的离开
elseif网格(r、c) = = 0%如果协调不是我的,重新指定坐标作为煤矿的数量是2 x2坐标附近
网格(r、c) = =长度(找到(网格(r, r + 1, c: c + 1), 9))
结束
elseifr = = 1 & & c = = 9%的第二个角落(右上角)
如果网格(r、c) = = 9%如果协调,协调修改的离开
elseif网格(r、c) = = 0%如果协调不是我的,重新指定坐标作为煤矿的数量是2 x2坐标附近
网格长度(r、c) =(找到(网格(r, r + 1,颈- 1:c), 9))
结束
elseifr = = 9 & & c = = 1%第三角(左下)
如果网格(r、c) = = 9%如果协调,协调修改的离开
elseif网格(r、c) = = 0%如果协调不是我的,重新指定坐标作为煤矿的数量是2 x2坐标附近
网格长度(r、c) =(找到(网格(r 1: r、c: c + 1), 9))
结束
elseifr = = 9 & & c = = 9%的第四个角落(右下角)r = =
如果网格(r、c) = = 9%如果协调,协调修改的离开
elseif网格(r、c) = = 0%如果协调不是我的,重新指定坐标作为煤矿的数量是2 x2坐标附近
网格长度(r、c) =(找到(网格(r 1: r,颈- 1:c), 9))
结束
elseifr = = 1 & & c > = 2 & & c < = 8%第一行,列2 - 8
如果网格(r、c) = = 9%如果协调,协调修改的离开
elseif网格(r、c) = = 0%如果协调不是我的,重新指定坐标作为煤矿的数量是2 x3坐标附近
网格长度(r、c) =(找到(网格(r, r + 1,颈- 1:c + 1), 9))
结束
elseifr = = 9 & & c > = 2 & & c < = 8%上(下)行、列2 - 8
如果网格(r、c) = = 9%如果协调,协调修改的离开
elseif网格(r、c) = = 0%如果协调不是我的,重新指定坐标作为煤矿的数量是2 x3坐标附近
网格长度(r、c) =(找到(网格(r 1: r,颈- 1:c + 1), 9))
结束
elseifc = = 1 & & r > = 2 & & r < = 8%左栏,行2 - 8
如果网格(r、c) = = 9%如果协调,协调修改的离开
elseif网格(r、c) = = 0%如果协调不是我的,重新指定坐标作为煤矿的数量是3 x2坐标附近
网格长度(r、c) =(找到(网格(r 1: r + 1, c: c + 1), 9))
结束
elseifc = = 9 & & r > = 2 & & r < = 8%在右列,行2 - 8
如果网格(r、c) = = 9%如果协调,协调修改的离开
elseif网格(r、c) = = 0%如果协调不是我的,重新指定坐标作为煤矿的数量是3 x2坐标附近
网格长度(r、c) =(找到(网格(r 1: r + 1,颈- 1:c), 9))
结束
其他的
如果网格(r、c) = = 9%如果协调,协调修改的离开
elseif网格(r、c) = = 0%如果协调不是我的,重新指定坐标作为煤矿的数量是3 x3坐标附近
网格长度(r、c) =(找到(网格(r 1: r + 1,颈- 1:c + 1), 9))
%如果长度(找到(网格(r 1: r + 1,颈- 1:c + 1), 9)) ~ = 0
%网格长度(r、c) =(找到(网格(r 1: r + 1,颈- 1:c + 1), 9))
% elseif长度(找到(网格(r 1: r + 1,颈- 1:c + 1), 9)) = = 0
%网格(r、c) = 0
%结束
结束
结束
结束
结束
解释:
程序流程为每一行董事会所有列。程序首先从输入我收集五个位置,我指定坐标的矩阵数量9。通过分析处理的四个角落周围两行两列矿山如果它不是我的。顶部和底部行分析了两行三列,和左和右列在三行两列分析。其余的坐标分析三行三列。如果协调是我的,那么它是离开的,程序继续处理巢坐标。如果坐标不是我,程序分析周围的三行三列分别协调矿山,涉及,重新指定坐标与矿山周围的数量。
问题:
当测试,程序不正确处理每一个坐标,和通常会打印/显示不准确的数字。例如,如果一个坐标连续四周是一个我的,所有后续的坐标相同的行数量将增加1。其他数据包括5 4或3,即使煤矿中广泛分布。这种错误的一个例子是这样的:
矿井坐标是(1),(3),(5)、(7)、(9,9)。结果证明了上述矿山周围的坐标不准确显示煤矿的数量。
如果有人能够提供协助调试我的编码,请随意。

接受的答案

杰夫•海斯
杰夫•海斯 2021年5月17日
亚伦-注意左上角代码
网格(r、c) = =长度(找到(网格(r, r + 1, c: c + 1), 9))
给你与= =,应该使用赋值运算符
网格长度(r、c) =(找到(网格(r, r + 1, c: c + 1), 9));
(我加了分号结束的时候行抑制输出。)现在考虑如何使用 找到 作为
找到(网格(r, r + 1, c: c + 1), 9)
这将从文档()返回第一个 9 指数对应的非零元素 网格。所以这就是为什么你获得不同的值的元素没有地雷。相反,你要比较这些值9
找到(网格(r, r + 1, c: c + 1) = = 9)
试着上面,看看会发生什么!
1评论
亚伦陈
亚伦陈 2021年5月17日
编辑:亚伦陈 2021年5月17日
只是修改和测试代码和它的工作原理,非常感谢!

登录置评。

答案(1)

里克
里克 2021年5月17日
Matlab代表矩阵实验室的名称。那将是一种耻辱不使用数组处理权力。
如果你设置的矿山的位置1(例如逻辑数组),你可以使用一个卷积来创建 网格 变量:
矿山= false (9, 9);
矿山(1,- 1)= true;矿山(3、3)= true;矿山(5,5)= true;矿山(7)= true;矿山(9,9)= true;
网格= convn(矿山、(3、3),“相同”);
网格(矿山)= 9;
disp(网格)
9 1 0 0 0 0 0 0 0 1 2 1 1 0 0 0 0 0 0 1 9 0 0 0 0 0 0 1 1 2 1 1 0 0 0 0 0 0 1 9 0 0 0 0 0 0 1 1 2 1 1 0 0 0 0 0 0 1 9 0 0 0 0 0 0 1 1 2 1 0 0 0 0 0 0 0 1 9
这两行代码替换整个代码。经常改变策略提供了更大的收益比优化单一选择策略。

类别

找到更多的在棋盘游戏帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的