knight.java

来自「java遍历8*8棋盘源代码 运用哈密顿回路遍历」· Java 代码 · 共 63 行

JAVA
63
字号
package cruise;
import java.util.*;

/**********类Knight,骑士漫游的主体,主要有前进后退等状态*/
public class Knight {
/****Attributes*/
	Map chess = new Map();    /**chess,棋盘,Map类对象*/
	int currentX,currentY;    /**currentX,currentY表示当前行列*/
	int step,                 /**step表示当前步数*/
		next;                 /**next表示下一步*/

/**Knight()
 * 功能:构造函数,初始化
 * 参数返回值:无*/
public Knight()
{
	do currentX=(int)(8*Math.random()); while(currentX==8);
	do currentY=(int)(8*Math.random()); while(currentY==8);//初始位置随机获得
	step=1;
	chess.Path[currentX][currentY]=step;//将当前格设为第一步
}

/********Methods*/	
/**Forward()
 * 功能:向前走一步
 * 参数:无
 * 返回:成功返回true,若前面没有路返回false*/
boolean Forward()
{
	chess.direction=true;//go ahead
	next = chess.FindWay(currentX, currentY);//找最佳路径
	if(next==-1)return false;//死路,返回false
	currentX+=chess.horizontal[next];
	currentY+=chess.vertical[next];//更新当前位置--向前走
	step++;//步数+1
	chess.Path[currentX][currentY]=step;//记录路径
	chess.UpdatExit(currentX,currentY);//更新其它单元格出口数
	return true;//向前走成功,返回true
	}
/**Backward()
 * 功能:向后走一步
 * 参数:无
 * 返回:无*/
void Backward()
{
	chess.direction=false;//go backward
	chess.Path[currentX][currentY]=0;//当前单元格设为"未走"
	chess.UpdatExit(currentX,currentY);//更新其它临近单元格出口数
	next=chess.FindWay(currentX, currentY, step);//找上一步位置
	currentX+=chess.horizontal[next];
	currentY+=chess.vertical[next];
	chess.UpdateTried(currentX, currentY);//记录失败状态
}
/**MapPath()
 * 功能:画出骑士走过的路径
 * 参数:无
 * 返回:无*/
void MapPath()
{
	chess.PrintMap(chess.Path);
}
}//class Knight

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?