精华内容
下载资源
问答
  • 今天,我们就共同来学习如何用VB编程开发五子棋游戏。程序界面如下图准备工作首先添加完成功能而必须用到的控件,然后分析逻辑,写代码实现。我们用到了菜单编辑器、标签、棋盘表格我们使用图形方法来绘制完成。生成...

    五子棋游戏开发

    古语有云,棋如人生。伴随着悠扬婉转的旋律,两人在棋盘上对弈,不断思考,运筹帷幄,即增长了智慧、修炼了身心,也陶冶了情操。

    今天,我们就共同来学习如何用VB编程开发五子棋游戏。

    程序界面如下图

    4cfe02ad6dc3b9f7724d2301e6b06c93.png

    准备工作

    首先添加完成功能而必须用到的控件,然后分析逻辑,写代码实现。

    我们用到了菜单编辑器、标签、棋盘表格我们使用图形方法来绘制完成。

    生成棋盘表格

    Private Sub Form_Paint() '以(10,10)为左上角坐标画一个16*16,每格边长为20像素的棋盘Cls         '每次开始时清除上次内容Dim i As IntegerScaleMode = 3   '设定画布单位为像素For i = 10 To 330 Step 20    Me.Line (10, i)-(330, i)    Me.Line (i, 10)-(i, 330)NextEnd Sub

    菜单编辑器使用快捷键Ctrl+E,同时按即可弹出。根据功能需要,添加相应的菜单标题、名称,然后点击确定即可。

    18614ac85662afad6c9976b970db193c.png

    五子棋游戏实现完整代码

    1

    实现代码

    Option Explicit

    Dim blackturn As Boolean    '是否轮到黑方下子

    Dim whiteturn As Boolean    '是否轮到黑方下子

    Dim qipan(0 To 15, 0 To 15) As Integer '用二维数组表示棋盘

    Dim inti As Integer     '数组元素

    Dim intj As Integer

    Dim boolF As Boolean     '表示棋局状态:进行/结束

    Private Sub begin_Click() '重新开始

    Me.Cls '清除窗口

    For inti = 0 To 15

        For intj = 0 To 15

            qipan(inti, intj) = 0 '数组清零

        Next

    Next

    Form_Load '重画棋盘

    End Sub

    Private Sub exit_Click() '退出

    Unload Me

    Set Form1 = Nothing

    End Sub

    Private Sub Form_Load()

    Form_Paint '画棋盘

    blackturn = True    '黑方先下

    boolF = True   '开始

    Label1.Caption = "黑方先下"

    End Sub

    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) '下子

    Dim intx As Integer  '落子横向位置

    Dim inty As Integer  '落子竖向位置

    If boolF = False Then '确定棋局是否在进行中,否,跳出

        Label1.Caption = "结束"

        Exit Sub

    End If

    '确定落子的确切位置

    '如果鼠标点击位置不在棋盘中,则跳出

    If x < 10 Or x > 310 Or y < 10 Or y > 310 Then

        Exit Sub

    End If

    '如果鼠标点击位置在棋盘中,则转化为相应棋盘落子点的坐标

    If (x - 10) Mod 20 < 10 Then

       intx = x - (x - 10) Mod 20

    Else

       intx = x + 20 - (x - 10) Mod 20

    End If

    If (y - 10) Mod 20 < 10 Then

       inty = y - (y - 10) Mod 20

    Else

       inty = y + 20 - (y - 10) Mod 20

    End If

    '把坐标转换成数组中的相应元素

    inti = (intx - 10) / 20

    intj = (inty - 10) / 20

    '如果该数组元素不为零,即表示棋盘中相应点已有棋子,则跳出

    If qipan(inti, intj) <> 0 Then

        Exit Sub

    End If

    '画子(圆)

    If blackturn = True Then

        '黑色

        Me.FillColor = RGB(0, 0, 0)

        qipan(inti, intj) = 1   '黑子赋1

        Label1.Caption = "白方"

    Else

        '白色

        Me.FillColor = RGB(255, 255, 255)

        qipan(inti, intj) = 2   '白子赋2

        Label1.Caption = "黑方"

    End If

    Me.FillStyle = 0   '不可缺

    Me.Circle (intx, inty), 8

    '判断是否有五子连线

    Call IfFiveLine

    '轮流

    blackturn = Not blackturn  '取反

    End Sub

    Private Sub IfFiveLine()   '判断是否有五子连线

    Dim strwho As String        '下子方名称

    If qipan(inti, intj) = 1 Then   '表示黑方下的子

        strwho = "黑方"

    Else

        strwho = "白方"

    End If

    '分别判断横竖,对角线是否有五子,此段代码比较复杂,可能那以理解,但其执行效率极高

    '非常适合与棋盘格子很多的情况

    If samelinenums(1, 0) >= 5 Or samelinenums(0, 1) >= 5 Or samelinenums(1, 1) >= 5 Or samelinenums(-1, 1) >= 5 Then

        MsgBox strwho & "胜!"

        boolF = False  '棋局结束

    End If

    End Sub

    Function samelinenums(changei As Integer, changej As Integer)   '判断同一直线上的棋子数

    Dim i As Integer

    Dim j As Integer

    Dim num As Integer  '同一线上相同颜色棋子数

    '计算落子一边同颜色的棋子数

    i = inti: j = intj

    Do

        If qipan(i, j) <> qipan(inti, intj) Then

            num = max(Abs(inti - i), Abs(intj - j))

            Exit Do

        End If

        i = i + changei: j = j + changej

    Loop Until i < 0 Or i > 15 Or j < 0 Or j > 15

    '计算落子另一边同颜色的棋子数

    i = inti: j = intj

    Do

        If qipan(i, j) <> qipan(inti, intj) Then

            num = num - 1 + max(Abs(inti - i), Abs(intj - j))

            Exit Do

        End If

        i = i - changei: j = j - changej

    Loop Until i < 0 Or i > 15 Or j < 0 Or j > 15

    'MsgBox num

    samelinenums = num

    End Function

    '求较大值

    Function max(inta As Integer, intb As Integer)

        max = inta

        If max < intb Then max = intb

    End Function

    Private Sub Form_Paint() '以(10,10)为左上角坐标画一个16*16,每格边长为20象素的棋盘

    Cls         '清除

    Dim i As Integer

    ScaleMode = 3   '设定窗体画布的单位为象素

    For i = 10 To 330 Step 20

        Me.Line (10, i)-(330, i)

        Me.Line (i, 10)-(i, 330)

    Next

    End Sub

    97795c5eb806c8991a292bc6b7015cf6.gif

    至此,五子棋游戏开发完成。主要是逻辑要明确、思路要清晰。同时要对可能出现的各种问题进行预判,这样就可以使得我们的游戏运行状态良好,获得好的体验。

    由于游戏开发属于VB编程的综合应用内容,代码和逻辑相对复杂,如果你有什么不懂的地方或者要游戏的源文件,可以直接添加老师微信号。

    58ae7950971d51ccea0a43942f276ad6.png更多VB游戏●VB编程开发的围棋游戏!●俄罗斯方块游戏如何用VB编程来实现?●VB编程制作贪吃蛇游戏!VB编程开发--坦克大战游戏的开发

    学习VB中有问题或者需要VB视频教程资料可添加老师微信号:vbyjk521 ,学习问题在线答疑。

    7fca12392e83cb8047d213ab0eab2498.png



    aaf0a966e352c9329df2e1866ccfb570.gif71ef540f8c1833d0db6eccee1b24557b.png

    长按上图,关注跟我学VB公众平台

    展开全文
  • 动态加载控件数组 支持双键合击展开及动画提示. 一个数组来放程序用到的图片.在整个程序运行时只占一份内存空间 程序逻辑: 随机生成一张布雷图(保证每个九宫格雷数小于5) 采用一个数组来描绘整个程序的状态,...
  • vb6可以做标准DLL方法很简单,利用了一个微软未公开的方法。不需要LINK工具。牛人还可以把DLL加上多线程等功能,再加上VB头初始化,VB6标准DLL就...我后来还是了ActiveDLL的基本功能,这样Delphi可以自动生成一些代码
  • VB课程设计俄罗斯方块

    热门讨论 2011-02-25 10:46:55
    利用Select将方块的7中造型列出,比如长条型的设计,在欲览区中分别有3.4.5.6和5.15.25.35四个方块构成两中形态,用数组为: m(0) = 3: m(1) = 4: m(2) = 5: m(3) = 6: situation2 = 0 m(0) = 5: m(1) = 15: m(2) =...
  • 主要的数据库存取对象中也仅有Database、Dynaset对象可通过数据控件的属 性提供,其它的重要对象如TableDef、Field、Index、QueryDef、Snapshot、Table等均不能在VB的标准版中生成,所以使用数据存取对象变量的方法...
  • 算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何Java对象...
  • 实例060 利用控件数组设置控件状态 实例061 如何声明控件变量数组 3.4 指针地址获取 实例062 如何获取对象实例私有域的地址 实例063 获取字符串第一个字的地址 实例064 获取变量的地址 实例065 获取数组的...
  • 实例060 利用控件数组设置控件状态 实例061 如何声明控件变量数组 3.4 指针地址获取 实例062 如何获取对象实例私有域的地址 实例063 获取字符串第一个字的地址 实例064 获取变量的地址 实例065 获取数组的...
  • 1.2.9 使用时生成 20 1.2.10 IntelliSense建议模式 20 1.3 Visual Studio 2010的运行环境及安装 20 1.3.1 安装Visual Studio 2010 21 1.3.2 选择默认环境设置 22 1.4 认识Visual Studio 2010集成开发环境 23 ...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何Java对象序列化保存私钥...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何Java对象序列化保存私钥...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何Java对象序列化保存私钥...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何Java对象序列化保存私钥...
  • 算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何Java对象...
  • 算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何Java对象...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何Java对象序列化保存私钥...
  • 11.4 从模型中生成数据库 457 11.5 小结 460 第12章 使用sql server 461 12.1 sql server compact 462 12.1.1 连接sql server compactedition数据库 463 12.1.2 同步数据 466 12.2 sql server内置的xml功能 ...
  • 11.4 从模型中生成数据库 457 11.5 小结 460 第12章 使用sql server 461 12.1 sql server compact 462 12.1.1 连接sql server compactedition数据库 463 12.1.2 同步数据 466 12.2 sql server内置的xml...
  • 11.4 从模型中生成数据库 457 11.5 小结 460 第12章 使用sql server 461 12.1 sql server compact 462 12.1.1 连接sql server compactedition数据库 463 12.1.2 同步数据 466 12.2 sql server内置的xml功能 ...
  • 11.4 从模型中生成数据库 457 11.5 小结 460 第12章 使用sql server 461 12.1 sql server compact 462 12.1.1 连接sql server compactedition数据库 463 12.1.2 同步数据 466 12.2 sql server内置的xml功能 ...
  • 11.4 从模型中生成数据库 457 11.5 小结 460 第12章 使用sql server 461 12.1 sql server compact 462 12.1.1 连接sql server compactedition数据库 463 12.1.2 同步数据 466 12.2 sql server内置...
  • 第18章 VC、VB(MSCOMM控件)与单片机通信实现温度显示 18.1 VC MSCOMM控件与单片机通信实现温度显示 18.2 VB MSCOMM控件与单片机通信实现温度显示 第5篇 拓展篇 第19章 使用Protell 99绘制电路图全过程 19.1 绘制...
  • 实例192 用代码设置DataGrid控件的列标头 350 实例193 快速将DataGrid控件中的数据显示在 文本框中 351 实例194 在DataGrid控件中实现下拉列表框 353 实例195 使用代码格式化DataGrid控件中的 数据 354 实例...
  • 实例192 用代码设置DataGrid控件的列标头 350 实例193 快速将DataGrid控件中的数据显示在 文本框中 351 实例194 在DataGrid控件中实现下拉列表框 353 实例195 使用代码格式化DataGrid控件中的 数据 354 实例...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...
  • C#微软培训资料

    2014-01-22 14:10:17
    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...
  • 打冰雹游戏源程序

    2013-06-16 00:07:04
    本次课程设计利用《软件设计基础-VB》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。 要求: 1、对系统进行功能需求分析 2...
  • 第16章介绍了使用VB开发AutoCAD的一些知识(将VBA代码转换到VB中,VB窗体和AutoCAD的焦点切换,使用ActiveXDLL封装带有窗体的VB程序)、搜索某个文件夹中所有的文件和VBAIDE的编程,利用这些知识,完全有可能开发出...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

vb用代码生成控件数组