你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 图形图象处理与游戏编程
五子棋人工智能权重估值算法(四)
 

在单线棋形判断函数基础之上的玩家胜负判断函数:

Public Function JudgeWinner(ByRef Piece() As Integer, ByVal XInt%, ByVal YInt%, ByVal Flag As Byte) As Boolean '棋局胜负判断函数

    X = XInt: Y = YInt

    If JudgeNum(Piece, 1, 0, Flag) >= 5 Or JudgeNum(Piece, 1, 1, Flag) >= 5 Or JudgeNum(Piece, 0, 1, Flag) >= 5 Or JudgeNum(Piece, -1, 1, Flag) >= 5 Then _

    JudgeWinner = True: Exit Function '判断标记为Flag的玩家是否已胜利

    JudgeWinner = False

End Function

本程序为了实现动态判断是否有棋可悔,悔棋存储数组逻辑实质为堆栈结构;VB中未提供现成的Stack类,需要以下函数来完成对数组栈顶的搜索工作。

Public Function SearchNode(ByRef PieceRec() As Integer) As Integer

'寻找棋步记录数组中的最大定义值

    Dim i%

    For i = 225 To 1 Step -1

        If PieceRec(i) <> 0 Then Exit For

    Next i

    SearchNode = i

End Function

Public Function GetNode(ByRef PieceTar() As Integer, ByRef XTar%, ByRef YTar%, ByVal Xt%, ByVal Yt%, ByVal XInt%, ByVal YInt%, ByVal Flag As Byte)

'本函数用来返回一条直线上的结点,承载变量为XTarYTarXIntYInt为方向判断变量;注:本函数的待测坐标若为非空值则返回待测点坐标

    Dim i%, j%

    i = Xt: j = Yt

    Do

        i = i + XInt: j = j + YInt

        If PieceTar(i, j) <> Flag Then Exit Do

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

    XTar = i - XInt: YTar = j - YInt

End Function

为了判断玩家的获胜情况,需要一个执行效率较高的函数来判断单线棋形最大棋子数。以下函数实现了上述功能。第二和第三参数两两决定了四种棋盘方向。

Public Function JudgeNum(ByRef Piece() As Integer, ByVal XFluctuate%, ByVal YFluctuate%, ByVal Flag As Byte) As Integer

'判断最多有多少棋子共线(连续),这是执行效率较高的一种算法

    Dim i%, j%, Value%: i = X: j = Y: Value = 0

    Do

        If Piece(i, j) <> Piece(X, Y) Then Exit Do

        i = i + XFluctuate: j = j + YFluctuate '分别在两个方向上加上改变量,下同

        Value = Value + 1

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

    i = X: j = Y

    Do

        If Piece(i, j) <> Piece(X, Y) Then Exit Do

        i = i - XFluctuate: j = j - YFluctuate

        Value = Value + 1

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

    JudgeNum = Value - 1 '减去落子点本身所代表的重复计算过一次的1

End Function

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089