【涉及知识点】

  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围棋源码,直接拿走相关推荐

  1. 转发:11个web前端开发实战项目案例+源码!拿走就是了

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_43793782/arti ...

  2. php围棋源码,腾讯围棋AI技术 PhoenixGo 正式开源,源码、模型全公开

    5 月 11 日,腾讯微信团队研发的 PhoenixGo 正式开源,这也是国内第一个开源的围棋 AI 项目. PhoenixGo 是腾讯微信翻译团队开发的人工智能围棋程序,旨在学习人工智能前沿技术.从 ...

  3. 全网首发!精选32个最新Python实战项目(附源码),拿走就用!

    Python是目前最好的编程语言之一.由于其可读性和对初学者的友好性,已被广泛使用.那么要想学会并掌握Python,可以实战的练习项目是必不可少的.接下来,我将给大家介绍32个非常实用的Python项 ...

  4. html游戏围棋源码,C++围棋游戏

    [实例简介] 尚未完善的围棋游戏.使用vs2010开发.具有围棋棋盘,棋子界面,已经完成了提子算法.有兴趣的朋友可以与我一起来研究.欢迎大家前来交流 [实例截图] [核心代码] MyFirstMFC ...

  5. 一个VB VB.NET源码的博客网站,不错

    http://www.mndsoft.com/blog/ 非常感谢您光临枕善居.本站是一个免费的基于VB,VB.NET源代码交流的平台,为大家提供优质的专业的源代码,如果您有需要,本站可以帮助在业余时 ...

  6. [VB.NET源码]销售管理系统

    从入门到高手,让你21天成为VB.NET高手的源代码哦,我就不必把代码写出来了,你们自己去下载就可以了--不要忘了加我QQ群,收藏我的博客哦! 下载地址:销售管理系统

  7. [VB.NET源码]1-你好程序

    从入门到高手,让你21天成为VB.NET高手的源代码哦,我就不必把代码写出来了,你们自己去下载就可以了--不要忘了加我QQ群,收藏我的博客哦! 下载地址:1-你好程序 <script type= ...

  8. [VB.NET源码]学习教程(PDF)

    从入门到高手,让你21天成为VB.NET高手的源代码哦,我就不必把代码写出来了,你们自己去下载就可以了--不要忘了加我QQ群,收藏我的博客哦! 下载地址:学习教程(PDF)

  9. 将汉字转换为Unicode编码vb.net源码

    vb.net中,将汉字转换为Unicode编码过程,参数source为需要转换文字字符串,Hex为Boolean类型,表示需要转为十六进制的,还是十进制的编码字符串. ''' <summary& ...

最新文章

  1. url中参数以及callback后面的串
  2. 巧用 TypeScript Literal Types 模拟枚举类型
  3. WPF使用Animation仿WeChat(微信)播放语音消息
  4. C++之第一个程序Hello World,使用IO库输出Hello World
  5. 老板喜欢动脑子工作的人
  6. LeetCode(892)——三维形体的表面积(JavaScript)
  7. linux网络测速qerf,cywapp.net
  8. 雕刻在LINUX内核中的LINUS故事
  9. QLineEdit用正则表达式限制double类型输入,double转为9位小数的字符串
  10. CAPL学习之路-SOME/IP相关函数
  11. 金税开票软件,开票时弹出FRM-000013
  12. 视频教程-6小时JavaScript基础精讲-JavaScript
  13. 【工具推荐】免费的思维导图软件——Blumind
  14. 基于FPGA的图像比例缩放
  15. 最全面的 Fiddler 教程讲解
  16. 最新 EDK2 实验
  17. python按文件后缀进行分类,解放生产力
  18. kubeadm 安装集群 1.16.12
  19. 参考文献中期刊/会议如何缩写
  20. 风控每日一问:互联网金融产品如何利用大数据做风控?

热门文章

  1. 神经网络中的Attention机制 pytorch 代码
  2. android一键发布,Android apk项目如何一键打包并上传到蒲公英
  3. Jenkins slave 节点配置
  4. 怎么打开远程桌面 电脑怎么打开远程桌面
  5. matlab amd gpu,没有N卡?那就用AMD GPU训练深度学习模型
  6. 跟微信官方要了一个福字
  7. ACWing算法基础课-耍杂技的牛
  8. Redis-cli 常用命令与实例
  9. 到了30岁,我才有了深刻的感悟:千万不要一辈子靠技术生存
  10. 【第45题】常用的数学工具类2-三角函数的使用