if ~(x==oldx && abs(y-oldy)==1) && ~(y==oldy && abs(x-oldx)==1) flag = 0;
时间: 2024-04-26 12:20:17 浏览: 25
这段代码是什么意思?
这段代码是一个条件语句,它的作用是判断两个坐标点之间是否满足一定的条件。具体来说,它的条件是:如果当前坐标点与之前的坐标点在同一行且列数相差为1,或者在同一列且行数相差为1,则将flag设置为0。其中,符号“~”表示取反,即如果条件不成立,则返回真。因此,这段代码的意思是如果当前坐标点与之前的坐标点在同一行或同一列,但是相差不为1,则将flag设置为1。
相关问题
function flag = CanMove(x,y) flag = 1; oldx = chess_x(cur_turn,cur_cid); oldy = chess_y(cur_turn,cur_cid); switch chess_type(cur_cid) case 1 % 将 % move 1 step if ~(x==oldx && abs(y-oldy)==1) && ~(y==oldy && abs(x-oldx)==1) flag = 0; return end % out area if cur_turn==1 if ~(x>=0 && x<=2 && y>=3 && y<=5) flag = 0; return end else if ~(x>=7 && x<=9 && y>=3 && y<=5) flag = 0; return end end
这个函数是用来判断当前选中的棋子能否移动到(x,y)位置。首先将当前选中棋子的原来位置存放在oldx和oldy中,然后根据当前选中棋子的类型判断能否移动到(x,y)位置。例如,如果当前选中的棋子是将,那么将只能向前、向后、向左或向右移动一步,并且必须在九宫格内移动。如果不能移动到(x,y)位置,则将标志位flag设为0,表示不能移动到该位置。
case 6 % 炮 if ~(x==oldx && y~=oldy) && ~(x~=oldx && y==oldy) flag = 0; return end % no chess in the way if x==oldx inc = 1; if oldy>y inc = -1; end if pos_chess(y+1,x+1)~=0 if ~(length(find(pos_chess(oldy+1+inc:inc:y+1-inc,x+1)~=0))==1) flag = 0; return end else if ~(isempty(find(pos_chess(oldy+1+inc:inc:y+1-inc,x+1)~=0, 1))) flag = 0; return end end else inc = 1; if oldx>x inc = -1; end if pos_chess(y+1,x+1)~=0 if ~(length(find(pos_chess(y+1,oldx+1+inc:inc:x+1-inc)~=0))==1) flag = 0; return end else if ~(isempty(find(pos_chess(y+1,oldx+1+inc:inc:x+1-inc)~=0, 1))) flag = 0; return end end end
这段代码是实现象棋中“炮”的移动规则的判断,判断是否符合规则。如果当前位置和目标位置不在同一行或同一列,则不符合规则,返回 0。如果中间有其他棋子挡住,则不符合规则,返回 0。如果炮在起点,则目标位置必须没有棋子,否则不符合规则,返回 0。如果炮不在起点,则目标位置必须有且仅有一个棋子,否则不符合规则,返回 0。如果符合规则,则返回 1。
阅读全文