中国象棋对弈软件的设计【2014java版本】

合集下载

中国象棋详细设计分析

中国象棋详细设计分析

《计算机综合实习》题目:中国象棋(java单机版)班级:信息与计算科学1001班*名:***学号:*********指导教师:***日期:2014.1.7目录第一章引言(概述)........................................................................................................................ - 1 -第二章可行性分析.................................................................................................................................. - 2 -2.1 总体分析............................................................................................................................................. - 2 -2.2 开发环境介绍..................................................................................................................................... - 2 -2.2.1软件开发环境 (2)第三章需求设计...................................................................................................................................... - 2 -第四章详细设计.................................................................................................................................... - 3 -4.1 功能设计............................................................................................................................................. - 3 -4.1.1功能说明 (3)4.1.2对弈规则 (3)4.1.3相关类图 ................................................................................ 错误!未定义书签。

java课程设计---中国象棋对弈系统

java课程设计---中国象棋对弈系统

java课程设计---中国象棋对弈系统⽬录摘要 (1)关键字 (1)正⽂ (2)1、程序设计说明 (2)1.1 程序的设计及实现 (2)1.1.1搜索引擎的实现(engine包) (2)1.1.2信息传输机制(message包) (3)1.1.3棋⼦(pieces包) (3)1.2 主控模块(main包) (3)2、运⾏结果 (5)3、设计体会 (6)附件 (7)程序代码 (7)参考⽂献资料 (41)1中国象棋对弈系统Java语⾔程序设计实验报告实验项⽬名称:中国象棋对弈系统作者姓名与单位:李⾮计算机101摘要:本⽂主要是运⽤java实现具有⼀定功能的中国象棋对弈系统软件,主要功能如下:a、象棋对弈:红⽅先⾛,然后⿊⽅再⾛,红⿊交替,直到⼀⽅获胜。

b、新游戏:任何时候可以重新开始⼀盘新的对弈。

c、悔棋:当⾛错棋的时候可以悔棋。

d、信息提⽰:提⽰当前信息状态。

e、简单的帮助⽂档:象棋规则介绍、软件的简单介绍和编制说明关键词:java、中国象棋对弈系统2正⽂:⼀程序设计说明1.1程序的设计及实现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表⽰。

以马为例,位置的奖励值如下: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上⾯的每⾏代表棋盘的⼀条纵线。

java开发象棋游戏课程设计

java开发象棋游戏课程设计

java开发象棋游戏课程设计一、课程目标知识目标:1. 让学生掌握Java语言的基本语法和面向对象编程思想。

2. 使学生了解并运用Java的图形用户界面(GUI)编程,实现象棋游戏的基本界面设计。

3. 让学生掌握二维数组的使用,完成棋盘的设计与棋子的存储。

技能目标:1. 培养学生运用Java语言解决实际问题的能力,学会分析、设计和实现小型游戏程序。

2. 培养学生的逻辑思维能力,能够独立完成象棋游戏的基本规则编写。

3. 提高学生的团队协作能力,通过分组合作完成课程项目。

情感态度价值观目标:1. 培养学生对待编程的兴趣和热情,激发他们主动探索新技术的欲望。

2. 培养学生具有良好的编程习惯,注重代码规范和优化。

3. 培养学生面对挑战和困难时保持积极的态度,勇于克服问题,不断进步。

本课程结合学科特点,针对高年级学生的编程基础和认知水平,以Java语言为基础,设计具有实用性和挑战性的象棋游戏项目。

在教学过程中,注重理论与实践相结合,鼓励学生动手实践和团队协作,以达到预期的学习成果。

通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高编程能力和综合素质。

1. Java基本语法与面向对象编程:回顾Java基本语法,重点讲解面向对象编程思想,包括类与对象、封装、继承和多态等概念。

相关教材章节:第一章至第三章2. Java GUI编程:介绍Java图形用户界面编程,使用Swing库设计界面,包括窗口、按钮、菜单等组件的使用。

相关教材章节:第六章3. 二维数组与棋盘设计:讲解二维数组的定义和使用,运用二维数组实现棋盘的设计与棋子的存储。

相关教材章节:第四章4. 象棋游戏规则与逻辑编写:分析象棋游戏的基本规则,指导学生编写相关逻辑代码,实现棋子的移动、吃子等功能。

相关教材章节:第五章5. 课程项目实践:分组进行项目实践,学生根据教学大纲和进度,合作完成象棋游戏的设计与实现。

相关教材章节:第七章6. 代码优化与调试:教授学生如何优化代码,进行调试,提高程序的稳定性和运行效率。

java课程设计中国象棋

