输入:待移动的棋子所在的棋盘格sourceChecker:Checker,待移动的棋子欲到达的棋盘格destinationChecker:Checker
输出:该步棋是否合法result:Boolean,中间格列表middleSteps:List<Step>
查找所有必须跳过对方棋子的棋子所在的棋盘格列表candidates:List<Checker>
if:candidates NOT empty
if:candidates中包含sourceChecker:
return 递归查找从sourceChecker到destinationChecker的路径
else:
return false, empty
else:
if:destinationChecker是sourceChecker前方相邻格且destinationChecker中没有棋子
return true, empty
else:
return false, empty
递归查找从sourceChecker到destinationChecker的路径CheckJump(sourceChecker,destinationChecker,middleSteps)
输出:该步棋是否合法result:Boolean,中间格列表middleSteps:List<Step>
if:destinationChecker是sourceChecker跳过敌方棋子c后的格子
return true,middleSteps
else:
if:sourceChecker没有可以跳过的格
return false,empty
else:
找到sourceChecker跳过地方棋子c后的格子m,将<m,c>放入middleSteps;
return CheckJump(m,destinationChecker,middleSteps);