《中国象棋游戏设计.docx》由会员分享,可在线阅读,更多相关《中国象棋游戏设计.docx(32页珍藏版)》请在三一办公上搜索。
1、中国象棋游戏设计JIU JIANG UNIVERSITY 毕 业 设 计 题 目 中国象棋游戏设计 英文题目 Chinese Chess Game Design 院 系 信息科学与技术学院 专 业 信息管理与信息系统 姓 名 林传玉 班级学号 A102215 指导教师 杨桃 二一四年五月 信息科学与技术学院学士学位论文 摘 要 中国象棋游戏系统是以C/S架构为基础开发的对弈软件,以灵活独立的Java语言为主要开发工具,其中多线程、JavaSwing、Socket编程以及数组和字符串的运用等技术都在开发过程中有所涉猎。 在计算机广泛普及的背景之下,中国象棋游戏解决了由时间、地域和对手有限等面对面
2、对弈所产生的问题,给人们带来很多方便。对于象棋游戏的研究,通过棋盘类的开发实现棋盘模块,从移动区域、移动规则两个方面详细研究并描述象棋七类棋子的基本属性和棋子走法。另外,通过对系统的运行测试,表明系统除了实现基于Java技术的中国象棋游戏行棋规则算法,得以使每个棋子的行棋路线都严格遵循棋子属性所具备的走棋规则之外,还具有悔棋、计时、求和、认输等功能,而系统本身也具备界面朴素,操作简便,运行稳定的特点。 系统虽然调试完成,但是仍有许多不足之处,比如没有实现人机对弈,没有聊天记录的本机储存等功能。不过,随着开发经验的积累,系统的缺陷和不足将会逐步得到完善。 关键词:中国象棋,设计,软件,多线程,信
3、息技术 I 信息科学与技术学院学士学位论文 Abstract Chinese 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 da
4、bbled 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
5、 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 algori
6、thm 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
7、 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
8、. Keywords: Chinese Chess, Design, Software, Muiti Theard, Information Technology II 信息科学与技术学院学士学位论文 目 录 摘 要 . 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)
9、 3.2 系统的功能模块设计 . (13) 3.3 走棋和吃棋规则设计 . (14) 3.4 主要算法伪码示例 . (18) 3.5 本章小结 . (22) III 信息科学与技术学院学士学位论文 4 系统运行测试 4.1 服务端和客户端运行测试 . (23) 4.2 客户端和客户端运行测试 . (25) 4.3 本章小结 . (29) 5 总结与展望 5.1 全文总结 . (30) 5.2 研究展望 . (30) 致 谢 . (32) 参考文献 . (33) IV 信息科学与技术学院学士学位论文 1 绪论 1.1 课题背景 中国象棋作为我国的十大“国粹”之一,其爱好者不计其数。中国象棋的发端
10、真可谓源远流长,早在先秦时期便已孕出雏形。经过岁月的洗涤,两千多年的演化变迁,中国象棋早已成了一项家喻户晓、饭后闲时的消遣活动。而我们目前见到的这种象棋规则和对弈模式却直到宋朝才制定完成。其中,棋子“炮”的运用也是在火药火炮发明之后补充进去的,然后慢慢形成眼下的规则和模式。中国象棋之所以流传至今,是因为随着时间的沉淀,人们不断地将智慧灌入其中,加以完善。象棋的演变过程与历史变迁有着密切的联系,如同生命一般,随着时代的发展,它也跟着改头换面,与时俱进。 现今,在计算机上进行象棋对战的新颖弈棋模式备受象棋爱好者推崇,而面对面切磋棋艺的传统对弈形式正在慢慢地退离历史舞台,渐渐地淡出人们的生活圈。随着
11、Java语言的流行,游戏与Java技术平台有了更多的合作。Java有很多优秀性能,致使越来越多的程序开发人员愿意使用Java语言开发程序。在互联网风行的今天,Java技术开发的游戏与网络通讯技术对接,开拓出一片广阔的领地。 中国象棋浓烈的益智趣味,使得它在竞技博弈类游戏的中脱颖而出,博得众多玩家的青睐。说到游戏深度,也非文化底蕴浓厚的象棋莫属。它的操作过程既能深谋远虑,又可步步为营,不仅能够激发玩家高瞻远瞩、排兵布阵的逻辑性,还可以启发玩家对“得失取舍、轻重缓急”等命题进行哲学思考;在修身养性的同时,既能够交朋结友,又可以消遣娱乐,好处多多,真可谓一举多得。 Java开发技术近几年在游戏开发领
12、域日趋成熟,得到多方面的认可。而象棋游戏的开发,也有很多先例,包括腾讯QQ象棋,JJ象棋等等。也就是说,本课题有很多值得借鉴和参考的前作。这对于研究而言,是一件非常幸运的事。目前,作为一名学生,本课题的研究并不是以商业营利为目的,主要希望能够通过这款中国象棋游戏软件的开发,熟练地掌握在Eclipse下的Java开发技术,灵活运用Socket网1 信息科学与技术学院学士学位论文 络套接技术、数组和字符串等知识。根据具体的分析和设计尝试实现一款简单的对弈软件,深入浅出地找出象棋游戏规律,了解并运用各类棋子的行棋套路,以便获得实用可行的开发方法,通过掌握这项技能丰富自己的实践知识库1。 1.2 课题
13、研究的内容与意义 中国象棋游戏系统是以Java语言为开发基础,采用C/S体系结构设计的一款中国象棋游戏研究。C/S架构的原则是将计算机应用任务分解成多个子任务,将所要实现的功能模块分工完成,即功能分布原则。客户端完成数据处理,数据表示以及用户接口功能,服务端完成数据管理系统的核心功能。这种客户请求服务,服务器提供服务的处理方式是一种新型的计算机应用模式。C/S架构的程序开发使用的是网络套接技术,从客户端和服务器端两个方面进行深入研究,细化完善。服务器端是开发客户端的基础,只有以服务器框架为基础,才能在开发客户端过程中进行一些相关的测试,这是这类游戏的基本开发模式。 通过对系统进行可行性分析、功
14、能模块分析和需求分析,进而总结归纳出系统应当具备的功能和所需完成的任务。首先通过技术、经济和社会等方面的分析,归纳出开发的象棋游戏应该具备怎样的功能,通过需求分析进行详细的评估报告。根据象棋本身的规则属性,以及各个棋子、士、象、馬、車、炮、卒)的走法规则进行研究并且进行算法设计,本研究还打算增加一些辅助的趣味功能,比如悔棋、认输、求和等功能。 在系统研究过程中,我们还会根据各自棋子设计的需要而恰当地使用数组进行数据及状态的存储,联机等操作也会尽量使用字符串进行服务器和客户端之间的通信,并且为了让桌面美观,还会使用Java图形技术对图片应用抗锯齿等操作;Socket网络套接技术的使用,数组和字符
15、串的运用,以及匿名内部类实现接口中的方法等技术都会在开发过程中加以利用。 本课题的意义在于通过对Java语言各种基础的学习,把四年来所学的理论知识运用到具体的实践操作当中,务必熟练掌握Java的运行环境,各种控件,基本工具抽象类的接口等技术。对于流程控制的把握,实现各项功能的拿捏,这是一个分析、2 信息科学与技术学院学士学位论文 归纳和表达的过程,是检验综合能力的一种方式。比如遇到问题,应该采取怎样的处理是方式,并且在实际操作中的灵活运用所学知识的能力,这是检测综合能力的关键,而毕业设计的撰写和研究相当于给了我们一次系统的训练,是学以致用的直接案例。对于个人成长而言,使我知道怎样去剖析事物内部
16、结构,如何去观察事物的发展规律,以及从适当的角度去判断事物的轻重缓急,无论是从时间上,还是从逻辑程度上都是一个提升自我能力的过程,是掌握实际技能不可多得的体验。学会把压力变作动力,无论是对个人还是对社会,都有推进作用。就课题本身而言,对中国象棋游戏的开发一个有了比较全面的了解,对传统对弈的继承,对全新技术的引用,同时为以后添加新元素打下坚实的基础,通过多方面的考虑,作为一个可持续发展的游戏,需要不断改进,本系统的设计与实现相当于一个过渡的过程,具有一定的积极意义2-3。 1.3 技术思路 本系统是采用Java语言开发一款中国象棋对弈软件,以网络对弈的形式实现中国象棋的基本功能和主要模块。 C/
17、S体系结构是本系统的基础架构,两端非常突出的硬件环境,可以合理地实现分配到Client端和Server端的任务,使系统的通讯成本降低。服务器端通过多线程的开发与运用,发送和接收通信信息,聊天和用户状态,以及棋局处理模块等功能,在客户端需要实现菜单栏、窗口界面、棋盘、棋子、昵称等模块。 在软件的开发过程中,先构建服务器端主类框架,实现相关的窗口,按钮,以及相应的功能,接着开发服务器线程和服务器代理线程,为客户端的开发运行做准备。服务器端开发完毕后,着手客户端主类框架的开发,完成界面的搭建和一些简单的业务处理,实现初始化方法,以及主类业务代码的框架的落实;随后进行客户端代理线程的开发,对连接的处理
18、等;客户端代理线程完成后,紧接着对象棋规则主类框架进行开发,对应相应的棋子规则的处理方法的实现;然后进行开发棋盘类代码框架,实现鼠标事件的处理方法。在完善主类业务代码过程中,对相应的按钮进行相关的事件处理。 3 信息科学与技术学院学士学位论文 棋盘棋子的背景色和选中后的棋子颜色是通过声明常量实现的,声明常量的优点在于有利于修改程序。网络通信的过程是代理线程完成的,服务器端代理线程和客户端代理线程之间的连接是通过字符串传递消息实现的。服务器端有什么变化客户端会收到相应的信息,反之亦然。再采用Socket网络套接技术实现建立接口,传输数据等功能。基于Java的中国象棋游戏系统是图形界面、线程、监听
19、器和文件等技术的综合运用4。 1.4 本章小结 本章简单介绍了关于象棋游戏的历史演变,Java语言与游戏开发之间的关系;简单概述了设计思路,以及开发过程中需要研究的内容和方向。内容主要集中在中国象棋软件的基本功能实现上,使玩家可以在线游戏。 4 信息科学与技术学院学士学位论文 2 系统分析 系统分析是开发软件之前必须完成的一些准备工作,为软件的顺利开发打下良好的基础,知道自己要做什么,并且计划好要怎么做,同时它也是系统设计的前提,所以系统分析务必要详细,防止造成项目的返工,带来不必要的损失。 2.1 可行性分析 2.1.1 技术可行性 Java是Sun Microsystem 公司开发的编程语
20、言,Java语言具有高效性、通用性、平台移植性和安全性等特点。通常运用Eclipse软件进行编写,并进行编译执行。 Java 是一种非常新的语言,并且具有不断更新的功能,同时具有面向对象、分布式、解释执行、体系结构中立、可移植性、多线程、以及动态性等特点。同其他编程语言比起来,还要数Java技高一筹。中国象棋游戏系统的开发之所以使用Java语言,主要体现在以下几个方面: 灵活性 “一次编写,到处运行”的Java语言是非常灵活的,它支持部署和开发环境中的各种变化。即使改变运行平台,也只需要做少量的改动,有时甚至不用修改也能在不同的平台运行。 厂商的广泛支持 “Java 语言靠群体的力量而非公司的
21、力量”是Sun公司的口号之一,并获得了广大软件开发商的关注和认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。 用户的广泛支持 简洁方便的Java语言拥有良好的用户基础,它没有C语言包含的指针、结构、单元等晦涩难懂、容易混淆的特性,备受程序开发员的青睐。它并不局限于某一个5 信息科学与技术学院学士学位论文 特定的公司。在互联网上,有许多资源以及Java示例代码。另外,程序员还可以使用很多免费软件或共享软件和许多应用程序代码5。 2.1.2 经济可行性 经济可行性是指可以使用的资源的可行性,主要分析核算成本与效益之间的关系,从经济角度判断该系统的开发成本是否小于它的预期经济效益。当发布开
22、发任务后,技术开发人员首先需要研究开发任务,明确开发思路,判断出现的问题是否有简单便捷、合理可行的解决方法。经验告诉我们,在系统的实际开发过程中,有许多问题不可能在预期的规模内解决。如果某些问题无法很好的解决,那么花费在该工程上的任何时间、资源和经费都是浪费的。因此经济可行性分析是一项不可少的内容。 本课题的研究范畴不包括商业营利,系统开发是根据所学Java知识,采用Java开发环境Eclipse软件来完成,然后通过图书馆借阅的书籍及网上搜索的相关资料进行撰写研究,在经济方面,所有的成本花销都自主承担,具有一定的经济可行性6。 2.1.3 社会可行性 如今,计算机科技的飞速发展,致使计算机的使
23、用率不断地增长,个人计算机得到广泛的普及。上至老翁,下及孩童,现代人轻易就能熟练地掌握计算机的基本使用技巧,而人们也习惯利用网络平台进行学习工作和娱乐互动,在这样的趋势下,更有利于人力资源的有效利用。而且本文研究的象棋游戏软件的简单易用,人们能够轻松地使用该软件进行对弈活动。 2.2 系统功能模块分析 本软件要实现多用户在线弈棋,所以采用C/S架构,服务器端和客户端分别完成各自的功能。 服务器需要实现启动服务器,两大维护在线用户信息,接收客户端信息,向客户端发送信息等功能。 6 信息科学与技术学院学士学位论文 客户端需要实现连接服务器,选择玩家挑战,接受或拒绝挑战,向服务器发送信息,接受服务器
24、传来的信息等功能。 中国象棋的棋盘是由9条竖线和10条横线相交组成,共有64个方格,90个交点。棋子就摆在交叉点上。中间部分,也就是棋盘的第五,第六两横线之间末画竖线的空白地带称为“河界”。在中国象棋的棋盘中间,常有一块空白区域,上写有“楚河”、“汉界”字样,这是以下棋比况历史上的“楚汉战争”。在棋盘的两端,各有一个由四个小方格组成的“米”字型的大方格,它有九个棋点,又称作“九宫”,象征着中军帐。 中国象棋总共有32个棋子,可以分成7类,即将、士、象、馬、車、炮、卒,每类棋子都有自己的行棋规则。将同属一类,只能在九宫之内的棋点活动,一次只能移动一个棋点。士也只能在九宫之内活动,但它和将不同,士
25、只能走九宫图内的斜线。象走“田”,不能过河,当“田”中间那个棋点落有别的棋子,象不能移动。馬走“日”,可以跳到棋盘的任意位置,但假如馬在“日”字左上角位置,恰好下方坐落一粒棋子,则馬不能跳到“日”字右下角地方,俗称“蹩馬腿”。以此类推,出现此类情况馬不能跳动。車走直线,是最活跃的一个角色,只要直线畅通无阻,車可以任意移动多少个棋点。炮的移动性能和車相似,不同的是,它要隔一个棋子才能杀伤对方。卒一步只能挪一个棋点,未过河之前,只有向前移动一种选择,过河之后可以向左向右,唯独不能向后7。 2.3 需求分析 目前生活节奏加快,大多数象棋爱好者因工作繁忙而无暇进行面对面的棋艺切磋交流,技痒难挠之时往往
26、通过计算机或手机下载象棋软件满足需求。针对这一社会现状,通过与一部分象棋爱好者交流及问卷调查,本课题研发的象棋游戏至少需要具备服务器端、客户端和其他辅助功能的基本需求。 7 信息科学与技术学院学士学位论文 2.3.1 服务器端 在服务器端需要具备以下功能: 可以指定服务端口号。 可以支撑多人同时在线。 可以显示在线用户信息,并且随时更新。 不允许玩家同名。 2.3.2 客户端 在客户端需要具备以下功能: 能通过主机IP及端口号登录到服务器。 可以显示当前所有在线用户。 可以从在线用户列表中选择玩家进行挑战。 可以接受或拒绝挑战。 如果对方正在与其他玩家对弈,则给出相应的提示信息。 象棋规则一定
27、要严密。 棋子样式采用最普通的橡胶式象棋,即棋子背景是黑色,棋子分为红色和白色。 2.3.3 辅助功能 除了以上功能外,还可根据实际开发操作添加一些辅助功能: 开始 对弈双方启动客户端后,点击“连接”按钮接上服务器,选择在线用户下拉列表中选择玩家发出挑战,若对方接受挑战,则双方正式开始游戏,红方先走棋。若对方拒绝挑战,则继续选择别的用户发出挑战。 计时 计时是预设下一盘棋和走一步棋在正常范围内所需要的时间,若是玩家在设定8 信息科学与技术学院学士学位论文 的局时内没有下完,则挑战失败,默认挑战者输;若是在规定的步时内没有进行走棋操作,则默认该方为输家。 悔棋 有时,有些玩家粗心大意,或者有操之
28、过急等失误,通过协商,获得对方的同意可返回上一步操作。 求和 有时对弈双方势均力敌,难分高下,当有一方玩家认为这一棋局难以分出胜负,就可以操作此功能,若得到对方的同意,则作和棋处理。 认输 当一方玩家认为己方大势已去,无力回天,为了尽快进行下一局对弈重新开始,就可进行此操作,用不着对方同意便可直接判定对方获胜,己方输阵。 聊天 用户双方可以进行文字互动,进行一些不影响对弈的简单的沟通。 2.3.4 棋盘和棋子功能 中国象棋是双方在有着9条竖线和10条横线的棋盘上对弈,竖线和横线的交叉点称为棋点或对弈点,每个棋子都是在棋点上行走,而不是在方格中移动。 河界将棋盘分成两等分,每一边都有一块9个棋点
29、组成的九宫。 “将、帥”只能在九宫内移动,并且“将”和“帥”每一步只可以水平或垂直移动一个棋点; “士、仕”只能在九宫内移动,每一步只可以沿着对角线移动一个棋点; “象、相”必须一次沿着对角线方向走两个棋点,但它不能过河也不能跳过或穿越障碍,即象不能别眼; “馬”每一步只可以水平或垂直移动两个棋点,但必须按对角线向左或向右移动,中国象棋的馬不能跳过障碍,即不能拗馬腿; “車”可以水平或垂直方向任意移动一个无障碍的点; “炮、砲”移动起来和車类似,但它必须跳过一个棋子来吃掉对方的一个棋9 信息科学与技术学院学士学位论文 子; “卒、兵”每步只能向前移动一个棋子,过河以后,它便增加了向左右移动的能
30、力,不允许向后移动8-9。 2.4 本章小结 本章通过需求分析和可行性分析对系统做了一个详细的分析,从象棋软件的功能需求、技术可行性、经济可行性和社会可行性等方面分析,从而得出结论,本课题所要实现的中国象棋游戏软件是可行的。 10 信息科学与技术学院学士学位论文 3 系统设计 3.1 中国象棋游戏的结构设计 中国象棋游戏的主体是客户端,整个游戏的规则都在客户端,服务器端只是在中间传递数据,起到一个中介的作用。因为只有有了服务器的基础框架,客户端在开发过程中才能进行一些必要的测试,这是该类游戏一般的开发流程 。 服务器端运行后,用户可以通过运行类进入服务器的主界面。服务器线程是服务器启动后创建并
31、启动的第一个线程,该线程主要用于接收客户端的连接,并为每一个连接分配一个服务器代理线程 。服务器代理线程主要用于接收客户端传来的信息,并将该信息转发给对应的另一客户端。服务器为所有客户端都分配了一个该类线程实例,单独为特定客户端进行服务。同时每一个服务器代理线程都有能惟一标识其的名称,即昵称。 客户端运行后,用户通过运行类连接服务器,也是通过在该类的窗体中与其他玩家进行对弈。客户端代理线程主要用于接收服务器传来的消息,并根据不同的消息进行相应的业务处理。客户端与服务器连接,完成通信框架的开发。中国象棋游戏服务器端和客户端的结构图如图3-1所示。 图3-1 C/S结构图 11 信息科学与技术学院
32、学士学位论文 棋盘类除了完成绘制棋盘的作用,同时还负责下棋逻辑的处理。棋子规则类的开发,下棋的规则和棋子行棋着法的生成。 对于棋盘的开发,主要是运用数组下标代替像素坐标,将棋子放在数组里。这样对于每一个位置的状态,都可以通过对应的数组状态进行确定,非常的方便。由于棋盘粘附在桌面上,所以也要用到网络套接字技术。游戏通信主要是通过字符串传递信息。 通过使用抗锯齿这个知识点,使象棋棋子变的更加的平滑,美观。这里用到了Swing的相关知识。不过,由于抗锯齿占用很大的系统资源,如果使用不当会严重影响游戏的性能 。 中国象棋对弈过程是由红方先走棋,每走一步需要判断是否结束,若尚未分出胜负,则由对方走棋,直
33、到分出胜负为止。中国象棋对弈流程图如图3-2所示。 图3-2 对弈流程图 12 信息科学与技术学院学士学位论文 服务器和客户端完成开发后,若要进行正常的对弈,主要通过走棋规则和吃棋规则来实现。中国象棋游戏的客户端即是游戏界面,它包括菜单栏,棋盘和棋子,以及相关的信息提示。各个棋子的行棋规则和吃棋规则是开发过程的重点和难点。此软件的层次结构图如图3-3所示。 图3-3 中国象棋游戏的层次结构图 3.2 系统的功能模块设计 3.2.1 计时功能 在正式开始游戏之前,系统有默认的局时和步时,也可由挑战者自行设定局时和步时。局时是限制一盘棋的时间,设定的时限一到则该局结束,由系统默认挑战者挑战失败;走
34、一步棋允许使用的最大时限称为步时,为了防止玩家拖延超时,若玩家超时,则系统默判该玩家放弃走棋,对家获胜。 在通常情况下,局时是分钟数,步时是秒数。设置局时和步时,需要输入自然数,当数值设置为0时,默认没有时间限制。 运用Thread方法定义局时、步时倒计时线程,“int Jtime=0,Btime=0;”定义局时、13 信息科学与技术学院学士学位论文 步时限制。“int jtime; int Rbtime,Bbtime;”显示双方的局时、步时的剩余时间。用setBounds( )设置双方局时、步时在界面上的显示位置。 在游戏开始之前设置局时、步时,正式开始游戏,则启动局时、步时倒计时线程。当局
35、时或步时完毕时,结束进程,即游戏结束。 3.2.2 悔棋功能 在对弈过程中,误操作和失误的一方可以向另一方提出悔棋要求,双方经过协商,请求的一方得到对方同意后,系统执行悔棋程序,可返回上一步的状态。 通过定义Vector Var来保存棋子的动作,定义悔棋方法“HuiQi(int n)”。在游戏进行时,当某方点击悔棋按钮,则认为是那方要求悔棋,由另一方同意悔棋后,执行“HuiQi(int n)”方法,返回到该方前一步走棋状态,继续由该方走棋,并删除Var中相应的记录。 3.2.3 求和和认输功能 求和是在玩家认为无论怎样都无法战胜对手,而对手也没有战胜自己的可能,这时候需要执行求和功能,另一方同
36、意后,判定该局为和棋,游戏结束,返回初始状态。 认输是在玩家走投无路没有任何赢面,或自认为一定会输时,主动放弃,则判定对方获胜,游戏结束,回到初始化界面。 3.3 走棋和吃棋规则设计 根据象棋的基本规则,通常是红棋先走,在各自的约束条件下双方轮流各走一步,直至分出胜负,或者和棋,对局即结束。当走棋的一方将某个棋子从一个棋点移动到另一个棋点,或者吃掉对方的棋子覆盖其棋点时,算走了一步。以此类推,双方各走一步,称为一个回合。 14 信息科学与技术学院学士学位论文 3.3.1 走棋规则 “将、帥”的行棋规则设计 “将、帥”只在各自的九宫格内活动,每一步仅可以横向或竖向移动一个棋点。使用if语句来判断
37、,先定义两个整数常量a、b,分别获得I,J坐标的差,通过if来判断棋子是否走一格,然后在(start J=4)的条件下,有两种情况,通过if来判断下方的“将”是否走出“九宫”;接着用if来判断上方的“帥”是否越界。再通过if来判断“将”和“帥”是否左右越界。如果棋子“将”、“帥”都在各自的约束之下,则移向目标点,否则棋子原地不动。 现在我们假设“将”、“帥”的棋点坐标为(I,J),I为横坐标,J为纵坐标,则a=max I-min I, b=max J-min J。下列棋子坐标也使用该方法获得坐标的差。 “士、仕”的行棋规则设计 “士、仕”只在九宫格内活动,每一步只能够沿对角方向斜移一个棋点。这
38、样只有一种情况来考虑,即纵向走一个棋点,横向走一个棋点。用if语句来判断,在if(a=1 & b=1)条件下,if,分两种情况,通过if来判断下方的“士”是否越界;使用if来判断上方的“仕”是否越界。再通过if来判断“士”和“仕”是否越过左右两边的界限。假若棋子“士”和“仕”符合各自的走棋规则,则可以走动,否则棋子原地不动。 “象、相”的行棋规则设计 “象、相”只能在河界的一侧活动,即不能过河,每一步只能沿对角线方向移动两个棋点,俗语说的“象走田”,即从“田”字的一角,跳到所处“田”字位置的对角。若是“盖象眼”的话,则不能移动,即“田”字中心不能有落子。 这得从上下两端两种情况分别考虑,行棋规
39、则是纵向走两个棋点,横向也走两个棋点。用if语句来判断,先用if(a=2 & b=2)来判断棋子是否走田字格,再通过if来判断棋子“象”是否过河,通过if来判断棋子“相”是否过河;接着在运用if语句来判断“田”15 信息科学与技术学院学士学位论文 字中间是否有棋子。如果棋子“象”和“相”没有违背各自的属性,则可以移到目标点,否则棋子原地不动。 “馬”的行棋规则设计 “馬”可以在棋盘任意位置活动,每一步可分解成两个部分,即水平方向移动两个棋点,再垂直方向移动一个棋点,俗语将两部分合在一起的这一步称为“馬走日”。倘若蹩馬腿,即馬处于“日”字左上角,要移动到“日”字右下角,则左上角下一个棋点那个位置
40、不能落子,否则馬不能移动。蹩馬腿的情况以此类推。 设计时可两种情况来考虑,一种是走横向“日”字,有从上往下和自下向上两种情境,一种是走竖向“日”字,也有两种情境。用if语句来判断,例如馬横向走“日”,首先,用if(a=2 & b=1)来判断棋子是否横向走两个棋点,纵向走一个棋点,接着再用判断语句if(qizistart I+1start J!=null)和if (qizi startI-1start J!=null)来判断棋子馬腿处是否有棋子。纵向走“日”同理。如果棋子“馬”不是走“日”,则棋子不移动。如果棋子“馬”符合以上的走棋规则,则可以移到目标位置,否则棋子强制不动。 “車”的行棋规则设
41、计 “車”可以在棋盘任意位置移动,每一步能够在水平或垂直方向移动任意个没有阻碍的棋点。它的这一属性,使得大多数棋友都视車如命,它操作简单,杀伤力巨大,既能一步登天,也能亦步亦趋。它只能走直线,且中间不能有任何棋子,设计时分为两种情况来考虑,一种是纵向行走;一种是横向行走。用if语句来判断实现,例如車纵向行走,首先,用if(max J=min J)来判断棋子是否纵向行走,接着再用判断语句if(qiziimaxJ!=null)来判断竖线中间是否存在别的棋子。横向行走同理。如果棋子“車”符合以上的走棋规则,则能够移到目标点,否则棋子强制不动。 “炮、砲”的行棋规则设计 “炮、砲”可以在棋盘任意位置活
42、动,移动起来和車极其相似。只是跑在吃子之时,可以隔子吃子,运用得当往往能够得到意想不到的效果。 如果棋子“炮、砲”走的是竖线,且终点有棋子,则需要判断棋子棋点和重点16 信息科学与技术学院学士学位论文 之间存在几颗棋子,若是没有棋子,则在终点的前一位可以任意移动;若是有多颗棋子,在与最近那颗棋子中间可以自由移动。当“炮、砲”进行吃子时,若是中间有一颗棋子,而第二颗棋子是对方棋子,则可以将其覆盖掉;若是第二颗棋子是己方棋子,则不能将其覆盖。 “卒、兵”的行棋规则设计 “卒、兵”的行走规则分两种情况。一种是棋子没过河界,另一种是棋子过了河界。用if语句来判断,首先,用if(start J4)语句来
43、判断棋子“卒”是否过河界,接着使用if来判断它是否向前走,随后通过if来判断棋子“卒”是否走一个棋点;然后用if(end J=6)语句来设定棋子过了河界,紧接着设定棋子在过了河界的情况下只能向前、向左、向右行走一个棋点。同理,用if来判断棋子“兵”是否过河,再以同样的方法判断其他规则。如果棋子“卒”和“兵”符合以上各自的走棋规则,则可以走动,否则棋子强制放回原处10-11 。 3.3.2 吃棋规则 通过棋子的行棋规则,每一颗棋子在各自的行棋规则内每走一步棋,若是目标棋子是对方的棋子,则己方棋子可以直接把对方棋子覆盖掉,占领该棋点。除“炮、砲”以外。棋子“炮、砲”吃子时,目标棋子中间必须隔一个棋
44、子跳吃,中间有且仅能隔一个棋子,己方对方均可,即俗称“炮打接子连”。吃子的一方,把被吃掉的棋子移走并占居对方原来位置12。 走棋和吃棋流程图3-4所示。 17 信息科学与技术学院学士学位论文 图3-4 走棋和吃棋流程图 在鼠标点击监听“mouseClicked”方法中,先单击己方棋子,并保存棋子下标Man及坐标,再单击可移动棋点,走棋或吃子,并保存记录。 定义“boolean Move(Ex,Ey)”方法,设置棋子移动吃子规则,另外定义“booleanpaoEat(ix,iy)”方法定义炮吃子规则。 3.4 主要算法伪码示例 3.4.1 棋子和棋盘状态维护算法简介 中国象棋游戏棋盘是由9条竖线和10横线交叉而成,中间有一块空白的区域称为“楚河汉界”,即是象和卒的临界点。对阵两边各执一方战场,在己18 信息科学与技术学院学士学位论文 方中心各有一个交叉线打造的“九宫格”,相当于将帥的大本营。 棋盘是用一个910的二维数组表示的,由一个QiZi.java的一个实例对象维护,该类有一个属性QiZi910 的二维数组,系统通过此数组来进行整个棋盘状态的维护。棋盘布局如图3-5所示。 图3-5 棋盘布局图 3.4.2 棋盘规则馬规则伪码示例 Begin: 初始化-int 起动X坐标,起动Y坐标,落定X坐标,落定Y坐