• 大小: 1.84MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-21
  • 语言: Java
  • 标签: Java版  设计论文  

资源简介

中国象棋,位棋盘,Zobrist键值,alpha-beta搜索,置换表,局面评价,包含设计说明 摘 要:随着人工智能及计算机硬件的发展,计算机象棋程序的下棋水平也不断地得到提高。20世纪60年代初,麦卡锡提出了alpha-beta修剪算法,把为决定下一个走步而需对棋盘状态空间的搜索量从指数级减少为指数的平方根,大大地提高了机器下棋的水平。IBM的超级计算机“Deep Blue”更是一个神话,让棋迷们神往。本文根据国际象棋程序设计的一些成功经验,提出中国象棋程序设计的一些思路和方法。 关 键 词:中国象棋,位棋盘,Zobrist键值,alpha-beta搜索,置换表,局面评价 Abstract:Along with the development of the Artificial Intelligence and computer hardware, the capability of computer chess program have advanced continually.At the beginning of 60s,20th century, McCaxi brought forword alpha-beta pruning algorism which made the chess program advanced more by reducing the order of magnitude of the number of searching nodes deciding next step,named “State Space” from O(Xn) to O(Xn/2). IBM’s super-computer “Deep Blue” is more like a myth for all computer chess fans. In my article, I will describe some ideas and methods of designing Chinese Chess program along with some successful experiences and cases of the Chess. Keywords: Chinese Chess, bit board, zobrist keys, alpha-beta search, transposition table, Evaluation 目 录 引 言 3 第一章 概述 4 1.1 棋盘的标记 4 1.2 棋子的名称 5 1.3 棋谱的记录方法 5 1.4 历史局面的表示及存储 7 1.5 棋谱记录文件的格式 8 第二章 基本数据结构——位棋盘 10 2.1 什么是位棋盘 10 2.2 位棋盘的作用 10 2.3 位棋盘的基本运算 12 2.4 Java中位棋盘的实现 13 第三章 基本数据结构——Zobrist键值 17 3.1 比较局面的方法 17 3.2 Zobrist键值的实现方法 17 3.3 Zobrist键值的工作原理及用途 17 3.4 Java中实现Zobrist键值 18 第四章 着法生成 20 4.1伪合法着法的生成 20 4.2 合法着法的生成 25 第五章 搜索算法 29 5.1 最小-最大搜索 29 5.2 Alpha-Beta搜索 33 5.3 迭代加深 36 5.4 置换表 37 5.5 其他策略 41 第六章 局面评价函数 47 6.1 评价函数的实现方法 48 6.2 评价函数所需的信息 48 第七章 程序的设计及实现 51 7.1 搜索引擎的实现(engine包) 51 7.2 信息传输机制(message包) 52 7.3 棋子生成(pieces包) 52 7.4 主控模块(main包) 52 附件1:搜索算法主程序SearchMove.java 55 附件2:程序运行界面及功能说明 74

资源截图

代码片段和文件信息

/*
 *中国象棋Java版V1.0
 *作者:王学峰
 *源文件:Chess.java
 *最后修改时间:2010-1-02
 *添加功能:实现了当前棋局的保存
 */

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 ActionListenerMouseListenerRunnable{
//玩家
JLabel play[] = new JLabel[32];
//棋盘
JLabel image;
//窗格
Container con;
//工具栏
JToolBar jmain;
//重新开始
JButton anew;
//悔棋
JButton repent;
//退出
JButton exit;
//当前信息
JLabel text;

//保存当前操作
Vector Var;

//规则类对象(使于调用方法)
ChessRule rule;

/**
** 单击棋子
** chessManClick = true 闪烁棋子 并给线程响应
** chessManClick = false 吃棋子 停止闪烁  并给线程响应
*/
boolean chessManClick;

/**
** 控制玩家走棋
** chessPlayClick=1 黑棋走棋
** chessPlayClick=2 红棋走棋 默认红棋
** chessPlayClick=3 双方都不能走棋
*/
int chessPlayClick=2;

//控制棋子闪烁的线程
Thread tmain;
//把第一次的单击棋子给线程响应
static int Mani;

ChessMainframe(){
new ChessMainframe(“中国象棋“);
}

/**
** 构造函数
** 初始化图形用户界面
*/
ChessMainframe(String title){
//获行客格引用
con = this.getContentPane();
con.setLayout(null);
//实例化规则类
rule = new ChessRule();
Var = new Vector();

//创建工具栏
jmain = new JToolBar();
text = new JLabel(“欢迎使用象棋对弈系统“);
//当鼠标放上显示信息
text.setToolTipText(“信息提示“);
anew = new JButton(“ 新 游 戏 “);
anew.setToolTipText(“重新开始新的一局“);
exit = new JButton(“ 退  出 “);
exit.setToolTipText(“退出象棋程序程序“);
repent = new JButton(“ 悔  棋 “);
repent.setToolTipText(“返回到上次走棋的位置“);

//把组件添加到工具栏
jmain.setLayout(new GridLayout(04));
jmain.add(anew);
jmain.add(repent);
jmain.add(exit);
jmain.add(text);
jmain.setBounds(0055830);
con.add(jmain);

//添加棋子标签
drawChessMan();

//注册按扭监听
anew.addActionListener(this);
repent.addActionListener(this);
exit.addActionListener(this);

//注册棋子移动监听
for (int i=0;i<32;i++){
con.add(play[i]);
play[i].addMouseListener(this);
}

//添加棋盘标签
con.add(image = new JLabel(new ImageIcon(“image\\Main.GIF“)));
image.setBounds(030558620);
image.addMouseListener(this);

//注册窗体关闭监听
this.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent we){
System.exit(0);
}
}
);

