自己写了一个寻机头的小游戏,在随机放置第二个飞机的时候有时候运行会显示“ || 和 && 运算符的操作数必须能够转换为逻辑标量值”,但是放置第一个飞机的时候就不会有问题,求帮忙看一下代码是那个地方逻辑出错了吗?
下面是部分代码:
plane=zeros(10);%设置矩阵
v1=randi(100);%随机生成第一个机头位置下标
while true
if v1==1||v1==2||v1==9||v1==10||v1==11||v1==12||v1==19||v1==20||v1==81||v1==82||v1==89||v1==90||v1==91||v1==92||v1==99||v1==100
v1=randi(100);%重新生成机头下标
else
break
end
end%利用randi函数生成机头位置下标并利用while循环排除机头不能出现的位置
[m,n]=size(dir1);
rownum=randi([1,m],1,1);%随机选择一行
ntx1=dir1(rownum,1);%将被选中行中的x坐标赋值给ntx1,ntx1代表紧靠机头的蓝色方格的行数
nty1=dir1(rownum,2);%将被选中行中的x坐标赋值给nty1,nty1代表紧靠机头的蓝色方格的列数
%此时飞机方向已确定
if ntx1==tx1+1%机头朝上的排列
plane([v1+1,v1+2,v1+3,v1-9,v1-19,v1+11,v1+21,v1-7,v1+13])=[1,1,1,1,1,1,1,1,1];%将机身赋值为1
elseif ntx1==tx1-1%机头朝下的排列
plane([v1-1,v1-2,v1-3,v1+9,v1+19,v1-11,v1-21,v1+7,v1-13])=[1,1,1,1,1,1,1,1,1];%将机身赋值为1
elseif nty1==ty1+1%机头朝左的排列
plane([v1+10,v1+20,v1+30,v1+9,v1+8,v1+11,v1+12,v1+29,v1+31])=[1,1,1,1,1,1,1,1,1];%将机身赋值为1
else%机头朝右的排列
plane([v1-10,v1-20,v1-30,v1-9,v1-8,v1-11,v1-12,v1-29,v1-31])=[1,1,1,1,1,1,1,1,1];%将机身赋值为1
end
disp(plane)
%----------------------第一个飞机放置完毕---------------------------------------------------
%----------------------开始放置第二个飞机---------------------------------------------------
plane(v1)=2;%设置第一个机头参数为2
[tx1,ty1]=find(plane==2);%获取机头坐标并赋值给tx1,ty1
dir1=[[tx1+1 ty1];[tx1-1 ty1];[tx1 ty1+1];[tx1 ty1-1]];%机头四周的位置坐标;机头位置【上,下,左,右】
if ty1<3||ty1>8||tx1>7
delnum1=1;%排除机头朝上的可能性
end
if ty1<3||ty1>8||tx1<4
delnum2=2;%排除机头朝下的可能性
end
if tx1<3||tx1>8||ty1>7
delnum3=3;%排除机头朝左的可能性
end
if tx1<3||tx1>8||ty1<4
delnum4=4;%排除机头朝右的可能性
end
A=[delnum1, delnum2, delnum3, delnum4];%将以上判断结果写入矩阵
B=find(A>=1);%将不可能的方向写入B矩阵
for j=length(B):-1:1%利用倒序将不可能的方向删除
dir1(B(j),:)=[];
end
%此时dir1中剩余的方向都是可实现的
plane(v2)=3;%设置第二个机头参数为3
[tx2,ty2]=find(plane==3);%获取机头坐标并赋值给tx2,ty2
dir2=[tx2+1 ty2;tx2-1 ty2;tx2 ty2+1;tx2 ty2-1];%机头四周的位置坐标;机头位置【上,下,左,右】
if ty2<3||ty2>8||tx2>7
delnum21=1;%排除机头朝上的可能性
end
if ty2<3||ty2>8||tx2<4
delnum22=2;%排除机头朝下的可能性
end
if tx2<3||tx2>8||ty2>7
delnum23=3;%排除机头朝左的可能性
end
if tx2<3||tx2>8||ty2<4
delnum24=4;%排除机头朝右的可能性
end
运行出来的结果