中国象棋java程序设计实验报告

东北大学秦皇岛分校信息与计算科学系Java 程序设计实验报告专业名称 信 息 与 计 算 科 学班级学号 7080206学生姓名 彭 军指导教师 王 薇完成时间 2011.04.15一、设计题目中国象棋。2、设计说明2.1 引言象棋水平的发展是需要靠信息技术来推动的,国际象棋有两个很好的范例,一个是象棋棋谱编辑和对弈程序的公共平台——WinBoard 平台,另一个是商业的国际象棋数据库和对弈软件——ChessBase,他们为国际象棋爱好者和研究者提供了极大的便利。国际象棋软件有着成功的商业运作,已发展成一种产业。然而,电脑在中国象棋上的运用还刚刚起步,尽管国内涌现出一大批中国象棋的专业网站和专业软件,但是由于缺乏必要的基础工作,电脑技术在中国象棋上的应用优势还无法体现出来。在设计中国象棋软件过程中,国际象棋软件有很多值得借鉴的成功经验和优秀的思想。例如 B. Moreland,微软(Microsoft)的程序设计师,业余从事国际象棋引擎 Ferret 的开发,他的一系列关于国际象棋程序设计的文章非常值得其他棋类程序设计人员借鉴。然而,中国象棋与国际象棋存在着很大的差异,因此国际象棋的某些成熟技术,无法直接应用于中国象棋,需要对其加以改进和创新。本文针对中国象棋程序设计的一系列问题,总结出一些搜索引擎的设计方法,并给出 java语言的实现2.2 程序的设计及实现本系统主要有以下 4 个模块,每个模块对应一个程序包:1、engine:搜索引擎包,系统的核心部分。2、message:网络对战过程中各种消息及其传递机制的类实现包。3、main:主界面实现包。4、pieces :棋子及其相关类实现包。现就各个包中的要点给与说明。2.2.1 搜索引擎的实现(engine 包)(1) BitBoard.java:位棋盘的实现,见 2.4 节。(2) CCue.java:评价函数知识类。本程序使用开源软件“梦入神蛋”的快速评价函数。该函数包含子力价值和棋子所在位置的奖励值。子力价值分别是:帅-0, 仕- 40, 象-40, 马-88, 车-200, 炮-96, 兵-9。帅是无价的,用 0 表示。以马为例,位置的奖励值如下:0, -3, 5, 4, 2, 2, 5, 4, 2, 2,-3, 2, 4, 6,10,12,20,10, 8, 2,2, 4, 6,10,13,11,12,11,15, 2,0, 5, 7, 7,14,15,19,15, 9, 8,2,-10 , 4,10,15,16,12,11, 6, 2,0, 5, 7, 7,14,15,19,15, 9, 8,2, 4, 6,10,13,11,12,11,15, 2,-3, 2, 4, 6,10,12,20,10, 8, 2,0, -3, 5, 4, 2, 2, 5, 4, 2, 2 上面的每行代表棋盘的一条纵线。其中,-10 所在的位置是“窝心马”,所以要罚 10 分。(3) ChessPosition.java:动态局面类包含对局过程中的动态信息,主要实现的是 2.4 节的各类位棋盘和移子函数。(4) MoveStruct.java:着法表示类。(5) PreMove.java:伪合法着法生成模块,见 4.1。(6) MoveSortStruct.java:合法着法的生成及其排序算法,见 4.2。(7) SearchMove.java:搜索算法,实现如下功能:1)主置换表及开局库2)Alpha-Beta 搜索算法3)针对吃子着法的静态搜索算法4)适应性空着裁剪算法:见 5.5.2,根据不同情况来调整 R 值的做法,称为“适应性空着裁剪”(Adaptive Null-Move Pruning),它首先由 Ernst Heinz 发表在 1999 年的 ICCA 杂志上。其内容可以概括为:a. 深度小于或等于 6 时,用 R = 2 的空着裁剪进行搜索b. 深度大于 8 时,用 R = 3; c. 深度是 6 或 7 时,如果每方棋子都大于或等于 3 个,则用 R = 3,否则用 R = 2。5)带时间控制的迭代加深搜索算法:每次加深搜索都判断时间是否够用。6)“将军 ”扩展(加深)搜索算法:当搜索到己方被“将”时,增加搜索的深度。7)主要变例搜索算法2.2.2 信息传输机制(message 包)在对弈过程中(主要是网络对弈)需要在对弈双方之间传输各类信息,抽象为各类消息。如时间规则的协定、各方的走子信息等。每方都有消息接收、消息处理和消息发送程序(OuterMsgReceiver、LocalMsgReceiver ,QzMessageHandler,MessageSender)。己方的 MessageSender 与对方的 OuterMsgReceiver 通过接口 SrConnection 连接。所有接收的消息放入消息队列 QzMsgQueue 中,等待消息处理进程QzMessageHandler 来处理。所有的消息都封装在 QzMessage 类对象中,消息的类型通过消息的 Header 类型(以静态常量存放在 MsgHeader 类中)来区分。2.2.3 棋子(pieces 包)Qizi.java 包含棋子的信息,如棋子的(在棋盘上的)位置、图片、名称、类型、状态等。PiecesFactory.java 以“工厂”模式提供根据棋子类型或其他信息生成相关 Qizi 对象的方法。2.2.4 主控模块(main 包)实现了程序界面与消息传递、搜索引擎的集成。(1) NewBoard.java:棋盘坐标系统及其界面的实现。(2) CChessApp.java:主界面类,以内部类实现了 QzMessageHandler 接口、计时规则 TimeRule 接口以及事件的处理程序,根据需要生成其他的并发线程如消息接收、处理和发送,机器思考(启动搜索引擎),计时显示等。(3) SetRuleDialog.java:设置规则的对话框。(4) SetSysInfoDialog.java:设置系统的一些属性如对战模式、连接端口等。(5) Translation.java:提供了一系列实用方法主要有:1)FEN 串与局面 ChessPosition 对象之间的转换2)不同着法表示(见第一章)之间的转换。如“炮二平五”与“Ch2-e2”及“62.5 或 C2.5“(C 和 6 代表炮)这几种表示法之间的转换3)棋谱文件的读入和存储。4)开局库的生成:将近年实战的棋谱文件(可能有几种格式)整理生成开局库。3、程序代码:import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import java.io.*;public class Chess{public static void main(String args[]){new ChessMainFrame(“中国象棋:观棋不语真君子,棋死无悔大丈夫“);}}class ChessMainFrame extends JFrame implements ActionListener,MouseList

java象棋实验报告_中国象棋java程序设计实验报告相关推荐

  1. java象棋实验报告_中国象棋java程序设计实验报告.doc

    中国象棋java程序设计实验报告.doc 东北大学秦皇岛分校 信息与计算科学系 Java 程序设计实验报告 专业名称 信息与计算科学 班级学号 7080206 学生姓名 彭 军 指导教师 王薇 完成时 ...

  2. java象棋人机代码_中国象棋人机对弈Java版源码

    [实例简介] 中国象棋人机对弈Java版源码,包含人工智能实现(含多个难度级别,采用α-β迭代搜索算法) [实例截图] [核心代码] 中国象棋人机对弈Java版源码 ├── boards │   ├─ ...

  3. java象棋代码注释_中国象棋程序的设计与实现(十一)--棋盘绘制算法(尽管注释非常详细,完全理解仍有难度)...

    上几篇中,我们详细介绍了,棋盘类的定义和关键属性,简要介绍了棋盘绘制算法的骨架. 本篇,我们将详细解读棋盘绘制算法的每一个细节. 强烈建议,大家结合文章末尾的"棋盘截图"来思考绘制 ...

  4. 用java定义中国象棋的棋子_中国象棋棋子定义代码java

    棋盘和棋子 象棋是棋子共三十二个,分为红黑两组,各十六个,由对弈双方各执一组,兵种是一样的,分为七种: 红方:帅.仕.相.车.马.炮.兵 黑方:将.士.象.车.马.炮.卒 其中帅与将.仕与士.相与象. ...

  5. java中国象棋兵吃棋规则_中国象棋吃子的规则

    中国象棋吃子的规则 在中国喜欢玩象棋的朋友有很多,那么对于新手来说,可能还不知道象棋如何吃子,现在小编向大家讲解一下象棋的吃子. 中国象棋吃子的规则 先从攻击力最强的棋子:车,开始讲解,车的走棋规则是 ...

  6. c语言的简单程序设计实验报告,工程学院C语言程序设计实验报告

    <工程学院C语言程序设计实验报告>由会员分享,可在线阅读,更多相关<工程学院C语言程序设计实验报告(5页珍藏版)>请在人人文库网上搜索. 1.南京工程学院实验报告课程名称C 语 ...

  7. Linux编译和下载嵌入式实验,嵌入式实验6交叉编译及Linux简单程序设计实验

    <嵌入式实验6交叉编译及Linux简单程序设计实验>由会员分享,可在线阅读,更多相关<嵌入式实验6交叉编译及Linux简单程序设计实验(7页珍藏版)>请在人人文库网上搜索. 1 ...

  8. 交叉编译及linux简单程序设计,嵌入式实验6交叉编译及Linux简单程序设计实验

    实验六交叉编译及Linux简单程序设计实验的实验报告 一实验目的 1.了解和掌握交叉编译模式和方法: 2.熟悉和掌握Linux简单程序设计. 二实验环境 预装Fedora10_A8_Linux的pc机 ...

  9. c语言实验内容.doc答案,C语言程序设计实验内容与答案.doc

    C语言程序设计实验内容与答案 C语言程序设计实验内容与答案 第1周实验内容 本次实验内容为熟悉VC++6.0环境,编写第一个c程序:已知两边求矩形的面积 #include int main() { f ...

