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

If ((LBlock(2) = False And RBlock(2) = True) Or (LBlock(2) = True And RBlock(2) = False)) And (LBlock(1) = False And RBlock(1) = False) And PieceNum(1) = 4 _

    And PieceNum(2) = 4 Then DoGen = FFSL: Exit Function '返回成四与活四得分

    If (LBlock(1) = False And RBlock(1) = False) And (LBlock(2) = False And RBlock(2) = False) And PieceNum(1) = 4 And PieceNum(2) = 3 Then _

    DoGen = FTDL: Exit Function '返回活四活三得分

    If ((LBlock(1) = False And RBlock(1) = True) Or (LBlock(1) = True And RBlock(1) = False)) And ((LBlock(2) = False And RBlock(2) = True) Or (LBlock(2) = True _

And RBlock(2) = False)) And PieceNum(1) = 4 And PieceNum(2) = 4 Then DoGen = FFNL: Exit Function '返回双成四得分

    If (LBlock(1) = False And RBlock(1) = False) And PieceNum(1) = 4 Then DoGen = FL - IIf(EmptyNumE(1) = 0, 0, 5 ^ EmptyNumE(1)): Exit Function '返回单活四或跳成四得分

    If ((LBlock(1) = True And RBlock(1) = False) Or (LBlock(1) = False And RBlock(1) = True)) And PieceNum(1) = 4 And (LBlock(2) = False And RBlock(2) = False) _

    And PieceNum(2) = 3 Then DoGen = FTSL: Exit Function '返回成四活三得分

    If (LBlock(1) = False And RBlock(1) = False) And (LBlock(2) = False And RBlock(2) = False) And PieceNum(1) = 3 And PieceNum(2) = 3 Then _

    DoGen = TTDL: Exit Function '返回双活三得分

    DoGen = ScoreE(1) + ScoreE(2) '其余情况返回两向得分之和

End Function

在局面估值函数的基础之上,利用一个二重循环来扫描整个棋盘空闲位置,并在各位置分别用己方和对方子力估值求出两个权重指数。分别乘以两个权重系数,我们称之为攻防系数。这就为算法执行效果的拓展提供了理论依据。比如,简单地以参数的形式修改权重系数而不修改算法,就可以使电脑具备冒进、稳健、保守等多种截然不同的下棋风格。实践也证明,在估值函数与局面评估函数完全相同的条件下,攻防系数的不同可以产生完全不同的走法。以下是返回当前最重要棋步的函数:

Public Function GetVitalStep(ByRef PieceTar() As Integer, ByRef ScoreTar%, ByVal Flag As Byte) As Integer '返回当前下子方最重要棋步

    Dim i%, j%, t%, r%: Dim FlagX As Byte: FlagX = IIf(Flag = 1, 2, 1)

    For i = 1 To 15 '扫描棋盘看有无己方胜利的位置

        For j = 1 To 15

            If PieceTar(i, j) = 0 Then

                PieceTar(i, j) = Flag

                If JudgeWinner(PieceTar, i, j, Flag) = True Then GetVitalStep = i + (j - 1) * 15: PieceTar(i, j) = 0: ScoreTar = Five: Exit Function

                PieceTar(i, j) = 0

            End If

        Next j

    Next i

    For i = 1 To 15 '看对方有无胜利的位置

        For j = 1 To 15

            If PieceTar(i, j) = 0 Then

                PieceTar(i, j) = FlagX

                If JudgeWinner(PieceTar, i, j, FlagX) = True Then GetVitalStep = i + (j - 1) * 15: PieceTar(i, j) = 0: ScoreTar = Five: Exit Function

                PieceTar(i, j) = 0

            End If

  推荐精品文章

·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