分享

一个围棋控件

 口中玉光军 2017-03-24
1   属性
1.1 只读属性
1.1.1   AuthorDeclare
   类型:String      
   说明:返回作者申明和版本信息
1.1.2   NextWhite
   类型:Boolean      
   说明:返回下一步棋信息(如果下步棋该白棋走为真)
1.1.3   WhiteTiNumber
   类型:integer   
   说明:返回白棋提到的黑棋数量
1.1.4   BlackTiNumber
   类型:integer      
   说明:返回黑棋提掉的白棋数量
1.1.5   GlobeErrMessage
   类型:String      
   说明:返回最后一个错误的解释   
1.1.6   Record_Finger
   类型:integer      
   说明:返回当前棋谱指针(也是当前棋谱显示长度)
1.1.7   Record_LastFinger
   类型:integer      
   说明:返回棋谱的最长纪录(如果没有回退,此数值将与Record_Finger相同)
1.1.8   Record_Long
   类型:integer      
   说明:返回棋谱的长度
   注意:只是棋谱数组的长度!不是已经下了的棋谱长度!其实这个属性没有什么用处,因为你无法手动增加它! 
1.1.9   Record_Hand(ByVal   i   As   Integer)
   类型:byte      
   说明:返回第i步棋谱是黑棋还是白棋
   注意:其实除了让子棋,奇数就是黑棋,偶数就是白棋。参见后面的常数表
1.1.10   Record_X(ByVal   i   As   Integer)
   类型:byte      
   说明:返回第i步棋所在的横坐标(应该是:1-19,写的时间有点长了> _ <!)  
1.1.11   Record_Y(ByVal   i   As   Integer)
   类型:byte      
   说明:返回第i步棋所在的纵坐标(应该是:1-19,写的时间有点长了> _ <!) 
1.1.12   Record_Dead(ByVal   i   As   Integer)
   类型:Boolean      
   说明:返回第i步是的死棋信息(如果此步棋提了对方的棋为真)
1.1.13   Record_Ti(ByVal   i   As   Integer)
   类型:byte      
   说明:返回第i步是的提子信息(如果此步棋提了对方的棋,纪录是提了什么方向的棋。你不必管它的含义!)
   注意:如果你要保存棋谱,请纪录5个Record_(i   as   integer)属性!在读取棋谱时必须使用他们!
1.1.14   ReturnStatus
   类型:byte      
   说明:返回棋盘状态(参见常数表,分别为比赛状态,打谱状态和编辑状态)
   注意:状态将影响到单击鼠标左键会作出的反应
      比赛状态:如果是轮到matchwhite所指的白棋或黑棋时,左键才是走棋
      打谱状态:按照预先装入的棋谱反应,左键只是前进一步
      编辑状态:单击左键纪录一步棋,黑白棋轮流走!

1.2 可设置属性
1.2.1 QiPanBack
      类型:Byte      
      说明:棋盘背景样式
         0:使用纯色作为棋盘背景,纯色由BackGroudColor提供
         一下使用图片,请务必设置BackPictureImage属性
         1:居中
         2:平铺
         3:拉伸
         4:放大
         其他数值报错!
1.2.2 BackPictureImage
   类型:Bitmap      
   说明:背景图片,只有Qipanback为1,2,3,4数值时才有用
1.2.3 ShowNumber
   类型:Boolean      
   说明:是否显示每步棋的手数
1.2.4 ShowUpHand
   类型:boolean      
   说明:是否使用菱形框标示出上一步的位置,默认为True
1.2.5 BackGroudColor
   类型:Color   
   说明:棋盘的背景颜色,只有QiPanBack为0时才有用!  
1.2.6 PenDrawQiPan
   类型:pen      
   说明:画棋盘线的笔,可以设置宽度,颜色和线形……,只要是pen能设置的东西都行。
1.2.7 PenDrawOther
   类型:pen      
   说明:画各种显示线条,就是上一步提示,寻找手数,当前位置的画笔
1.2.8 StarBrush
   类型:SolidBrush      
   说明:画星位的笔刷
1.2.9 WordFont
   类型:font      
   说明:文字字体,包括手数和边框数值