java课程设计中国象棋

象棋程序设计1.课程设计目的Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。

面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承,很好的融合了“面向对象”、“跨平台”和“编程简洁”等特性。

随着Java语言的不断发展,它的应用前景将更为宽阔。

本课程设计主要是使用Swing这个Java自带的图形开发工具实现中国象棋棋子及棋盘的绘制,并根据相应的象棋规则,实现在电脑上虚拟出可以供两个人对弈的象棋游戏,从而达到了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,熟练的应用面向对象的思想和设计方法解决实际问题的能力的目的。

2.设计方案论证2.1程序功能象棋是中国一种流传十分广泛的游戏。

下棋双方根据自己对棋局形式的理解和对棋艺规律的掌握,调动车马,组织兵力,协调作战在棋盘--这块特定的战场上进行着象征性的军事战斗。

本程序的功能就是将棋盘和棋子在电脑上模拟出来,双方可以通过鼠标对己方棋子的操作进行对弈。

2.2设计思路象棋,人人会走,把己方的棋子按不同棋子的规则放在棋盘合适的位置上。

象棋包含三个要素:棋盘、棋子和规则。

在本象棋程序的设计上,也大致遵循这三个要素,但是细化为四个方面:棋盘、棋盘上可以走棋的落子点、棋子和象棋规则。

棋盘其实就是一张棋盘的图形,我们要在计算机上的棋盘上落子并不像在现实生活中那么容易,这里说的棋盘充其量只是背景,真正落子的地方必须是我们在图形界面上设定的落子点,不同棋子只能按照各自的规则在这些设定的位置上摆放、搏杀。

2.3设计方法根据前面的细化,程序中分别设计了四个类对应棋盘、落子点、棋子和象棋规则这四个方面。

四个类几乎包括了程序的全部,程序框图如下图所示:图1 程序功能框图2.4详细设计 2.4.1棋子类ChessSwing 中并没有棋子这个组建类,所以我们必须设计一个组件,棋子其实就是圆形 的JLabel ,但Swing 中的JLabel 组件是方形的,没关系,利用JLabel 我们可以创建 圆形的JLabel 组件——Chess 。

java课程设计中国象棋

java课程设计中国象棋

java课程设计中国象棋一、课程目标知识目标:1. 让学生掌握中国象棋的基本规则和棋谱表示方法。

2. 帮助学生理解面向对象编程的基本概念,如类、对象、继承、封装等。

3. 引导学生运用Java语言实现中国象棋的基本功能,包括棋子的移动、胜负判断等。

技能目标:1. 培养学生运用Java编写程序解决问题的能力,提高编程技巧。

2. 培养学生对中国象棋的逻辑思考和策略运用能力。

3. 培养学生团队协作、沟通表达的能力,共同完成课程设计任务。

情感态度价值观目标:1. 激发学生对计算机编程和中国象棋的兴趣,提高学习积极性。

2. 培养学生勇于尝试、不断探索的精神,面对困难和挑战时不轻言放弃。

3. 增强学生的民族自豪感,传承和弘扬中华优秀传统文化。

课程性质分析:本课程为Java程序设计课程,结合中国象棋项目,旨在让学生在实践中掌握编程技能,提高解决问题的能力。

学生特点分析:学生处于高中年级,具备一定的编程基础和逻辑思维能力,对中国象棋有一定了解,具备较强的学习能力和团队合作精神。

教学要求:1. 教师应注重理论与实践相结合,引导学生运用所学知识解决实际问题。

2. 关注学生的个体差异,给予个性化指导,提高学生的编程能力。

3. 创设互动、讨论的学习氛围,培养学生的团队协作能力和创新精神。

4. 对课程目标进行分解,明确具体的学习成果,便于教学设计和评估。

二、教学内容1. 中国象棋基本规则及棋谱表示方法- 中国象棋的棋盘、棋子及其走法- 棋谱的记录和表示方式2. 面向对象编程基本概念- 类的定义、对象创建、属性和方法- 继承、封装、多态等特性3. Java编程基础- Java基本语法、数据类型、运算符- 控制结构、数组、字符串等4. 中国象棋程序设计- 设计棋盘类、棋子类、游戏规则类- 实现棋子的移动、胜负判断等功能5. 教学大纲与进度安排- 第一周:中国象棋基本规则及棋谱表示方法学习- 第二周:面向对象编程基本概念复习- 第三周:Java编程基础复习及实践- 第四周:设计棋盘类、棋子类、游戏规则类- 第五周:实现棋子的移动、胜负判断等功能- 第六周:课程设计总结、展示与评价教材章节关联:1. 《Java程序设计》第1-3章:Java基本语法、数据类型、运算符2. 《Java程序设计》第4-6章:面向对象编程基本概念3. 《中国象棋入门与提高》:中国象棋基本规则及棋谱表示方法教学内容组织:以项目为导向,将中国象棋与Java编程知识相结合,分阶段进行教学,逐步实现课程目标。

