4.1总体流程图和中国象棋功能模块
中国象棋游戏需要实现的基本功能应包括以下几个方面: (1) 提供棋盘和棋子;(2) 设定棋子的走棋规则;(3) 可以悔棋、重来、退出; (4) 判断胜负。 根据对中国象棋游戏的功能分析,设计得到中国象棋游戏的总流程图如图6
开始 中国象棋主界面 按钮、鼠标事件 鼠标 按钮 棋子控制 棋盘控制 退出重来悔棋 棋子移动 棋子闪烁 吃棋子 游戏结束 退出 结束 所示: 图6总体流程图 4.2各部分功能流程图 4.2.1开始游戏
该功能为本游戏的最核心的部分,它实现了中国象棋游戏的最主要的操作,是其他功能的基础。
开始游戏流程图如图7所示:
6
开始 开始游戏 红棋先走 继续游戏 是否悔棋 悔棋 继续游戏 是否重来 继续游戏
图7 开始游戏流程图 5、详细设计 一方输了 5.1 结构图设计 游戏结束 象棋主框架 结束 按钮或鼠源判断 标触发 按钮事件 鼠标事件 重来 退出 棋盘控制 棋子控制
棋子移动 棋子闪烁 吃棋子 图8 系统总体结构图
7
5.2 棋盘、棋子绘制的算法设计
本中国象棋有限的棋盘和棋子采用的都是图片,采用图片比较简单,不用绘制那么多条线,用图片来代替棋盘和棋子。建立坐标系,只需使用函数调用图片文件,把象棋图片有序的排列,再使用排列棋子的函数把棋子有序排列。其中,棋盘距页面左边距离为24,上面为56,棋盘一格为57,棋子直径为55,棋子间的距离为2,例如从上面开始,黑棋子“车”的坐标为(24,56),黑马为(81,56),红“车”的坐标(24,596),依此类推就可以计算各棋子的坐标,这样算法较易实现。
5.3 棋种走棋规则的算法设计
5.3.1 “车”的走棋规则的算法设计
“车”,它只能走直线,且中间不能有任何棋子,设计时分为两种情况来考虑,一种是纵向行走;一种是横向行走。用if语句来判断实现,例如车纵向行走,首先,用if来判断棋子是否纵向行走,接着再用另一判断语句if来判断中间有没别的棋子。横向行走同理。如果棋子车符合以上的走棋规则,则可以走动,否则棋子强制放回原处。现在假设车的棋点坐标为(i,j),i为横坐标,j为纵坐标,再设x,y为棋盘内任意值。
算法设计流程图如图9所示:
8
开始 棋子“车”,设其棋点为(i,j) 是否是纵向(i,j±y)||横向(i±x,j)判断 纵向行(i,j±y)棋子斜向行 横向行(i+x,j) 中间有棋子是自己的 中间有棋子,自己的 棋子不能动 棋子可以动 棋子不能动 棋子不能动 结束 图9 “车”的走棋规则算法设计流程图 5.3.2 “马”的走棋规则的算法设计
“马”,它只能走“日”字格,而且马腿不能被其它的棋子压到。设计时可 两种情况来考虑,一种是横向走两个棋点,纵向走一个棋点;一种是纵向走两个棋点,横向走一个棋点。用if语句来判断。首先,用if来判断棋子是否横向走两个棋点,纵向走一个棋点,接着再用判断语句if来判断马腿是否被其它棋子压着。纵向走“日”同理。如果棋子马符合以上的走棋规则,则可以走动,否则棋子强制放回原处。现在假设马的棋点坐标为(a,b),a为横坐标,b为纵坐标,再设x,y为棋盘内任意值。
算法设计流程图如图10所示:
9
开始 棋子“马”,设其棋点为(i,j) 是否是“日”字格行走 判断 横向一棋点纵向行两 棋点(i±1,j±2) 横向行两棋点纵向一棋点(i±2,j±1) 点(i,j±1)有棋子 马被压 (i±1,j)有棋子 马被压 棋子不能动 棋子可以动 棋子不能动 棋子不能动 结束
图10 “马”的走棋规则算法设计流程图
5.3.3 “卒”的走棋规则的算法设计
“卒”,它的行走规则分两种情况。一种是棋子没过河界,另一种是棋子过了河界。用if语句来判断,首先,用if语句来设定棋子没过河界,接着设定棋子在没过河界的情况下只能向前行走一个棋点;然后用if语句来设定棋子过了河界,紧接着设定棋子在过了河界的情况下只能向前、向左、向右行走一个棋点。如果棋子卒符合以上的走棋规则,则可以走动,否则棋子强制放回原处。现在假设卒的棋点坐标为(i,j),i为横坐标,j为纵坐标,再设x,y为棋盘内任意值。
算法设计流程图如图11所示:
10
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库中国象棋人人对战(2)在线全文阅读。
相关推荐: