1 / 13
文档名称:

骑士巡游 一个骑士不重复地游历国际象棋棋盘的每一个方格子 摘要.doc

格式:doc   大小:88KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

骑士巡游 一个骑士不重复地游历国际象棋棋盘的每一个方格子 摘要.doc

上传人:zxwziyou8 2018/7/5 文件大小:88 KB

下载得到文件列表

骑士巡游 一个骑士不重复地游历国际象棋棋盘的每一个方格子 摘要.doc

文档介绍

文档介绍:骑士巡游
一个骑士不重复地游历国际象棋棋盘的每一个方格子
摘要:
国际象棋提供了许多与它本身并无关系的有趣的娱乐。骑士巡游问题就是其中的一个。这部分的"Java游戏与娱乐"向你介绍骑士巡游问题,然后给出一个applet小程序。它能让你观察整个巡游过程。
作者: Jeff Friesen
国际象棋游戏衍生出了许多与它本身无关的有趣的娱乐方式。这其中的许多种都基于骑士那奇怪的L形移动方式。一个经典的例子就是骑士巡游问题。
骑士巡游问题从十八世纪初开始,就一直吸引着大批的数学家和猜谜狂热者:把一个骑士放在棋盘64个格子中的任何一个上,然后移动骑士经过剩下的63个方格, 每个方格必须经过一次且只能是一次。
本文展示了一个KT(Knight’s Tour)小程序, 用来演示一个限制版的骑士巡游问题。骑士并不是从任何一个方格开始, 而是从角落上的四个方格之一开始。这个applet的界面如图1所示:
图1: KT的界面由一个棋盘, 一个选择开始方格的组合框和一个开始游历的按钮组成
在启动巡游之前, 先从组合框中选择骑士开始的角落。程序响应会让骑士显示在正确的角落上(默认情况下骑士在最左上角)。然后单击"Take the Tour"(开始巡游)按钮来开始整个巡游过程。按钮和组合框在巡游过程中都将被禁止。
巡游过程是怎么样的呢? 图2展现了一系列的线段(轨迹), 每一个线段都是随着骑士在棋盘的行动从上一个方格的中心到当前方格的中心。

图2: 巡游从左上角开始
现在你已经看到了这个小程序的界面和巡游过程, 让我们开始学****它的源代码吧。
清单1.
//
import ;
import .*;
import .*;
import .URL;
import ;
public class KT extends Applet
{
// 线程延迟以毫秒为单位
public final static int DELAY = 500;
// 开始骑士巡游线程
private Thread thd;
// 初始化小程序
public void init ()
{
// 创建一个标签对象来标明小程序的标题
Label lblTitle = new Label ("Knight's Tour", );
(new Font ("Arial", , 18));
// 把标签对象加到小程序的面板容器
add (lblTitle);
// 创建一个ChessBoard对象,它具有显示一个棋盘、移动骑士到
// 任何方格并留下骑士巡游轨迹的能力.
final ChessBoard cb = new ChessBoard (this);
//把ChessBoard对象加入到小程序的面板容器
add (cb);
// 创建一个Panel对象来保存Label,Choice和按钮对象.
Panel pnl = new Panel ();
//创建一个标签来标明Choice对象并把它添加到Panel中
(new Label ("Choose starting position:"));
//创建一个Choice对象,用来选择骑士的开始位置(棋盘的四个角落)
//并把它添加到Panel中.
final Choice c = new Choice ();
("Upperleft corner");
("Upperright corner");
//创建Choice的item listener,这个***按选择结果来重设骑士的开始位置.
(new ItemListener ()
{
public void itemStateChanged (ItemEvent e)
{
Choice c = (Choice) ();
if ( () == 0)
(1);
else
(8);
();
}
});
(c);
//把Panel加入到小程序的面板容器
add (pnl);
//创建一个按钮对象用来开始骑士巡游.
final Button