Java语言课程设计中国象棋打谱系统

Java语言课程设计中国象棋打谱系统

目录1.绪论 (2)1.1引言 (2)1.2主要设计内容 (3)2.开发工具简介 (3)2.1 java语言概述 (3)2.2 java语言的特点 (4)2.3 关于ECLIPSE (5)3.程序设计需求分析 (7)3.1任务概述 (7)3.2综合要求 (7)3.3 设计基本要求 (7)4.程序的总体设计 (8)4.1线程的设计 (8)4.2线程的生命周期 (9)5.程序的详细设计 (11)5.1程序流程图 (11)5.2数据字典 (12)5.3运行结果及界面 (16)6.实验总结 (18)参考文献 (18)附录(部分源代码) (19)1.绪论1.1引言象棋水平的发展是需要靠信息技术来推动的,国际象棋有两个很好的范例,一个是象棋棋谱编辑和对弈程序的公共平台——WinBoard平台,另一个是商业的国际象棋数据库和对弈软件——ChessBase,他们为国际象棋爱好者和研究者提供了极大的便利。

国际象棋软件有着成功的商业运作,已发展成一种产业。

然而,电脑在中国象棋上的运用还刚刚起步,尽管国内涌现出一大批中国象棋的专业网站和专业软件,但是由于缺乏必要的基础工作,电脑技术在中国象棋上的应用优势还无法体现出来。

在设计中国象棋软件过程中,国际象棋软件有很多值得借鉴的成功经验和优秀的思想。

例如 B. Moreland,微软(Microsoft)的程序设计师,业余从事国际象棋引擎Ferret的开发,他的一系列关于国际象棋程序设计的文章非常值得其他棋类程序设计人员借鉴。

然而,中国象棋与国际象棋存在着很大的差异,因此国际象棋的某些成熟技术,无法直接应用于中国象棋,需要对其加以改进和创新。

1.2主要设计内容本课题采用Java语言编写这个中国象棋对弈系统程序。

主要工作内容:搜集相关资料,准备参考资料,学习掌握开发方法、开发工具,需求分析,确定游戏程序实施方案,根据要求设计具体的流程图,编写程序,修改、完善程序,系统调试、测试,优化处理。

中国象棋打谱系统 JAVA课程设计报告

中国象棋打谱系统  JAVA课程设计报告

题目中国象棋打谱系统第一章总体设计1.1本系统的主要功能中国象棋打谱系统可以把对弈过程保存成文件,并可以重新演示对弈过程,即复盘。

1.2系统包含的类及类之间的关系本系统共包括10个java源文件。

如图1-1所示。

图1-1 类之间的关系2.2 java源文件及其功能1.ChinaChess.java该文件负责创建中国象棋打谱系统的主窗口。

2.ChessBoard.java该文件负责创建键盘。

3.ChessPiece.java该文件负责创建棋盘中的棋子。

4.Point.java该文件负责确定棋子在棋盘中的位置。

5.ChessBox.java该文件负责创建棋盘中的棋盒。

6.InitPieceLocation.java该文件负责安排棋子在棋盘中的初始位置。

7.InitCanju.java该文件使用户需要制作残局棋谱时,棋盘的开局要由用户来确定。

8.HandleMouse.java该文件负责处理鼠标事件,以便用户拖动棋子走棋。

9.MoveRule.java该文件负责验证用户的走法是否符合象棋规则。

10.DemoManulDialog.java该文件负责演示棋谱。

