java中国象棋报告Word文件下载.docx
- 文档编号:13679981
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:14
- 大小:93.03KB
java中国象棋报告Word文件下载.docx
《java中国象棋报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《java中国象棋报告Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
1.棋盘表示4
3.人人对弈4
系统分析4
1.设计内容4
2.设计要求5
3.中国象棋软件6
4.运行效果8
系统设计8
1.总体设计8
运行界面:
10
2.运行输出结果10
3.总结与说明11
4.象棋界面实现:
11
5.对弈功能的实现:
15
参考文献16
中国象棋
摘要
【摘要】
中国象棋系统将计算机知识和中国象棋知识结合起来的一种新型的游戏方式。
本文结合在中国象棋机器博弈方面的实践经验,在分析了中国象棋游戏需求基础上,设计并实现了中国象棋系统。
该系统为人人对战。
人人对战规则明确,包含了中国象棋所有的招法。
方便了不同水平人群的不同选择,其它些小功能也增加了本象棋游戏增加了乐趣。
本系统的实现满足了人们对中国象棋的基本需求,解决了传统象棋游戏学习性差、不易演示等问题。
【关键字】
中国象棋,人人对战
系统概述
1.棋盘表示
棋盘表示就是使用一种方法来描述棋盘及棋盘上的棋子,以方便计算机处理。
中国象棋的棋盘表示还没有形成统一的或者公认的哪种为最佳的数据格式。
最直观也是最典型的方式是使用10x9的二维棋盘数组表示,也有使用棋子数组。
2.走法生成
走法生成就是找到某个局面所有合法的走法。
它与棋盘表示的数据结构密切相关,一般需要大量繁琐的判断,伴随着搜索进行,并且调用频繁,是相当复杂而且耗费运算时间。
在一定程度上形成了程序的性能瓶颈。
当前为了提高着法生成的效率通常采用以空间换时间的方法:
与先求出棋子的在某位置的所有走法(有此功能模块,但未完无全实现)。
3.人人对弈
用来在单机状态下,还未连网的状态下实现同一台电脑多人或一人的操作,或在后期的自我研习而用。
系统分析
1.设计内容
中国象棋打谱软件提供给用户的一个能将对弈过程保存成文件并可以重新演示对弈过
程即复盘
2.设计要求
1.中国象棋是双方在有着9条竖线和10条横线的棋盘上对弈,对弈的竖线与横线的交叉点称做棋点,每个棋子都是在棋点上行走而不是在方格中行走河界将棋盘分成两个等份。
每一边都有一块由9个点组成的九宫棋子。
将、帅、士只能在九宫内移动,并且将帅每一步只可以水平或垂直移动一个棋点。
士,它只能在九宫内移动,并且它每一步只可以沿对角线方向移动一个棋点;
象,它必须一步沿对角线方向走两个棋点,但它既不能过河,也不能跳过或穿越障碍,
即象在走的过程中不能被别眼;
马,每一步只可以水平或垂直移动一个棋点,但必须按对角线方向,向左或右移动,中
国象棋的马不能跳过障碍,即在走的过程中不能被别腿;
车,可以水平或垂直方向移动任意个无阻碍的点;
炮,移动起来和车很类似,但它必须跳过一个棋子来吃掉对方的一个棋子,被跳过的那
个棋子称为桥或者屏风;
兵,每步只能向前移动一个棋点,过河以后,它便增加了向左右移动的能力,兵不允许
向后移动。
2.单击“中国象棋”菜单可以选择“制作棋谱”、“保存棋谱”和“演示棋谱”菜单项。
3.选择“制作棋谱”将出现相应的棋盘,该棋盘可进行实战对弈选择“保存棋谱”可以随时将对弈过程保存成一个棋谱文件,棋谱文件的扩展名可以任意指定选择“演示棋谱”,将出现打开文件对话框,用来选择曾保存过的棋谱文件,选择棋谱文件后,将出现用来演示棋谱的棋盘,用户可以选择自动或手动来演示对弈过程自动演示时还可以控制每步之间的间隔时间也可以暂停演示或继续演示等。
3.中国象棋软件共有8个Java源文件
Chess.java
该java文件的类负责创建中国象棋的主窗口该文件含有main方法程序从该类开始执行。
ChessBoard.java
该文件生成的类负责创建“对弈棋盘”对象,用户可以用鼠标拖动棋盘上棋子进行对弈当松开鼠标时将棋子固定到棋点,该棋盘使得用户不能将棋子拖放到非棋点上,棋盘的Rule对象负责判断走棋是否遵守了中国象棋的规则。
例如:
马走日、象走田、小卒一去不回头等等,如果用户的走法不符合规则,棋子将被放回原处重新走,棋盘的MakeChessManual对象负责记录棋谱,当用户选择“保存棋谱”菜单时,可以将该棋谱保存成文件。
另外,该棋盘还能进行悔棋,悔棋不被记录到棋谱。
ChessPoint.java
该文件生成的类负责创建棋盘的棋点对象,棋点对象可以判断该棋点上是否有棋子,可以指定当前棋点上的棋子,获取当前棋点上的棋子,移掉当前棋点上的棋子。
ChessPiece.java
该文件生成的类负责创建棋子对象,并绘制棋子的外观。
棋子对象可以获取本身的颜色、大小和名字也可以设置和获取本身的类别红棋或黑棋。
MakeChessManual.java
该文件生成的类负责创建记录棋谱的对象,该对象可以将棋谱记录到一个链表中,并在一个文本区中显示棋谱。
当对弈者悔棋时,该对象将修改棋谱,并更新文本区中的信息。
Rule.java
该文件生成的类负责为创建走棋法则对象,该对象负责判断用户的走着是否遵守了中国象棋规则。
Demon.java
该文件生成的类负责创建“棋谱演示”对象,该对象可以演示保存过的棋谱对象。
MoveStep.java
该类创建的对象负责记录一步走棋。
4.运行效果
将8个java文件保存到一个文件夹中,比如:
C\chess将8个Java文件分别编译生成相应的字节码(class)文件,然后用java解释器运行主类。
C\chess\javaChess
效果如图:
演示棋谱
系统设计
1.总体设计
整个象棋系统将要实现的主要功能是:
人人对战。
该系统的功能结构图如图所示:
2.运行输出结果
对弈和保存棋谱
3.总结与说明
在程序代码基本完成后,经过不断的调试与修改,最后测试本次所涉及的人工智能象棋游戏能够正常运行。
人人对战,没有发现bug。
每一方所走步路都能够清晰显示出来,方便研究学习。
所有的基本功能都能够正常使用,没有出现明显的错误和漏洞,但是在一些细节方面仍然需要完善,比如系统界面不够美观,搜索算法还处在初级阶段导致电脑棋力不够强大。
还可以在游戏中加入一些声音的提示,在游戏完成和失败时弹出一些小的Flash动画,以便进一步增加游戏的趣味性。
总的来说本次设计在功能上已经基本达到要求,其他细节方面有待以后改善。
界面的实现分为棋盘的表示和棋子的表示两部分,棋盘和棋子通过数组连接起来,形成一个完整的界面系统。
首先定义一个棋子类(ChessPiece),来获取棋子的颜色以及类别:
publicclassChessPieceextendsJLabel
{
Stringname;
ColorbackColor=null,foreColor;
String颜色类别=null;
ChessBoardboard=null;
intwidth,height;
publicChessPiece(Stringname,Colorfc,Colorbc,intwidth,intheight,ChessBoardboard)
{
this.name=name;
this.board=board;
this.width=width;
this.height=height;
foreColor=fc;
backColor=bc;
setSize(width,height);
setBackground(bc);
addMouseMotionListener(board);
addMouseListener(board);
}
publicvoidpaint(Graphicsg)
{
g.setColor(foreColor);
g.fillOval(2,2,width-2,height-2);
g.setColor(Color.white);
g.setFont(newFont("
隶书"
Font.BOLD,28));
g.drawString(name,7,height-8);
g.setColor(Color.yellow);
g.drawOval(2,2,width-2,height-2);
publicintgetWidth()
returnwidth;
publicintgetHeight()
returnheight;
publicStringgetName()
returnname;
publicColor获取棋子颜色()
returnforeColor;
publicvoidset棋子类别(String类别)
颜色类别=类别;
publicString棋子类别()
return颜色类别;
}
然后在棋盘类(ChessBoard)里定义棋盘的表示、棋子的类别、颜色以及棋子在棋盘上的位置表示:
publicclassChessBoardextendsJPanelimplementsMouseListener,MouseMotionListener
publicChessPointpoint[][];
publicintunitWidth,unitHeight;
intx轴长,y轴长;
intx,y;
booleanmove=false;
publicString红方颜色="
红色"
黑方颜色="
黑色"
;
ChessPiece红车1,红车2,红马1,红马2,红相1,红相2,红帅,红士1,红士2,
红兵1,红兵2,红兵3,红兵4,红兵5,红炮1,红炮2;
ChessPiece黑车1,黑车2,黑马1,黑马2,黑将,黑士1,黑士2,
黑卒1,黑卒2,黑卒3,黑卒4,黑卒5,黑象1,黑象2,黑炮1,黑炮2;
如何监视棋子在棋盘中移动和消失的实现:
publicvoidmousePressed(MouseEvente)//按下鼠标时发生事件的情况
publicvoidmouseDragged(MouseEvente)
publicvoidmouseReleased(MouseEvente)
record.记录吃掉的棋子(pieceRemoved);
if(piece.棋子类别().equals(红方颜色))
if(piece.棋子类别().equals(黑方颜色))
record.记录棋谱(piece,startI,startJ,m,n);
record.记录吃掉的棋子("
没吃棋子"
);
实现界面后,就可以在此基础上实现象棋系统的其它功能。
对弈是用户对象棋游戏最基本的需求,本系统的对弈功能包括人人对战和人机对战。
人人对战功能的实现其实就是一系列象棋规则的集中体现,譬如“马走日”、“相走田”、“炮打隔山”等。
本系统通过对象棋规则的定义以及图形化的棋子如何在棋盘中消失来实现人人对战这一功能:
publicbool
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 中国象棋 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)