象棋程序设计
- 格式:doc
- 大小:111.50 KB
- 文档页数:14
中国象棋程序课程设计一、课程目标知识目标:1. 学生能够理解中国象棋的基本规则,掌握棋谱的阅读和编写方法。
2. 学生能够描述中国象棋程序的编程思路和算法,了解其运作原理。
3. 学生能够运用所学知识,分析和优化中国象棋程序的性能。
技能目标:1. 学生能够运用编程语言,独立编写一个简单的中国象棋程序。
2. 学生能够通过调试和修改程序,提高程序的稳定性和棋力。
3. 学生能够运用逻辑思维和问题分析能力,解决中国象棋程序中出现的问题。
情感态度价值观目标:1. 学生培养对中国传统文化的热爱,增强民族自豪感。
2. 学生通过团队协作和交流,培养合作精神和沟通能力。
3. 学生在面对挑战时,保持积极的心态,勇于尝试和克服困难。
课程性质:本课程为信息技术与传统文化相结合的课程,旨在培养学生的编程能力、逻辑思维和问题解决能力。
学生特点:初中生,具有一定的信息技术基础,对中国象棋有一定的了解,好奇心强,喜欢探索和挑战。
教学要求:结合学生特点,注重理论与实践相结合,强调学生的动手实践和创新能力,提高学生的综合素质。
通过本课程的学习,使学生能够将所学知识应用于实际编程中,培养他们对中国传统文化的兴趣和热爱。
同时,关注学生的学习过程,将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 中国象棋基本规则及棋谱阅读:讲解中国象棋的历史、棋盘布局、棋子走法及胜负判定方法,使学生了解并掌握棋谱的阅读和编写。
教学内容安排:教材第1章“中国象棋概述”2. 编程基础及中国象棋程序设计思路:介绍编程基础知识,如变量、循环、条件判断等,并讲解中国象棋程序的编程思路和算法。
教学内容安排:教材第2章“编程基础”和第3章“中国象棋程序设计”3. 中国象棋程序编写与调试:指导学生运用所学编程知识,编写简单的中国象棋程序,并通过调试和修改,提高程序的稳定性和棋力。
教学内容安排:教材第4章“程序编写与调试”4. 程序优化与性能分析:教授学生如何分析程序性能,介绍优化方法,使学生在实践中提高中国象棋程序的棋力。
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上⾯的每⾏代表棋盘的⼀条纵线。
象棋游戏C#程序设计报告这个程序中主要训练了象棋的一些算法,以及关于多态和继承的思想。
程序没有花俏的界面,就是一个程序主窗体,也为棋盘部分。
用一个函数来记录棋盘上所有点的坐标,再把所有坐标点均采用一个数学公式求出此点映射到一维数组对应的索引,由索引来确定棋子的走动。
其中程序中的各种判断机制,特别是各种情况效验,主要为if的使用,包括类型比对,空值判断等等。
首先确定用户操作,在编写程序前,我们应该先确定我们的用户共有哪些行为和操作,在确定这些行为和操作以后,我们再对它进行模块划分。
我们的用户所做的所有操作仅两个,一是点击棋子,二是点击棋盘。
而点击棋子可能带来的操作为选中棋子和吃掉棋子,而我们点击棋盘则会带来移动棋子的过程。
分割程序模块,所有的操作和行为已经确定,接下来应该划分具体的模块,大体上,我们可以划分出棋盘和棋子两个大模块,但是在我们象棋中,棋子一共有7种,各有个性,单也有共性。
比如,所有棋子移动均不能超越棋盘边界,均不能阁棋子移动,这些都是象棋棋子的共性。
角色的事件激发过程,接下来分析一下每个参与的角色的事件激发过程。
用户点中棋子包含两个操作,选中棋子和吃棋子。
所有的操作均来自棋子被选中以后,只有当有了目标棋子以后,所有的包括移动,吃棋子才产生意义。
在象棋中有伦次概念,即蓝方移动以后,伦次应转换为红方移动。
那么当第二次操作,即移动或者吃棋子以后应该转换伦次。
棋盘为9X10格,那么此时不可能使用象素点来做为定位网格。
但是可以假定一个虚拟的网格模型,必须确定整个棋盘的边界。
编码实现一、Class1是一个自定义类,记录了旗盘位置特点类,以非常技巧的数据结构,记录了每一时刻旗盘上的旗子情况。
GetNearPoint 求两点间的距离公式N (x2-x1)2-(y2-y2)2CountIndex已知一个点,求出此点映射到一维数组对应的索引,既是代表在棋盘上的位置。
公式为:(y2-y1)/this.height*9+(x2-x1)/this.width由index决定是前进还是往后退:int index=this.CountIndex(point);if(index>=0&&index<45)return "up";else{ if(index>=45&&index<90)return "down";二、class2继承于class1,也是一个自定义类,记录了旗盘位置特点类,规定了各个旗子的走法。
JIU JIANG UNIVERSITY毕业设计题目中国象棋游戏设计英文题目Chinese Chess Game Design院系信息科学与技术学院专业信息管理与信息系统姓名林传玉班级学号 A102215 指导教师杨桃二O一四年五月摘要中国象棋游戏系统是以C/S架构为基础开发的对弈软件,以灵活独立的Java语言为主要开发工具,其中多线程、JavaSwing、Socket编程以及数组和字符串的运用等技术都在开发过程中有所涉猎。
在计算机广泛普及的背景之下,中国象棋游戏解决了由时间、地域和对手有限等面对面对弈所产生的问题,给人们带来很多方便。
对于象棋游戏的研究,通过棋盘类的开发实现棋盘模块,从移动区域、移动规则两个方面详细研究并描述象棋七类棋子的基本属性和棋子走法。
另外,通过对系统的运行测试,表明系统除了实现基于Java技术的中国象棋游戏行棋规则算法,得以使每个棋子的行棋路线都严格遵循棋子属性所具备的走棋规则之外,还具有悔棋、计时、求和、认输等功能,而系统本身也具备界面朴素,操作简便,运行稳定的特点。
系统虽然调试完成,但是仍有许多不足之处,比如没有实现人机对弈,没有聊天记录的本机储存等功能。
不过,随着开发经验的积累,系统的缺陷和不足将会逐步得到完善。
关键词:中国象棋,设计,软件,多线程,信息技术AbstractChinese chess game system is a game software which is developed on the basis of C/S architecture, and using the flexible independent Java language as the main development tools, multi-threading, JavaSwing, Socket programming as well as array and character string are dabbled in the process of development in technology.Under the broad background of the network, the problems resulting from face to face rival game, like the limits of time, region and opponents etc, are solved, to bring a lot of convenience. For the study of chess games, board module achieved through the development of boards, study and describe the basic properties and pawn moves of the seven categories of chess from two aspects of mobile area and moving rules. Furthermore, through the operation tests of the system, it shows that in addition to realize the Chinese chess game moves rules algorithm based on Java technology, so that each piece moves on line strictly follow pieces attribute of the rules of playing chess, the system also has undo, timing, summation, throw in the towel and other functions, and the system itself has characteristics of simple interface, easy operation and stable operation.While System debugging is completed, but there are still many deficiencies, such as no man-machine chess, no chats local storage and other functions. However, with the accumulation of development experience, and gradually perfect the flaw and the insufficiency of the system is imperative.Keywords: Chinese Chess, Design, Software, Muiti Theard, Information Technology目录摘要 (I)Abstract (II)1 绪论1.1 课题背景 (1)1.2 课题研究的内容与意义 (2)1.3 技术思路 (3)1.4 本章小结 (4)2 系统分析2.1 可行性分析 (5)2.2 系统功能模块分析 (6)2.3 需求分析 (7)2.4 本章小结 (10)3 系统设计3.1 中国象棋游戏的结构设计 (11)3.2 系统的功能模块设计 (13)3.3 走棋和吃棋规则设计 (14)3.4 主要算法伪码示例 (18)3.5 本章小结 (22)4 系统运行测试4.1 服务端和客户端运行测试 (23)4.2 客户端和客户端运行测试 (25)4.3 本章小结 (29)5 总结与展望5.1 全文总结 (30)5.2 研究展望 (30)致谢 (32)参考文献 (33)1 绪论1.1 课题背景中国象棋作为我国的十大“国粹”之一,其爱好者不计其数。
象棋程序设计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 。
象棋AI程序的设计和优化一、引言象棋AI程序是人工智能领域的重要应用之一,其研发能够帮助人们更好地了解人工智能和算法优化。
本文将对象棋AI程序的设计和优化进行详细分析,力求给读者带来更多有用的知识。
二、象棋AI程序的设计1. 算法选择象棋AI程序的设计中,最重要的是算法选择。
目前比较好的算法包括蒙特卡洛树搜索算法、alpha-beta剪枝算法、深度学习算法。
蒙特卡洛树搜索算法较为适合在复杂性较高的棋类游戏中应用,alpha-beta剪枝算法适合用于对弈棋类游戏,深度学习算法则适用于一些较为简单、直观的棋类游戏。
2. 棋盘表示棋盘表示是象棋AI程序设计中比较重要的一环。
象棋的棋子可以表示为一个数字,每个数字代表一个明确的棋子,如车、马、象、士、将、炮、兵等。
通过数字来对每个棋子的位置进行表示,可以大大简化程序设计的工作量,也能够更加方便地实现算法优化。
要注意的是,棋子的数字表示需要与人们所理解的棋子相对应。
3. 算法优化算法优化是人工智能程序设计的关键部分。
在象棋AI程序设计中,可以采取的一种优化方法是对程序的运行时间进行优化。
这一方面可以通过设计一些高效的数据结构来进行实现,例如哈希表、Trie树、B+树等。
另一方面还可以通过并行计算的方法来提高程序的效率,例如GPU并行计算、多核CPU计算等。
三、象棋AI程序的优化1. alpha-beta剪枝算法的优化alpha-beta剪枝算法是目前在象棋AI程序设计中最流行、最适用的一种算法。
要使算法能够获得更好的效果,则需要对其进行一些优化。
首先,可以通过设置一个合适的搜索深度来将程序的运行时间缩短。
另外,还可以通过设计一些高效的数据结构来提高运算速度。
2. 蒙特卡洛树搜索算法的优化蒙特卡洛树搜索算法是在复杂性较高的棋类游戏中应用比较广泛的一种算法。
要提高算法的效率,则需要对其进行更加精细的调整。
一种常用的优化方法是使用动态规划,通过利用之前的搜索结果来进行快速采样,以得到更加准确的结果。
象棋游戏的设计与实现目录1引言 (1)1.1象棋设计背景和研究意义 (1)1.2象棋设计研究方法 (1)2人工智能算法设计 (2)2.1棋局表示 (3)2.2着法生成 (4)2.3搜索算法 (5)2.4历史启发及着法排序 (9)2.5局面评估 (9)2.6程序组装 (11)3界面及程序辅助设计 (12)3.1界面基本框架 (12)3.2多线程 (13)3.3着法名称显示 (14)3.4悔棋和还原 (15)4系统实现 (16)结论 (19)参考文献 (20)1引言1.1 象棋设计背景和研究意义电脑游戏行业经过二十年的发展,已经成为与影视、音乐等并驾齐驱的全球最重要的娱乐产业之一,其年销售额超过好莱坞的全年收入。
游戏,作为一种娱乐活动。
早期的人类社会由于生产力及科技的制约,只能进行一些户外的游戏。
随着生产力的发展和科技进步,一种新的游戏方式——电子游戏也随之诞生。
当计算机发明以后,电子游戏又多了一个新的载体。
电子游戏在整个计算机产业的带动下不断地创新、发展着。
自从计算机发明,向各个领域发展,到成为我们现在每天工作和生活必不可少的一部分的这个过程中,电子游戏也逐步渗入我们每个人的娱乐活动中。
而计算机已经普及的今天,对于可以用计算机进行程序编辑的人来说,开发属于自己的游戏,已经不再是梦想。
事实上,个人计算机软件市场的大约80%销售份额是来自游戏软件。
棋牌游戏属于休闲类游戏,相对于角色扮演类游戏和即时战略类游戏等其它游戏,具有上手快、游戏时间短的特点,更利于用户进行放松休闲,为人们所喜爱,特别是棋类游戏,方便、快捷、操作简单,在休闲娱乐中占主要位置。
作为中华民族悠久文化的代表之一,中国象棋不仅源远流长,而且基础广泛,作为一项智力运动,中国象棋开始走向世界。
随着计算机处理速度的飞速提高,人们很早就提出了疑问:计算机是否会超越人类?世界国际象棋大师已被计算机打败,计算机已经超过了人类?而人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。
计算机学院20034级程序设计高级实验C大型作业报告题目:中国象棋系统双人对下游戏程序。
一.系统功能说明本游戏程序为中国象棋双人对下,只要有一方的将(帅)被对方吃掉后系统自动判断输赢,并显示Black is winning the game或(Red is winning the game)。
在走棋过程中,系统自动提示红(黑)方走。
如果有一方想放弃本局,就可以点击象棋框右边的退出框。
如果一局结束后想继续走,则只要用鼠标点击右边的开始框,则进行新一局游戏(具体游戏界面见附录二)。
二.使用说明(1)本程序所使用库函数说明include<stdio.h>stdio.h中的基本函数;include<process.h>process.h中的exit(0)函数;include<dos.h>dos.h中相关鼠标操作设置;include<math.h>math.h中的fabs()函数;include<conio.h>include<graphics.h>graphics.h中的 setcolor(),setfillstyle(),line(),moveto(), floodfill(),circle(),rectange()等函数;(2)程序使用说明鼠标点击棋子一下(棋子外圈变红色),则可以移动当前的棋子;鼠标点击两下(棋子外圈变白色),则取消当前所选的棋子。
三.程序结构1.程序结构说明见中国象棋流程图(附录一)。
2.重要数据的说明见附录二棋子半径R=17,棋盘框窗口(60,50,380,410),操作者框窗口(460,40,570,90),开始框窗口(460,110,570,160),退出框窗口(460,180,570,230),游戏说明框窗口(460,240,570,410)。
3.程序函数清单(1)自己所编的小型汉字库void get_hz(int hanzi,unsigned char bur[]);(2)显示汉字void print_hz(unsigned char *mat,int color,int x,int y);(3)画棋子void drawQizi(struct mouse* mouse1,int color);(4)初始化游戏(显示游戏棋盘包括操作、开始、退出、游戏说明框,棋子)void showQiPan();(5)鼠标初始化void initmouse();(6)初始鼠标位置void cursttoxy(int x,int y);(7)显示开始框showKSK(int color);(8)显示退出框showTCK(int color);(9)显示说明框showSMK(int color);(10)显示操作框showCZK(int color);(11)取消当前鼠标位置void cancelMouse(int x,int y);(12)显示鼠标位置void showMouse(int x,int y);(13)读取当前鼠标位置void readmouse(int* bottom,int* mousex,int* mousey);(14)判断各个棋子的步法int judgestepright(struct mouse* mouse0,struct mouse* mouse1,int a[10][9]);(15)是否退出游戏int isoutgame(int mousex,int mousey);(16)是否存在棋子int isexistQi(struct mouse *mouse,int a[10][9],int number);(17)是否开始游戏int begingame(int mousex,int mousey);(18)判断输赢int checkwin(int temp);(19)是否要取消当前要移动的起子int iscancelQizi(struct mouse* mouse0,struct mouse* mouse1) (20)改变棋子void changeQizi(struct mouse* mouse0,struct mouse* mouse1);(21)改变棋子边框颜色void changecolor(struct mouse* mouse0);(22)游戏界面初始化void newGame();(23)结束游戏void GameOver();四.系统设计难点及其解决方法(1)由于本游戏是在TC下运行的,而TC不能直接输出汉字,则在游戏界面上的汉字输出有一定的问题。
本科学生综合性实验报告课程名称:Java程序设计中国象棋项目成员学号班级B02班项目名称中国象棋指导教师开课学期2013 至2014 学年第1 学期完成时间2013 年12 月25 日1.引言 (1)1.1开发背景 (1)1.2国内外象棋发展状况 (1)1.3开发目标 (2)1.4开发环境 (2)2.设计思路 (2)2.1设计步骤 (2)2.2设计流程图 (3)3.设计技术 (3)3.1io技术 (3)3.2多线程 (4)3.3swing (4)4.设计规则 (4)4.1走棋规则 (4)4.2吃棋规则 (4)5.代码实现 (4)6.程序测试 (5)6.1步骤一:点击运行 (5)6.2步骤二: (6)7.总结与提升 (10)1.引言1.1开发背景中国象棋游戏流传至今已经有数千年的历史了,是一种古老的文化,它集文化、科学、艺术、竞技于一体,有利于开发人的智慧,锻炼人的思维,培养人的毅力,增强人的竞争意识。
自从计算机发明,向各个领域发展,到成为我们现在每天工作和生活必不可少的一部分的这个过程中,电子游戏也逐步渗入我们每个人的娱乐活动中。
在计算机已经普及的今天,对于可以用计算机进行程序编辑的人来说,开发属于自己的游戏,已经不再是梦想,中国象棋历史悠久不仅源远流长,而且基础广泛,作为一项智力运动更成为我们游戏开发的首选对象。
中国象棋是一项智力游戏,以往都是人和人下棋,现在有了计算机我们可以和计算机竞技,人可以与计算机进行对弈。
控制计算机的是人类,而人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。
因此,对游戏开发过程中的人工智能技术的研究自然也就成了业界的一个热门研究方向。
1.2国内外象棋发展状况中国象棋游戏流传至今已经有数千年的历史了,是一种古老的文化,它集文化、科学、艺术、竞技于一体,有利于开发人的智慧,锻炼人的思维,培养人的毅力,增强人的竞争意识。
目录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语言编写这个中国象棋对弈系统程序。
主要工作内容:搜集相关资料,准备参考资料,学习掌握开发方法、开发工具,需求分析,确定游戏程序实施方案,根据要求设计具体的流程图,编写程序,修改、完善程序,系统调试、测试,优化处理。
落子点其实就是在图形界面上定义一个应该摆放棋子的点位置,棋子摆放在任何位置都视为非法,除了落子点。
当然,描述一个点位置仅仅是类Point的基本功能之一,他还需要知道这个点上是否已有棋子以及是什么棋子。
棋盘类ChessBord
棋盘其实就是我们看到的一个图形界面,将棋盘设计为JPanel类,在Jpanel 这个容器上,我们可以利用坐标确定落子点,也可以加入我们自定义的棋子组件。
JPanel容器其实就像有底色的画布,有了落子点和棋子,还需要我们自己画横线和竖线。
ChessBord继承了JPanel,覆写方法paintCompont,实例化JPanel 时,会自动调用该方法。
规则类ChessRule
ChessRule类的作用就是判断走棋是否合法。
实现思路就是根据走棋的起点和终点计算走棋路线中是否有其他的棋子,再依据是何种棋子判断走棋是否合法。
类ChessFrame
虽然上面4个类实现了象棋程序的所有功能,但还需要一个底层窗口容器加载ChessBoard这个JPanel。
并添加相应的菜单。
3.设计结果与分析
程序运行之后,可以实现两个人分别控制红方和黑方的棋子进行对弈,缺点就是程序过于简单,只能实现上述功能,不能悔棋,没有计时功能,也不能实现人机对弈功能。
程序运行结果如下所示:
图2. Chess类的运行结果“车”
绘制“中国象棋棋盘”,通过定义划横线,画左侧的竖线,画最右侧的竖线,画中间的竖线,画斜线等操作,输出程序的棋盘的运行结果。
图3.中国象棋棋盘
通过定义X坐标,Y坐标,和棋子,并将棋子加入到棋盘上的指定位置,输出中国象棋开局的程序运行结果。
图4.中国象棋程序运行效果图——开局
图5.中国象棋程序运行效果图——残局。