欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    完整版java毕业课程设计中国象棋java源码.docx

    • 资源ID:24636526       资源大小:424.64KB        全文页数:61页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    完整版java毕业课程设计中国象棋java源码.docx

    1、完整版java毕业课程设计中国象棋java源码Java语言程序设计实验报告实验项目名称:中国象棋对弈系统作者姓名与单位:李明 数学与应用数学专业 数学081班摘要:本文主要是运用java实现具有一定功能的中国象棋对弈系统软件,主要功能如下:a、 象棋对弈:红方先走,然后黑方再走,红黑交替,直到一方获胜。b、 新游戏:任何时候可以重新开始一盘新的对弈。c、 悔棋:当走错棋的时候可以悔棋。d、 信息提示:提示当前信息状态。e、 简单的帮助文档:象棋规则介绍、软件的简单介绍和编制说明关键词:java、中国象棋对弈系统 正文:一 程序设计说明1.1程序的设计及实现本系统主要有以下4个模块,每个模块对应

    2、一个程序包:1、engine:搜索引擎包,系统的核心部分。2、message:网络对战过程中各种消息及其传递机制的类实现包。3、main:主界面实现包。4、pieces:棋子及其相关类实现包。现就各个包中的要点给与说明。1.1.1 搜索引擎的实现(engine包)(1) BitBoard.java:位棋盘的实现,见2.4节。(2) CCEvalue.java:评价函数知识类。本程序使用开源软件“梦入神蛋”的快速评价函数。该函数包含子力价值和棋子所在位置的奖励值。子力价值分别是:帅-0, 仕- 40, 象-40, 马-88, 车-200, 炮-96, 兵-9。帅是无价的,用0表示。以马为例,位置

    3、的奖励值如下: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所在的位置是

    4、“窝心马”,所以要罚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值的做法,称为“适应性空着裁剪”(Ada

    5、ptive 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)主要变例搜索算法1.1.2 信息传输机制(message包)在对弈过程中(主要是网络对弈)需要在对弈双方之间传输各类信息,抽象为各类消息。如时

    6、间规则的协定、各方的走子信息等。每方都有消息接收、消息处理和消息发送程序(OuterMsgReceiver、LocalMsgReceiver,QzMessageHandler,MessageSender)。己方的MessageSender与对方的OuterMsgReceiver通过接口SrConnection连接。所有接收的消息放入消息队列QzMsgQueue中,等待消息处理进程QzMessageHandler来处理。所有的消息都封装在QzMessage类对象中,消息的类型通过消息的Header类型(以静态常量存放在MsgHeader类中)来区分。1.1.3 棋子(pieces包)Qizi.j

    7、ava包含棋子的信息,如棋子的(在棋盘上的)位置、图片、名称、类型、状态等。PiecesFactory.java以“工厂”模式提供根据棋子类型或其他信息生成相关Qizi对象的方法。1.2主控模块(main包)实现了程序界面与消息传递、搜索引擎的集成。(1) NewBoard.java:棋盘坐标系统及其界面的实现。(2) CChessApp.java:主界面类,以内部类实现了QzMessageHandler接口、计时规则TimeRule接口以及事件的处理程序,根据需要生成其他的并发线程如消息接收、处理和发送,机器思考(启动搜索引擎),计时显示等。(3) SetRuleDialog.java:设置

    8、规则的对话框。(4) SetSysInfoDialog.java:设置系统的一些属性如对战模式、连接端口等。(5) Translation.java:提供了一系列实用方法主要有:1)FEN串与局面ChessPosition对象之间的转换2)不同着法表示(见第一章)之间的转换。如“炮二平五”与“Ch2-e2”及“62.5或C2.5“(C和6代表炮)这几种表示法之间的转换3)棋谱文件的读入和存储。4)开局库的生成:将近年实战的棋谱文件(可能有几种格式)整理生成开局库。2、运行结果:3、设计体会:本次课程设计主要是运用本学期所学到的Java基础知识来设计一个符合要求的中国象棋对弈系统,这期间我遇到了

    9、很多的困难,发现了很多的问题,正是在解决问题的期间我才慢慢地熟悉了Java的基础知识,才慢慢学会了如何去按照给定的要求设计出合适的java系统。通过本次课程设计,我明白了一个道理:无论做什么事情,都必需养成严谨,认真,善思的工作作风遇到问题最好的办法就是请教别人,因为每个人掌握的情况都不一样,一个人不可能做到处处都懂,必须发挥群众的力量,复杂的事情才能够简单化。这一点我深有体会,在很多时候,我遇到的困难或许别人之前就遇到过,向他们请教远比自己在那边摸索来得简单,来得快。附件程序代码:import java.awt.*;import java.awt.event.*;import javax.s

    10、wing.*;import java.util.*;import java.io.*;public class Chess public static void main(String args) new ChessMainFrame(中国象棋:观棋不语真君子,棋死无悔大丈夫); class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable 玩家 JLabel play = new JLabel32; 棋盘 JLabel image; 窗格 Container con; 工具栏 JToo

    11、lBar jmain; 重新开始 JButton anew; 悔棋 JButton repent; 退出 JButton exit; 当前信息 JLabel text; 保存当前操作 Vector Var; 规则类对象(使于调用方法) ChessRule rule; * * 单击棋子 * chessManClick = true 闪烁棋子 并给线程响应 * chessManClick = false 吃棋子 停止闪烁 并给线程响应 * boolean chessManClick; * * 控制玩家走棋 * chessPlayClick=1 黑棋走棋 * chessPlayClick=2 红棋走

    12、棋 默认红棋 * chessPlayClick=3 双方都不能走棋 * int chessPlayClick=2;控制棋子闪烁的线程 Thread tmain; 把第一次的单击棋子给线程响应 static int Man,i; ChessMainFrame() new ChessMainFrame(中国象棋); * * 构造函数 * 初始化图形用户界面 * ChessMainFrame(String Title) 获行客格引用 con = this.getContentPane(); con.setLayout(null); 实例化规则类 rule = new ChessRule(); Var

    13、 = 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(返回到上次走棋的位置);把组件添

    14、加到工具栏 jmain.setLayout(new GridLayout(0,4); jmain.add(anew); jmain.add(repent); jmain.add(exit); jmain.add(text); jmain.setBounds(); con.add(jmain); 添加棋子标签 drawChessMan();注册按扭监听 anew.addActionListener(this); repent.addActionListener(this); exit.addActionListener(this); 注册棋子移动监听 for (int i=0;i32;i+) c

    15、on.add(playi); playi.addMouseListener(this); 添加棋盘标签 con.add(image = new JLabel(new ImageIcon(imageMain.GIF); image.setBounds(); image.addMouseListener(this); 注册窗体关闭监听 this.addWindowListener( new WindowAdapter() public void windowClosing(WindowEvent we) System.exit(0); ); 窗体居中 Dimension screenSize =

    16、Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = this.getSize(); if (frameSize.(screenSize.width - frameSize.width) 2 - 280 ,(screenSize.(image红将.GIF).getImage(); this.setResizable(false); this.setTitle(Title); this.setSize(); this.show(); * * 添加棋子方法 * public void drawChessMan() 流程

    17、控制 int i,k; 图标 Icon in; 黑色棋子 车 in = new ImageIcon(image黑车.GIF); for (i=0,k=24;i2;i+,k+=456) playi = new JLabel(in); playi.setBounds(k); playi.setName(车1); 马 in = new ImageIcon(image黑马.GIF); for (i=4,k=81;i6;i+,k+=342) playi = new JLabel(in); playi.setBounds(k); playi.setName(马1); 相 in = new ImageIco

    18、n(image黑象.GIF); for (i=8,k=138;i10;i+,k+=228) playi = new JLabel(in); playi.setBounds(k); playi.setName(象1); 士 in = new ImageIcon(image黑士.GIF); for (i=12,k=195;i14;i+,k+=114) playi = new JLabel(in); playi.setBounds(k); playi.setName(士1); 卒 in = new ImageIcon(image黑卒.GIF); for (i=16,k=24;i21;i+,k+=11

    19、4) playi = new JLabel(in); playi.setBounds(k); playi.setName(卒1 + i); 炮 in = new ImageIcon(image黑炮.GIF); for (i=26,k=81;i28;i+,k+=342) playi = new JLabel(in); playi.setBounds(k); playi.setName(炮1 + i); 将 in = new ImageIcon(image黑将.GIF); play30 = new JLabel(in); play30.setBounds(); play30.setName(将1)

    20、;红色棋子 车 in = new ImageIcon(image红车.GIF); for (i=2,k=24;i4;i+,k+=456) playi = new JLabel(in); playi.setBounds(k); playi.setName(车2); 马 in = new ImageIcon(image红马.GIF); for (i=6,k=81;i8;i+,k+=342) playi = new JLabel(in); playi.setBounds(k); playi.setName(马2); 相 in = new ImageIcon(image红象.GIF); for (i=

    21、10,k=138;i12;i+,k+=228) playi = new JLabel(in); playi.setBounds(k); playi.setName(象2); 士 in = new ImageIcon(image红士.GIF); for (i=14,k=195;i16;i+,k+=114) playi = new JLabel(in); playi.setBounds(k); playi.setName(士2); 兵 in = new ImageIcon(image红卒.GIF); for (i=21,k=24;i26;i+,k+=114) playi = new JLabel(in); playi.setBounds(k); playi.setName(卒2 + i); 炮 in = new ImageIcon(image红炮.GIF); for (i=28,k=81;i 15 & Man 25 & Man =0 & Man 3 & Man 7 & Man 11 & Man 15 & Man 25 & Man =0 & Man 3 & Man 7 & Man 12) rule.elephantRule(Man,playMan,play,me); 移动仕、士 else if (Ma


    注意事项

    本文(完整版java毕业课程设计中国象棋java源码.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开