第二章详细设计2.1主类ChinaChess.java(1)成员变量见表2-1(2)方法见表2-2(3)源代码见文件ChinaChess.java2.2类ChessBoard(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件ChessBoard.java 2.3类ChessPiece(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件ChessPiece.java 2.4类Point(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件Point.java 2.5类ChessBox(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件ChessBox.java2.6类InitPieceLocation(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件InitPieceLocation.java 2.7类InitCanju(1)成员变量见表2-3(2)方法见表2-4表2-4 主要方法(3)源代码见文件InitCanju.java 2.8类HandleMouse(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件HandleMouse.java 2.9类MoveRule(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件MoveRule.java2.10类DemoManulDialog(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件DemoManulDialog.java第三章运行效果3.1 系统主界面图3-1 系统主窗口3.2 ×××录入界面。

基于JAVA中国象棋网络对弈软件毕业设计

基于JAVA中国象棋网络对弈软件毕业设计

摘要中国象棋网络版是一款可以实现多人同时在线的网络对弈象棋软件。

中国象棋网络版采用C/S架构,由跨平台的Java语言和MySQ L数据库开发,在开发过程中使用了多线程、java swing、Socket编程以及TCP和UDP协议等技术。

中国象棋网络版提供了:棋友状态列表,弈棋邀请,观看他人弈棋,棋谱记录和保存,在线交流,快速注册等功能。

服务端提供了:发布系统消息提示,服务器状态显示,在线棋友管理等功能。

最后,对系统进行测试表明,系统功能达到了预期的要求,实现与同类的象棋软件如QQ象棋类似的功能,具有界面友好,操作简便,运行稳定的特点,完成设计要求的功能。

本系统不足之处在于没有实现人机对弈、聊天记录的本机存储,将在以后的更新版本中逐步完善。

关键词:对弈,Java,多线程AbstractChinese chess online is a software can support multiplayer play chess online at the same time .The chinese chess online, based on the architecture of C/S, is developed by MySQL database and Java, a cross-platform language. In the development, multi-thread, Java swing, Socket programming and TCP/UDP protocol are applied. First, the newer can fast register and then get an account in the network version. The players can invite others to join, watch others playing, communicate with others online and hold chess-playing records. Of course ,there exists a status bar to check the states of all chess players. Here the service releases the notes of the system information, displays the state of itself, and deal with chess players online, etc. The test of the system indicates, all the expected functions have been realized. It has the similar functions just like the QQ chess, an online software of kind. The interface is on good terms, and the operation is easy, and also it runs stably. However, disappointingly, the computer can't be an opponent of the players, and the users' computer can't keep the chat records itself. These are both the weak points and the improvements will be made in the new version.Keywords: chess-playing , Java, Multithreading目录1. 前言 (1)1.1课题的研究目的和意义 (1)1.2开发和运行环境 (1)1.2.1开发环境 (1)1.2.2运行环境 (1)2.JAVA和网络套接字技术 (2)2.1J AVA简介 (2)2.2J AVA图形技术 (2)2.3J AVA事件响应技术 (4)2.3.1鼠标事件响应 (4)2.3.2键盘事件响应 (4)2.4网络网络通信技术 (4)2.4.1 TCP (4)2.4.2 UDP (4)2.4.3 Socket (5)2.4.4 Java实现 (5)3.中国象棋网络版架构设计与通信设计 (7)3.1中国象棋网络版架构分析与设计 (7)3.2中国象棋网络版数据通信设计与实现 (7)3.2.1通信协议选择 (7)3.2.2数据类型分析 (9)3.2.3数据格式设计 (11)3.2.4数据通信与处理伪码示例 (13)4.中国象棋网络版客户端实现 (16)4.1客户端基础架构 (16)4.2客户端GUI设计 (16)4.2.1弈棋主面板 (16)4.2.2用户列表面板 (17)4.2.3棋谱记录面板 (17)4.2.4用户交流面板 (17)4.3客户端类设计 (18)4.3.1 chessboardP (18)4.3.2 userP (18)4.3.3 chessstateP (19)4.3.4 chatP (19)4.3.5数据处理相关类 (19)4.4客户端主要算法伪码示例 (20)4.4.1棋子和棋盘状态维护算法简介 (20)4.4.2棋盘规则马规则伪码示例 (20)4.4.3棋子选择和移动伪码示例 (20)4.4.4棋谱生成部分伪码示例 (21)4.4.5棋局结果判定伪码示例 (22)4.4.6通信数据处理和分发算法简介 (22)4.4.7棋子选中闪烁算法简介 (22)5.中国象棋网络版服务器端实现 (23)5.1服务器端基础架构 (23)5.2服务器端GUI设计 (24)5.3服务器端类设计 (25)5.3.1 serverGUI (25)5.3.2 serverListener (25)5.3.3 chessroom (26)5.3.4 databaseinterface (26)5.4数据库相关开发 (26)5.4.1数据库需求分析 (26)5.4.2数据库表设计 (26)5.5服务器端主要算法伪码示例 (27)5.5.1登录注册时与数据库交互伪码示例 (27)5.5.2弈棋聊天用户列表维护数据转发算法简介 (28)5.5.3 MD5加密产生密匙伪码示例 (28)5.5.4踢用户下线伪码示例 (28)6.中国象棋网络版运行测试 (30)6.1.客户端功能测试 (30)6.1.1用户上线响应异常 (30)6.1.2弈棋过程中将可以出九宫异常 (31)6.2服务器端测试 (32)6.2.1用户下线后服务器在线用户数统计异常 (32)6.2.2对正在弈棋的用户强制下线异常 (33)6.3测试总结 (33)结束语 (34)致谢 (35)参考文献 (36)附录 (37)1.前言1.1 课题的研究目的和意义本课题的目的是采用Java语言编写实现网络象棋对弈软件,实现中国象棋的网络对弈,拥有用户列表、棋谱查看保存、在线交流等功能。

java-中国象棋课程设计

java-中国象棋课程设计

java-中国象棋课程设计一、课程目标知识目标:1. 了解中国象棋的基本规则和历史背景;2. 掌握Java编程语言的基本语法和面向对象编程思想;3. 学会使用Java编写中国象棋游戏的界面和基本功能;4. 理解游戏设计中涉及的数据结构和算法。

技能目标:1. 能够运用Java语言编写出具有基本功能的中国象棋游戏;2. 培养学生的编程思维和解决问题的能力;3. 学会运用面向对象的方法对现实问题进行分析、设计和实现;4. 提高学生的团队协作和沟通能力。

情感态度价值观目标:1. 培养学生对传统文化的兴趣和热爱,增强民族自豪感;2. 激发学生学习编程的兴趣,提高信息素养;3. 培养学生勇于尝试、不断探索的精神,增强克服困难的信心;4. 引导学生树立正确的价值观,认识到团队合作的重要性。

本课程针对的是具有一定Java编程基础的学生,结合中国象棋这一传统文化元素,旨在提高学生的编程能力和综合素质。

课程注重实践性和趣味性,让学生在完成项目的过程中,掌握编程技能,培养团队协作能力,同时深入理解中国象棋文化。

通过本课程的学习,学生将能够独立完成一个具有基本功能的中国象棋游戏,并在实践中不断提高自己的编程水平。

二、教学内容1. 中国象棋基本规则与历史:介绍中国象棋的起源、棋盘布局、棋子种类及走法、胜负判定等基本知识。

2. Java基本语法复习:回顾Java基本数据类型、控制结构、数组、类与对象等基础知识。

3. 面向对象编程:重点讲解封装、继承、多态等面向对象编程思想,并应用于中国象棋游戏设计。

- 棋盘类设计- 棋子类设计- 玩家类设计4. Java图形用户界面设计:介绍Swing图形用户界面库,实现中国象棋游戏界面设计。

- 棋盘界面绘制- 棋子图形显示- 鼠标事件处理5. 数据结构与算法:分析中国象棋游戏中的数据结构(如棋盘表示、棋子状态)和算法(如棋子移动、胜负判定)。

6. 游戏功能实现:根据面向对象设计,编写代码实现以下功能:- 棋子移动- 悔棋- 胜负判定- 人机对战(可选)7. 团队协作与项目实施:分组进行项目实践,培养学生的团队协作能力和沟通技巧。

中国象棋打谱系统-Java语言毕业设计(内附详细Java程序)

中国象棋打谱系统-Java语言毕业设计(内附详细Java程序)

JAVA语言课程设计设计题目:中国象棋打谱系统目录JA V A语言课程设计目录1 设计 (1)1.1 设计内容 (1)1.2 设计要求 (1)1.3 总体设计 (2)2 具体设计 (3)2.1运行效果和程序设计 (3)2.2 主类Chess (5)2.3对弈棋盘ChessBoard (9)2.4 棋子ChesePiece (19)2.5棋点ChessPoint (21)2.6 走棋规则Rule (23)2.7步骤MoveStep………………………………………….23.2.8记录棋谱MakeChessManual…………………………..24.2.9棋谱演示Demon (24)3课程总结 (25)1.1 设计内容中国象棋打谱系统使用户能够将对弈过程保存成文件,并能够重新演示对弈过程,即复盘。

1.2 设计要求1.中国象棋是双方在由9条和10条横线分割而成的棋盘对弈。

竖线与横线的交叉点称做棋点,每个棋子都放置在棋点上,而不是方格中。

河界将棋盘分为两个等分=份,没一边都有一个由9个点组成的区域“将”,“帅”,“士”只能在“九宫”内移动,并且“将”,“帅”,的每一步只可以水平或垂直移动一个棋点。

士:“士”只能在“九宫”内移动,并且每一步只可以沿对角线方向移动一个棋点。

象;一步必须沿对角线方向走两个棋点。

但它既不能过河,也不能跳过或穿越障碍,即象征走的过程不能被“别眼”。

马:每一步只可以水平或垂直移动一个棋点。

但它必须沿对角线方向,向左或向右移动,中国象棋的马不能跳过障碍,即在走的过程不能被“别腿”。

车:可以沿水平或垂直方向移动任意个无障碍的点。

炮:行走规则和车很类似,但它必须跳过一个棋子来吃掉对方的一个棋子。

被跳过的棋子被称为桥或者屏风。

兵:过河前每步只能向前移动一个棋点。

过河后,它便增加了向左右移动的能力。

并不允许向后移动。

2.单击“中国象棋”菜单可以选择“制作棋谱”,“保存棋谱”和“演示棋谱”菜单项。

3.选择“制作棋谱”,将出现相应的棋盘,该棋盘可进行实战对弈,可以随时选择“保存棋谱”,将对弈过程保存成一个棋谱文件。

中国象棋20140109

中国象棋20140109

原理及其实现
程序实现
每当一个连接建立后,服务器就实例化一个线程并将套接字作为其构 造凼数的参数传入。多个连接建立后,图示如下: 服务器 客户端 Socket1 数据结构与数据库 Socket2 Socket3 Socket4 Client1 Client2 Client3 Client4
:
:
原理及其实现
点击登录后的效果:
该用户名是丌存在的,无法登录成功,也有判断输入用户名和密码为空(以 下注册功能同)和密码错误的情况。
功能演示
点击注册后,输入信息
只有当用户名可用的时候,点击注册,注册才会成功,否则提示。
功能演示
注册成功后的界面
注册成功后,注册界面会消失,返回到登陆界面
功能演示
jajames登录成功后显示房间内的信息
功能演示
旁观后的界面:
功能演示
旁观者退出后一个客户端房间界面:
功能演示
正在游戏戒旁观的用户若退出房间,则提示如下:
功能演示
若用户退出游戏,对方的界面如下:
功能演示
退出游戏后的房间如下:
功能演示
jajames退出房间后
模块设计及思想
模块三:login
登录模块有登录和注册两个功能,第一次选中任何一个功能的时候进行 连接。 首先是对用户名个密码的格式的判断(比如丌能为空),对数据库进行 操作,根据返回的结果判断登录是否成功。在注册功能里面,只有返回用户 名可用时,才能成功注册。
模块四:Room
用Jlabel和JToggleButton表示用户准备不否,另外,用J List显示所有 在线用户及其状态。一旦按钮被选中,和它对应的标签就显示用户名,否则 显示空缺中。双击标签加入旁观。 需要考虑到的情况有: 1:对于已经选中的按钮,表用户在此准备,该用户点击无效

Java实训项目中国象棋设计报告

Java实训项目中国象棋设计报告

广西科技大学鹿山学院面向对象程序设计实训报告题目:网络中国象棋系别:电气与计算机工程系专业班级:计软141班姓名:邓康言学号: 20141409成绩评定:指导教师签字:2016 年 1 月10 日目录目录1、需求分析1.1 开发的背景·中国象棋有着悠久的历史,象棋爱好者更是不计其数,但是由于人们的工作地点从、时间的限制,原始的那种面对面的下棋方式已经不再适应人们的生活,人们已经开始走向网络象棋博弈·网络象棋有着很多的优点,通过网络象棋,对弈的双方是网络上任意的两个象棋爱好者,甚至是不认识。

网络让对弈的范围更加的广泛,让象棋爱好者可以与更多的象棋爱好者切磋棋艺。

1.2 算法·指定服务器端口号·支持多人同时在线··显示在线用户信息·显示当前在线所有用户·从在线用户列表中选择玩家进行挑战·接受或拒绝挑战1.3 要求·用Java语言实现系统,源程序要有适当的注释,使程序容易阅读·函数功能要划分好(结构化程序设计)·可以增加新功能模块2、总体分析与设计2.1 总体设计方案·系统功能模块图:2.2 功能描述2.2.1服务器端·可以指定服务器端口号。

·可以支持多人同时在线。

·可以显示在线用户信息。

·不允许玩家同名2.2.2客户端·能够通过主机IP号及端口号登陆到服务器。

·可以显示当前在线所有用户。

·可以从在线用户列表中选择玩家进行挑战。

·可以接受或拒绝挑战。

·如果对方在和其他玩家对弈中,则应该给与相应的提示信息。

·象棋规则一定要严密。

·棋子样式采用最普通的橡胶式象棋。

棋子为黑色,字为红色和白色2.3 算法设计----本程序功能模块根据程序设计的需要。

综合程序的实用性、智能化的考虑。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中国象棋对弈软件的设计姓名学科专业指导老师中国象棋对弈软件的设计摘要:随着人工智能及计算机硬件的发展,计算机象棋程序的下棋水平也不断地得到提高。

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 thebeginning of 60s,20th century, McCaxi brought forword alpha-beta pruningalgorism which made the chess program advanced more by reducing the order ofmagnitude of the number of searching nodes deciding next step,named ―StateSpace‖ from O(X n) to O(X n/2). IBM’s super-computer ―Deep Blue‖ is more like amyth for all computer chess fans. In my article, I will describe some ideas andmethods of designing Chinese Chess program along with some successfulexperiences and cases of the Chess.Keywords: Chinese Chess, bit board, zobrist keys, alpha-beta search, transposition table, Evaluation目录引言 (4)第一章概述 (5)1.1 棋盘的标记 (5)1.2 棋子的名称 (6)1.3 棋谱的记录方法 (6)1.4 历史局面的表示及存储 (8)1.5 棋谱记录文件的格式 (8)第二章基本数据结构——位棋盘 (11)2.1 什么是位棋盘 (11)2.2 位棋盘的作用 (11)2.3 位棋盘的基本运算 (13)2.4 Java中位棋盘的实现 (14)第三章基本数据结构——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搜索 (32)5.3 迭代加深 (36)5.4 置换表 (36)5.5 其他策略 (40)第六章局面评价函数 (46)6.1 评价函数的实现方法 (47)6.2 评价函数所需的信息 (47)第七章程序的设计及实现 (50)7.1 搜索引擎的实现(engine包) (50)7.2 信息传输机制(message包) (51)7.3 棋子生成(pieces包) (51)7.4 主控模块(main包) (51)附件1:搜索算法主程序SearchMove.java (55)附件2:程序运行界面及功能说明 (74)引言象棋水平的发展是需要靠信息技术来推动的,国际象棋有两个很好的范例,一个是象棋棋谱编辑和对弈程序的公共平台——WinBoard平台,另一个是商业的国际象棋数据库和对弈软件——ChessBase,他们为国际象棋爱好者和研究者提供了极大的便利。

国际象棋软件有着成功的商业运作,已发展成一种产业。

然而,电脑在中国象棋上的运用还刚刚起步,尽管国内涌现出一大批中国象棋的专业网站和专业软件,但是由于缺乏必要的基础工作,电脑技术在中国象棋上的应用优势还无法体现出来。

在设计中国象棋软件过程中,国际象棋软件有很多值得借鉴的成功经验和优秀的思想。

例如B. Moreland,微软(Microsoft)的程序设计师,业余从事国际象棋引擎Ferret的开发,他的一系列关于国际象棋程序设计的文章非常值得其他棋类程序设计人员借鉴。

然而,中国象棋与国际象棋存在着很大的差异,因此国际象棋的某些成熟技术,无法直接应用于中国象棋,需要对其加以改进和创新。

本文针对中国象棋程序设计的一系列问题,总结出一些搜索引擎的设计方法,并给出java语言的实现。

第一章概述中国象棋是由两人下的。

一方称为红方(或白方),一方称为黑方。

对局时由红方先走,黑方后走,一次一着,双方轮流走棋,直到对局结束为止。

棋子的走法及详细规则见《中国象棋竞赛规则》,本章只描述计算机实现象棋对弈程序时所涉及的一些概念及相关的表示方法。

1.1 棋盘的标记象棋的着法表示,简而言之就是某个棋子从什么位置走到什么位置。

通常,表示方法可以分为“纵线方式”和“坐标方式”两种,现在作简要说明:1.1.1 纵线方式这是中国象棋常用的表示方法,即棋子从棋盘的哪条线走到哪条线。

中国象棋规定,对于红方来说的纵线从右到左依次用“一”到“九”表示,黑方则是“1”到“9”(如图1所示),这种表示方式体现了古代中国象棋研究者的智慧。

1.1.2 坐标方式这是套用国际象棋中的表示方法,即把每个格子按坐标编号(如图二所示),只要知道起始格子和到达格子,就确定了着法,这种表示方式更方便也更合理,而且还可以移植到其他棋类游戏中。

采用这种方法来表示,棋盘的纵线从左到右(红方)依次为a b c d e f g h i,横线从下到上(红方)依次为0 1 2 3 4 5 6 7 8 9(如图2所示)。

1.2 棋子的名称为方便表示,中国象棋的棋子名称除了用汉字以外,还可以用字母,字母可从国际象棋中稍加改动得到,而数字是为了方便着法的输入(以便用在数字小键盘上)(见表1):1.3 棋谱的记录方法现以如下局面为例说明各种记谱方法1.3.1 坐标记法坐标格式包括:棋子的名称、起点和终点的位置(起点和终点用‘-’连接),对上面的走法,记录如下(省略了吃子、将军等信息):1、Ch2-e2(炮二平五) Ch7-e7(炮8平5)2、Ce2-e6(炮五进四) Ad9-e8(士4进5)3、Nh0-g2(马二进三) Nh9-g7(马8进7)4、Cb2-e2(炮八平五) Nb9-c7(马2进3)5、Ce6-e4(前炮退二) Ri9-h9(车9平8)1.3.2 中文纵线记法这种格式是中国象棋棋谱的常规记法,在各类出版物中最为普遍。

但是这里还是要说明两个重要的细节。

1、仕(士)和相(象)如果在同一纵线上,不用“前”和“后”区别,因为能退的一定在前,能进的一定在后。

2、兵要按情况讨论:(1) 三个兵在一条纵线上:用“前”、“中”和“后”来区别;(2) 三个以上兵在一条纵线上:最前面的兵用“一”代替“前”,以后依次是“二”、“三”、“四”和“五”;(3) 在有两条纵线,每条纵线上都有一个以上的兵:按照“先从右到左,再从前到后”(即先看最左边一列,从前到后依次标记为“一”和“二”,可能还有“三”,再看右边一列)的顺序,把这些兵的位置标依次标记为“一”、“二”、“三”、“四”和“五”,不在这两条纵线上的兵不参与标记。

如右图局面,四个兵分别位于四线和六线,下另外需要注意的是:(1) 如果黑方出现数字,不管数字代表纵线标号还是前进或后退的格数,都用阿拉伯数字表示,在计算机中显示全角的数字。

但是代表同一纵线上不同兵的“一二三四五”(它们类似于“前中后”的作用)例外,例如例局面红黑互换,那么某步着法就应该写成“一卒平5”。

(2) 在传统的象棋记谱中,如果发生以上这种情况,通常用五个字来表示,例如“前兵四平五”等,在计算机处理过程中就比较麻烦,因为4个汉字(一个汉字占16位)的着法可以储存在一个64位的字当中(在C语言中数据类型为__int64或long long),而增加到5个汉字就比较麻烦了。

黑方用全角的数字是同一个道理。

1.3.3 符号纵线记法这种格式仅仅是用字母和数字代替汉字,其中“进”、“退”和“平”分别用符号“+”、“-”和“.”表示,“前”、“中”和“后”也分别用符号“+”、“-”和“.”表示,并且写在棋子的后面(例如“前炮退二”写成“C+-2”而不是“+C-2”),多个兵位于一条纵线时,代替“前中后”的“一二三四五”分别用“abcde”表示(这种情况极少发生)。

另外,代表棋子名称的第一个字母,还可以用数字1到7表示,这是为了方便数字小键盘的输入,例如“炮二平五”可以记作“62.5“(6代表炮)选用符号“+”、“-”和“.”也是出于这个考虑。

1.4 历史局面的表示及存储中国象棋的一个局面可以用一个“FEN格式串”来表示。

FEN格式串是由4段ASCII字符串组成的代码(彼此3个空格隔开),这4段代码的意义依次是:(1) 棋盘上的棋子,这是FEN格式串的主要部分;(2) 当前局面轮到哪一方走子;(3) 最近一次吃子或者进兵后棋局进行的步数(半回合数),用来判断“50回合自然限着”;(4) 棋局的回合数。

现以最初局面为例详细说明如下:rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w 0 1第一部分(w前面的字符):表示棋盘布局,小写表示黑方棋子,大写表示红方棋子。

例如前九个字母rnbakabnr表示棋盘第一行的棋子分别为黑方的“车马象士将士象马车”,“/”为棋盘行与行之间的分割;数字“9(5,1)”表示该行从该位置起连续9(5,1)个位置无棋子。

第二部分(w):表示轮到哪一方走棋,如果是w表示轮到红方(白方)走,是b表示轮到黑方走。

第三部分(w后的数字0):表示自然限着。

第四部分(w后的数字1):表示当前局面的回合数。

1.5 棋谱记录文件的格式存放棋谱的文件分为两个部分:标签部分和棋谱部分,现分述如下:1.5.1 标签部分有如下标签1、Event:比赛名;2、Site:比赛地点;3、Date:比赛日期,格式统一为"yyyy.mm.dd";4、Red:红方棋手;5、Black:黑方棋手;6、Result:比赛结果,“红先胜”用“1-0”表示,“黑先胜”用“0-1”表示,和棋用“1/2-1/2”7、FenStr:起始局面。

相关文档
最新文档