vb围棋源码,直接拿走

Posted 诗一样的代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb围棋源码,直接拿走相关的知识,希望对你有一定的参考价值。

【涉及知识点】

  1. 控件数组;2. 顺序文件读写;3. 鼠标事件;4. 定时器控件。
    【题目介绍】
    围棋棋盘由19条纵线和19条横线正交形成网格,共有19×19=361个网格点。两位棋手各持黑色和白色圆形棋子轮流放到未被棋子占用的网格点上进行对弈。
    本题目完成一个模拟棋盘,并可向棋盘上放置棋子(落子)、从棋盘上去掉子(提子)。本程序可供两个人对弈,也可由一个人同时执黑色和白色棋子,但是不能进行人和计算机的对战。
    【功能要求】
  2. 运行程序,显示图7.1所示的窗口,窗口主体部分是棋盘,棋盘上方的文本框中显示当前棋盘上已有的棋子数,棋盘下方是几个功能按钮。
  3. 使用鼠标单击网格点,放置一粒黑子;右击网格点放置一粒白子。按住Ctrl键在棋盘上已有的黑子上单击会去掉这粒黑子;按住Ctrl键在棋盘上已有的白子上右击会去掉这粒白子。
  4. 单击“撤消最后一步”按钮,自动去掉最后一个放置的棋子,不论黑白且只能撤消一步(继续单击无用)。单击“移除黑子”、“移除白子”按钮分别清除所有的黑子和白子。
  5. 无论是落子、提子还是移除棋子,窗口顶部的文本框中总能实时地显示出棋盘上当前的黑子、白子数和总棋子数。
  6. 如果在操作时,单击到棋盘外边,程序会将棋子放置到离鼠标最近的边框网格点上。如果落子时所单击的网格点上已有子,或提子时所单击的网格点上没有子,则会显示图7.2所示的提示消息框。

如果棋盘上已放满棋子,则显示Game Over消息框。
6. 单击“退出”按钮,程序关闭,自动将退出时棋盘上的棋局保存,下次启动程序时,显示的不是空棋盘,而是前一次退出时的棋局。
每次启动程序,窗口上先显示一屏黑子,再显示一屏白子,之后才显示上次退出时的棋局,这样会增加些趣味性。
【难点与提示】

  1. 棋盘上的线共有38条,可以在设计时使用直线控件“画”好,即在窗体上放置38个直线控件。但是调整、对齐的工作量大,会很繁琐。因此,使用控件数组是个好方法。
    如图7.3所示,在设计时,向窗体上放置一个直线Line控件,将其名称改为linH,其Index属性设置为0。这时,此控件成为linH控件数组中的第一个控件元素。在窗体的Load事件过程中,按计算好的位置和间距,使用循环语句加载其他18条水平线。
    纵向网格线可以使用另一个直线控件数组linV,采用相同的方法布置。
    棋盘网格布置好之后在程序运行过程中是不需要变化的,所以窗体的Load事件过程加载一次即可。
    2.实现棋子的功能,肯定要用到控件数组,可用圆形Shape形状控件实现。下棋过程中,棋子是会增减的,数目不定,有两种方法实现这一点。
    第一种办法是:在程序刚启动时加载361个控件数组元素,在程序运行过程中通过设置其可见性(VisibIe属性)来显示需要的棋子,颜色可以通过FillColor属性设置。第二种办法是运行过程中动态加载或卸载控件数组元素,显示几个棋子就有几个控件数组元素。
    因为在棋盘上,棋子最多361枚,不会占用太多的系统资源,为了简化编程,可采用第一种方法。
  2. 棋盘是一个二维网格,为了记录棋盘上棋子的情况,可定义一个二维数组Board(0 To 18,0 To 18),某一个具体元素Board(i,j)的值0、1和2分别代表该网格点上无子、有黑子、有白子这三种情况。

  1. 因为控件数组只能是一维数组,必须建立每个棋子与网格点的对应关系。如果棋子控件数组为shpChess(0 To 360),则某一具体格子shpChess(n)和棋盘网格点Board(i,j)之间的关系是:

n=i+j*19
j=n\\19;
j=n Mod 19
其中,i是行号,j是列号。
在窗体的UnLoad事件过程中可将Board数组的元素值依次写到文件中,在窗体的Load事件过程,将其读入可恢复棋局。
5. 用户操作棋子的功能是通过编写窗体的MouseDown事件实现的。根据事件过程的Shift参数是O还是2,可判断用户是否按下Ctrl键;根据Button参数是1还是2,可判断用户单击的是鼠标的左键还是右键。通过X,Y参数(即鼠标单击位置坐标),可折算出鼠标单击点离哪个棋盘格子(i,j)最近。
6. 本程序使用了定时器控件Timer来实现程序启动时黑白棋子闪烁的效果。窗体的Load事件过程中全部显示为黑子,第一次调用Timer事件过程时全部显示为白子,第二次调用Timer事件过程时显示真实的棋局,同时把定时器控件关闭。

源码领取,公众号:诗一样的代码

以上是关于vb围棋源码,直接拿走的主要内容,如果未能解决你的问题,请参考以下文章

Python案例:围棋的状态数

hdu3368 dfs 下棋

4572: [Scoi2016]围棋 轮廓线DP KMP

TopCoder12808 「SRM594Medium」FoxAndGo3 二分图最大独立集

设计模式-享元模式

再战设计模式之享元模式