基于C围棋定式管理系统.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于C围棋定式管理系统

基于C围棋定式管理系统   【摘要】 围棋有五种基本定式,将围棋定式与计算机技术结合以后,查询定式、学习定式将不再是麻烦事。文章介绍了基于C++技术的围棋定式管理系统制作原理并详细说明了制作该系统所用到的基本算法。   【关键词】 围棋定式;二叉树;前序遍历   【中图分类号】 G891.3   【文献标识码】 B   【文章编号】 1005-1074(2008)08-0058-02      围棋定式就是在围棋活动中长久以来逐渐形成的各种进攻或防守的模式。围棋的基本定式有五种:小目定式、目外定式、高目定式、星定式、三三定式。采用面向对象方法编写围棋定式管理系统是很有实用性的,初学者学习围棋时辅以该系统学习一系列的定式、布局和攻防,不断地进行对战,在实战中增加对定式、布局的理解,强化攻防转换的能力,从而使自己的围棋水平更上一层楼。      1 围棋棋子的显示      每一个围棋定式都是由一个个的下棋步骤组成的,每一个下棋步骤在棋盘中显示。那么我们就应该先研究如何将棋盘以及棋子在计算机中显示出来。围棋棋盘的形状为正方形或略呈长方形的平面图,现在的棋盘为平面上画横竖各19条平行线,构成361个交叉点。棋盘上可分为9个部分,分别称为:左上角、左下角、右上角、右下角、上边、下边、左边、右边和中腹。棋盘上共有九个黑点称作“星”,棋心的黑点称作“天元”。[1]   绘制可以利用C++ Builder强大的图形编程功能进行绘制。绘制围棋棋盘时要用到的组件有TImage,其中用到TCanvas对象。绘制棋盘时只要通过循环就可以画出横竖各十九条平行线的棋盘。   还应该考虑的一个问题是如何在用户点击棋盘时在点击处显示出一个棋子。棋子分为白色与黑色两种,利用TCanvas的画图功能同样可以画出棋子。棋盘的范围有限,绘制棋子时应该先判断点击的位置是否在棋盘的范围内,若在棋盘范围内则调用画图函数画出棋子;若超出棋盘范围,则不显示。[4]      2 主要算法分析      2.1 建立二叉树实现定式的存储      上图是三三定式的一部分结构图。白1尖冲三三,是对三三的一种对策.利用三三位置偏低尽量的压扁它是一种取势的下法。黑方走后,轮到白方走。那么我们把黑方在棋盘上的坐标位置当作树的根,那么根据三三定式,白方有可能走的位置就是A、B、C、D、E。1长,也是出头的要点。如果在A位挡,就会被黑毫不犹豫的在1位扳。被黑扳起来的话,黑的出路宽阔,根据地也有了。倒是白的头被捂着,前面和左面和下面的出路都没有了,只有右边的出路还没有根据地,这样的棋很被动,很容易遭杀。所以,白1长必然,当然也有在C位跳的棋.长更坚实有利瞄着B位的拐头封锁和A位的挡。[1]   这相当于树的父节点为1,1的孩子节点为A、B、C、D、E。将围棋中任何一个定式按步骤展开,我们会发现定式中每一步都是有序的,且每一步需要保存的信息为该步在棋盘中的坐标位置,整个定式展开与数据结构中树的遍历很相似。   将一种定式在围棋棋盘上记录下来相当于建立一棵二叉树。将树用孩子兄弟表示法进行存储,有利于对各种操作的实现。一个二叉树的结点至少保存三种信息:数据元素、左孩子位置、右孩子位置,对应地,链式存储二叉树的结点至少包含三个域:数据域、左、右指针域。   我们用如下结构体来记录棋子的信息。   typedef struct btnode   {float x1,y1;   AnsiString jieshou,dir;   AnsiString colour;   struct btnode *lchild,*rchild;   }bitnode,*bitree;   其中x1,y1为围棋棋子在棋盘中的坐标,jieshou为围棋定式中每一步的解说,dir为建立孩子兄弟表示法时每一个节点的方向,若为l,则为左孩子;若为r,则为右孩子,孩子兄弟表示法中,左为左孩子,右为右兄弟;colour记录的是棋子的颜色。   利用二叉树前序遍历的结果可以非常方便地生成给定的二叉树,具体做法是:将第一个输入的结点作为二叉树的根结点,后继输入的结点序列是二叉树左子树前序遍历的结果,由它们生成二叉树的左子树;再接下来输入的结点序列为二叉树右子树前序遍历的结果,应该由它们生成二叉树的右子树;而由二叉树左子树前序遍历的结果生成二叉树的左子树和由二叉树右子树前序遍历的结果生成二叉树的右子树的过程均与由整棵二叉树的前序遍历结果生成该二叉树的过程完全相同,只是所处理的对象范围不同,于是完全可以使用递归方式加以实现。[5]   建立二叉树可以采用递归或者非递归的方法,在该程序中采用递归的方法,函数名为ins_node,函数的主要代码分析如下:[2]   ins_n

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档