最新文章

  1. C语言编程时常犯十八个错误
  2. GDCM:gdcm代码中引发bad_alloc异常测试程序
  3. IO-BufferedInputStream
  4. php 受保护类,php中如何在外部修改类的私有或受保护属性值
  5. 兰顿蚂蚁 java源代码_兰顿蚂蚁 (Java代码)41行代码
  6. 【java】java ssh 远程执行命令 并且获取执行的结果
  7. 最新37网游JS逆向分析
  8. 74 ----平面直角坐标变换、平移、旋转、伸缩
  9. Rust : CTP中交互中字符串及处理
  10. 免费又好用的Redis客户端工具!AnotherRedisDesktopManager
  11. java后台导出word文档正文、表格、图片
  12. 北斗一号卫星授时技术及在电力系统中的应用
  13. wpf OpenClipBoard CLIPBRD_E_CANT_OPEN
  14. linux强制删除只读文件夹,强制删除文件夹linux的方法是什么
  15. 记一次CRM敏捷认证培训学习总结
  16. java读取sheet2_java读取Excel指定sheet页或全部sheet页数据(含2003和2007版本)
  17. 百度地图SDK for Android【覆盖物】
  18. ZOJ 1655 Transport Goods
  19. mysql的联合索引_mysql联合索引详解
  20. 如何优雅地使用Sublime

热门文章

  1. 手工轻松发送匿名邮件
  2. Java面向对象01:什么是面向对象
  3. oracle 裸金属,通过裸金属服务部署Oracle RAC (五)Oracle RAC的备份
  4. unity ugui image组件ngui uisprite 对称显示功能
  5. PID控制算法基础知识
  6. Python加密word文档
  7. Vue项目如何动态设置路由meta信息中的title属性值
  8. js爬取:bili播放列表,右下角建立红底白字下载按钮,保存为csv格式到本地
  9. 由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题
  10. IM云服务领域,融云因何得以登上浪潮之巅?