上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
五子棋源代码
作者:未知 申领版权
2010年11月14日 共有 1193 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

    
    '简介:此五子棋程序有别于其他的五子棋程序,采用的是窗口画线 画圆技术,显示速度
    '极快,占用系统资源极少,而且程序代码也很短。此五子棋程序仅是双人对战,没有人机
    '对战功能。不过如果大家对五子棋方面比较有研究的话,是很容易编写出这个功能的。相信
    '大家在学了这个例程后,都能编写出自己独特的五子棋程序!!
    
    '具体程序思想:
    '窗口画线作为棋盘,画圆作为棋子,一个二维数组用来存储棋盘上落子的情况
    
    Option Explicit
    Dim blackturn As Boolean '轮到黑方下子
    Dim whiteturn As Boolean '轮到白方下子
    Dim table(0 To 15, 0 To 15) As Integer '用此二维数组表示棋盘
    Dim inti As Integer '数组元素……
    Dim intj As Integer
    Dim boolstatus As Boolean '表示棋局状态:进行/结束
    
    Private Sub cmdclose_Click() '关闭窗口
    Unload Me
    Set frmmain = Nothing
    End Sub
    
    Private Sub cmdrestart_Click() '重新开始
    '窗口清除
    Me.Cls
    
    '数组清零
    For inti = 0 To 15
    For intj = 0 To 15
    table(inti, intj) = 0
    Next
    Next
    
    '重画棋盘
    Form_Load
    End Sub
    
    Private Sub Form_Load()
    '画棋盘
    Form_Paint
    blackturn = True '黑方先下
    boolstatus = 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 boolstatus = 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 table(inti, intj) <> 0 Then
    Exit Sub
    End If
    
    '画子(圆)
    If blackturn = True Then
    '黑色
    Me.FillColor = RGB(0, 0, 0)
    table(inti, intj) = 1 '黑子赋1
    Label1.Caption = "白方"
    Else
    '白色
    Me.FillColor = RGB(255, 255, 255)
    table(inti, intj) = 2 '白子赋2
    Label1.Caption = "黑方"
    End If
    Me.FillStyle = 0 '不可缺
    Me.Circle (intx, inty), 8
    
    '判断是否有五子连线
    Call judgeman
    
    '轮流
    blackturn = Not blackturn '取反
    
    
    End Sub
    Private Sub judgeman() '判断是否有五子连线
    
    Dim strwho As String '下子方名称
    
    If table(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 & "胜!"
    boolstatus = 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 table(i, j) <> table(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 table(i, j) <> table(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 
    

    

 

相关新闻

您可能对这些感兴趣  

《VB程序设计基础》选择题
设计模式之Iterator
设计模式之Visitor
设计模式之Interpreter(解释器)
设计模式之Mediator(中介者)
设计模式之Strategy(策略)
设计模式之State
设计模式之Command
设计模式之Chain of Responsibility(职责链)
设计模式之Observer

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》