//窗体居中
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();

if (frameSize.height > screenSize.height){
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width){
frameSize.width = screenSize.width;
}

this.setLocation((screenSize.width - frameSize.width) / 2 - 280 (screenSize.height - frameSize.height ) / 2 - 350);

//设置
this.setIconImage(new ImageIcon(“image\\红将.GIF“).getImage());
this.setResizable(false);
this.settitle(title);
this.setSize(558670);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件    1142272  2010-05-07 13:37  象棋\Java中国象棋需求\设计\Java版中国象棋项目设计论文.doc

     文件       5624  2008-04-15 11:17  象棋\象棋txt版本\1.txt

     文件       1723  2009-12-28 16:18  象棋\象棋txt版本\2.txt

     文件       2157  2008-04-15 11:17  象棋\象棋txt版本\3.txt

     文件       2226  2008-04-15 11:17  象棋\象棋txt版本\4.txt

     文件      13572  2008-04-15 11:17  象棋\象棋txt版本\5.txt

     文件        725  2008-04-15 11:17  象棋\象棋txt版本\6.txt

     文件       1468  2009-10-01 16:51  象棋\象棋txt版本\CodePub.Com说明.txt

     文件      25877  2007-11-28 19:12  象棋\Java中国象棋需求\象棋的走法\中国象棋规则简介.files\440.htm

     文件       1106  2007-11-28 19:13  象棋\Java中国象棋需求\象棋的走法\中国象棋规则简介.files\count.htm

     文件      26236  2007-11-28 19:16  象棋\Java中国象棋需求\象棋的走法\银通在线 - into365_net∷ 中国象棋介绍及游戏规则.files\game.htm

     文件        844  2007-11-28 19:12  象棋\Java中国象棋需求\象棋的走法\中国象棋规则简介.files\isLogin.htm

     文件          0  2007-11-28 19:13  象棋\Java中国象棋需求\象棋的走法\中国象棋规则简介.files\view_ad.htm

     文件          0  2007-11-28 19:13  象棋\Java中国象棋需求\象棋的走法\中国象棋规则简介.files\view_img_ad(1).htm

     文件          0  2007-11-28 19:13  象棋\Java中国象棋需求\象棋的走法\中国象棋规则简介.files\view_img_ad(2).htm

     文件          0  2007-11-28 19:12  象棋\Java中国象棋需求\象棋的走法\中国象棋规则简介.files\view_img_ad.htm

     文件       3751  2007-11-28 19:13  象棋\Java中国象棋需求\象棋的走法\中国象棋规则简介.files\view_review.htm

     文件      30485  2007-11-28 19:16  象棋\Java中国象棋需求\象棋的走法\银通在线 - into365_net∷ 中国象棋介绍及游戏规则.htm

     文件      38346  2007-11-28 19:13  象棋\Java中国象棋需求\象棋的走法\中国象棋规则简介.htm

     文件      34560  2007-11-28 16:48  象棋\Java中国象棋需求\象棋的走法\中国象棋竞赛规则,有什么朗朗上口的口诀吗?_百度知道.htm

     文件         20  2006-03-19 17:06  象棋\Java中国象棋需求\单机版成品给与参考\打包发布\Chess.bat

     文件        389  2010-01-06 19:04  象棋\Java中国象棋需求\单机版成品给与参考\源程序\Chess.class

     文件        534  2010-01-06 19:04  象棋\Java中国象棋需求\单机版成品给与参考\源程序\ChessMainframe$1.class

     文件      18888  2010-01-06 19:04  象棋\Java中国象棋需求\单机版成品给与参考\源程序\ChessMainframe$ChessRule.class

     文件      11704  2010-01-06 19:04  象棋\Java中国象棋需求\单机版成品给与参考\源程序\ChessMainframe.class

     文件       2293  2007-11-28 19:12  象棋\Java中国象棋需求\象棋的走法\中国象棋规则简介.files\isLogin.files\css.css

     文件       5991  2007-11-28 19:16  象棋\Java中国象棋需求\象棋的走法\银通在线 - into365_net∷ 中国象棋介绍及游戏规则.files\css.css

     文件      27882  2007-11-28 16:48  象棋\Java中国象棋需求\象棋的走法\中国象棋竞赛规则,有什么朗朗上口的口诀吗?_百度知道.files\iknow1_0.css

     文件       3832  2007-11-28 19:12  象棋\Java中国象棋需求\象棋的走法\中国象棋规则简介.files\style.css

     文件      13270  2006-10-09 18:05  象棋\Java中国象棋需求\单机版成品给与参考\打包发布\Chess.jar

............此处省略96个文件信息

评论

共有 条评论