我正在为任务创建一个简单的扫雷游戏,但是我无法使程序确定玩家是否获胜。我试图找到一个确定A的元素是否等于-2的函数,然后在while循环中使用它。
我已经使用一个简化的测试代码来尝试执行此操作,但是找不到任何可以执行我想做的功能的
到目前为止,我已经尝试了一切,要么只是继续要求更多输入,即使应该说游戏结束了,要么完全跳过了while循环。最后一件事可能发生了,因为开始数组的所有元素都相等。
我看过xor,unique,setdiff,intersect,ismember isempty,还有可能我不记得了。
由于这不是完整的代码,因此我每次都对标志问题回答是,以便将所有元素从-2更改为-3。
我也知道,这不是确定玩家是否获胜的最好方法,因为它并没有考虑所有标志是否正确放置,但是我想在此之前先对这部分进行排序我继续说:)
A=zeros(2)
selected=0;
flag=-3
for r=1:2
for c=1:2
A(r,c)==-2;
end
end
while % any of the elements in A are equal to -2
while selected~=-1
selectRow=input('Which row is the cell you would like to access on? ');
selectCol=input('Which column is the cell you would like to access on? ');
selectFlag=input('Would you like to put a flag in this cell? ','s');
if selectRow<=2 && selectRow>=1 && selectCol<=2 && selectCol>=1
while strcmp(selectFlag, 'yes') || strcmp(selectFlag, 'no')
if strcmp(selectFlag, 'yes')
A(selectRow,selectCol)=flag;
disp(A);
elseif strcmp(selectFlag, 'no')
selected=mineBoard(selectRow,selectCol);
A(selectRow,selectCol)=selected;
disp(A);
end
end
end
end
fprintf('You have hit a mine. Please restart.\n');
end
fprintf('Congrats! You have won!');
答案 0 :(得分:0)
有多种方法可以知道A
的条目是否等于-2以及如何与所有这些条目的位置进行交互。
any
功能
正如@ etmuse和@ Wolfie在评论中所建议的那样,any
函数可能是最好的选择。请注意,在文档中,更高级的选项可用于版本R2018b和更高版本。
% MATLAB R2017a
rng(8675309) % For reproducibility (ensure some -2 appear)
A = randi([-4 0],4) % Generate example matrix
any(A == -2,1) % Test columns of A
any(A == -2,2) % Test rows of A
逻辑索引
% Use a logical index
idx = (A == -2)
指数
使用索引有点棘手。
% Use the indices directly.
ind = find(A==-2)
请注意,如果将数组A
转换为矢量形式,则会为您提供索引。
A(:) % Force column vector
reshape(A(:),4,4)' % Reshape into matrix
披露:如果@etmuse或@Wolfie使用any
函数发布答案,将从我的答案中删除该答案,或制作此社区Wiki。这是他们的主意。