1.2.10 MatchWhite
    类型:boolean      
    说明:点击左键走白棋还是黑棋,true为白棋,只有在比赛状态时才有用
1.2.11 WarningNumber
    类型:integer      
    说明:限制数量,如果回退超过这个数值,再走棋会提问!默认数值为5
1.2.12 WhiteIcon
    类型:icon      
    说明:显示的白棋图标,只能是图标
1.2.13 BlackIcon
    类型:icon      
    说明:显示的白棋图标,只能是图标        

2   接口
2.1 FindShouNumber(ByVal   i   As   Integer)
     返回值:byte
     说明:寻找第i手棋,找到后会在棋盘上用方框显示出来直到点击了鼠标的左键,返回数值见常数表
2.2 TranslateErrCodeToExplain(ByVal   code   As   Byte)  
     返回值:   String
          说明:如名字所说……,返回一个错误代码的解释
2.3 UpDataBack
     返回值:无
          说明:更新棋盘
2.4 BackOneStep
     返回值:boolean
          说明:回退一步,真值成功,假值出现错误,通过GlobeErrMessage属性能得到错误信息,一般是回退到底的错误!
2.5 SetQiPanInit(ByRef   QiPan(,)   As   Byte)
     返回值:boolean
          说明:将QiPan(18,18)数组复制到棋盘中去,这个函数只能在棋谱没有纪录的时候使用,否则回出错,会设置GlobeErrMessage
          注意:如果数组没有19,19个大会报错,超过的部分将忽略!其中数值只能是0,WHITE,BLACK。(参见参数表)
             用于让子棋,在棋开始前在棋盘上摆棋。
2.6 GoStep(ByVal   x   As   Byte,   ByVal   y   As   Byte)
     返回值:boolean
          说明:走一步棋接口,真是成功,假是出错(比如不能立即回填被提一子),会设置GlobeErrMessage
             如果是虚手请输入虚手常数
          注意:x   为横坐标,y为纵坐标,只能是1-19数值,注意,此函数只能在棋盘状态为非打谱状态下才有用!
             如果用在比赛状态,本函数不检查走棋的顺序!
2.7 SetStauts(ByVal   i   As   Byte,   [ByRef   Hand()   As   Byte]   =   Nothing,   [ByRef   ix()   As   Byte]   =   Nothing,   [ByRef   iy()   As   Byte]   =   Nothing,     [ByRef   dead()]   As   Boolean   =   Nothing,   [ByRef   ReTi()]   As   Byte   =   Nothing)
     返回值:boolean
          说明:设置棋盘状态,真是成功,假是出错,会设置GlobeErrMessage
             i为状态常数(参见常数表,如果输入非常数表数值会出错!)
             其他参数只在i设置为DAPU时有用!后续5个数组的长度必须相等并大于0,否则出错!
             这5个参数是棋谱必要信息,与5个Record_(i   as   integer)属性相对应!如果你要保存棋谱,请务必注意!
          注意:此函数会重置棋谱和棋盘!所有信息均将丢失,并且本函数不会发出任何提问!请一定要注意!!!!
             
3 相关常数
3.1 棋谱常数
     Const   XUSHOU   As   Byte   =   21 '虚手
          Const   BLACK   As   Byte   =   111 '黑棋
          Const   WHITE   As   Byte   =   100     '白棋
3.2 状态常数
     Const   MATHING   As   Byte   =   11   '   比赛状态
          Const   DAPU   As   Byte   =   22   '     打谱状态
          Const   WRITEING   As   Byte   =   33   '编辑状态

4 外部事件
    没有增加特殊的外部事件,当单击鼠标时,先进行棋盘操作,在引发OnMouseUp事件!主要的编程接口全在这个事件
    注意,当你处理鼠标事件时,整个棋谱已经完成更新和显示等一切工作或因为错误或限制没有对棋谱进行处理,
    你可以对比单击鼠标前的Record_Finger属性得到棋谱是否改变(也就是是否成果走棋的信息!)
    对比事件返回的按键属性和棋谱状态属性确定是那种事件发生(是走了一步棋,还是回退了一步,还是做了一步虚手,还是前进了一步……)

如果有人下来用,并且找到了bug,请一定要告诉我!谢谢  !

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约