ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: onkey

EXCEL版象棋小巫师v2.0(人机对弈)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2019-8-9 17:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:娱乐和游戏应用
VBA万岁 发表于 2019-8-9 17:48
尝试着用以下代码增加一个悔棋功能,棋盘倒是恢复到了前步的棋盘,可走法有点乱了,不知有哪位高人指点一二 ...

附件:
象棋.zip (890.46 KB, 下载次数: 36)

TA的精华主题

TA的得分主题

发表于 2019-8-9 17:56 | 显示全部楼层

原XQWLight模块中的以下两个过程代码增加为:
    Public Function AddMove(ByVal mv As Long) As Boolean
        Dim i As Long '后加
        For i = 1 To 256
            arr0(i) = arr(i)
        Next i
        For i = 1 To 17
            arr2(i) = arr22(i)
            arr3(i) = arr33(i)
            arr4(i) = arr44(i)
            arr5(i) = arr55(i)
        Next i '以上两个For循环为后加,以获取每步人手移前的棋盘数据,该数据实际上为前一步(回合)电脑回应后的数据
        v = vv '后加
        
        Dim sqSrc As Long, sqDst As Long
        If Search_pos.LegalMove(mv) Then
            sqSrc = SRC(mv)
            sqDst = DST(mv)
            If Search_pos.MakeMove(mv) Then
                PlaySound (IIF_STR(Search_pos.InCheck, "CHECK", IIF_STR(Search_pos.Captured, "CAPTURE", "MOVE")))
                If Search_pos.Captured Then
                    Search_pos.SetIrrev
                End If
                App_sqSelected = 0
                App_mvLast = mv
                Application.ScreenUpdating = False
                App_frm.DrawSquare sqSrc, DRAW_SELECTED
                App_frm.DrawSquare sqDst, DRAW_SELECTED
                Application.ScreenUpdating = True
                AddMove = True
                Exit Function
            Else
                PlaySound ("ILLEGAL")
            End If
        End If
        AddMove = False
    End Function
......

    Public Function ResponseMove() As Boolean
        'If HuiQiYiShou = True Then HuiQiYiShou = False: Exit Function
        Dim sqSrc As Long, sqDst As Long, szWavFile As String
        If GetResult() Then
            ResponseMove = False
            Exit Function
        End If
        sqSrc = SRC(App_mvLast)
        sqDst = DST(App_mvLast)
        With App_frm.Pictures("imgThinking")
            .Left = App_frm.PlotArea.InsideLeft + (App_frm.PlotArea.InsideWidth - .Width) / 2 'LEFT_MARGIN + IIF_INT(FILE_X(sqDst) < 8 Xor App_bFlipped, 112, 0)
            .Top = App_frm.PlotArea.InsideTop + (App_frm.PlotArea.InsideHeight - .Height) / 2 'TOP_MARGIN + IIF_INT(RANK_Y(sqDst) < 8 Xor App_bFlipped, 128, 0)
            .Visible = True
        End With
        App_frm.Refresh
        SearchMain (CLng(4 ^ App_nLevel))
        App_frm.Pictures("imgThinking").Visible = False
        Application.ScreenUpdating = False
        If App_mvLast > 0 Then
            App_frm.DrawSquare (sqSrc)
            App_frm.DrawSquare (sqDst)
        End If
        Search_pos.MakeMove (Search_mvResult)
        szWavFile = IIF_STR(Search_pos.InCheck, "CHECK2", IIF_STR(Search_pos.Captured, "CAPTURE2", "MOVE2"))
        If Search_pos.Captured Then
            Search_pos.SetIrrev
        End If
        App_mvLast = Search_mvResult
        App_frm.DrawSquare SRC(App_mvLast), DRAW_SELECTED
        App_frm.DrawSquare DST(App_mvLast), DRAW_SELECTED
        Application.ScreenUpdating = True
        If GetResult(szWavFile) Then
            ResponseMove = False
            Exit Function
        End If
        ResponseMove = True
        
        Dim i As Long '后加
        For i = 1 To 256
            arr(i) = Sheet1.Range("B" & i).Value
        Next i
        For i = 1 To 17
            arr22(i) = Sheet1.Range("Q" & i).Value
            arr33(i) = Sheet1.Range("R" & i).Value
            arr44(i) = Sheet1.Range("U" & i).Value
            arr55(i) = Sheet1.Range("V" & i).Value
        Next i '以上两个For循环为后加,以获取每步电脑回应后的棋盘数据,该数据实际上为前一步(回合)人手移前的数据
        vv = ThisWorkbook.Worksheets("Data").Names("选中").RefersToRange.Value '后加
    End Function

TA的精华主题

TA的得分主题

发表于 2024-2-21 16:12 | 显示全部楼层
dwZobristLock        mv        vl
203040        -31307        6
509427        -31581        1
509427        -18490        2
712636        22329        2
712636        -27564        1
712636        -26022        13
1281937        -30568        2
1291523        -17741        1
1435796        -15165        2
1452147        -14666        1
1685411        -22070        25
1685411        -21558        1
1710336        -15180        1
1712557        30858        1
1755446        29539        1
1800106        -19274        2
2168635        30792        1
2290468        18232        1
2290468        -31692        6
2290468        -19404        1
2414557        14440        1
这是部分开局库中的数据。这些数字表示什么?

TA的精华主题

TA的得分主题

发表于 2024-3-28 19:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢楼主分享
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 18:38 , Processed in 0.027239 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表