ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创]中国象棋(2.6版)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2006-11-29 16:17 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:娱乐和游戏应用
RACiyqji.rar (166.39 KB, 下载次数: 32606)
[此贴子已经被作者于2007-1-11 13:58:53编辑过]

[原创]中国象棋(2.5版)

[原创]中国象棋(2.5版)

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2006-11-29 16:47 | 显示全部楼层

出手不凡

TA的精华主题

TA的得分主题

发表于 2006-11-29 17:09 | 显示全部楼层

不错,界面很好

因为俺是棋盲,所以不知道你的电脑棋手水平如何

TA的精华主题

TA的得分主题

发表于 2006-11-29 17:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-11-29 18:14 | 显示全部楼层

界面不错,电脑智力很低,没几步就让我羸了.而且还得杀了对方的将电脑才认输.呵呵

TA的精华主题

TA的得分主题

发表于 2006-11-29 19:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

不错。挺好玩的。

但是发现一个问题。我用明将战法,对方的老帅大摇大摆地和我对老将!这时哪门子走法?

晕!这棋还怎么下?

但还是顶一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-30 08:33 | 显示全部楼层

电脑智能实现的原理

1。穷举所有可能的走法

2。对棋局进行评分(注:电脑智能的高低主要靠评分的合理性)。

以下代码就是对棋局评分。

Sub hqZ(ByVal arr1, ByVal fang, z)
    Call 人工智能2(arr1, 1, 0, arr3)
    Call 人工智能2(arr1, -1, 0, arr4)
    Dim a
    z = 0
    For i = 1 To 10
        For ii = 1 To 9
            If arr1(i, ii, 1) = 1 Then
                z = z + arr1(i, ii, 2)
                If arr3(i, ii, 1) > 0 And arr4(i, ii, 1) < 1 Then z = z + 10     '如果是红色棋子,受到了自已的保护,不受黑色棋子危险
                If arr3(i, ii, 1) > 0 And arr4(i, ii, 1) > 0 Then    '如果是红色棋子,受自已的保护,受黑色棋子危险
                    If arr4(i, ii, 1) = 1 And arr1(i, ii, 2) > arr4(i, ii, 2) Then
                        z = z - arr1(i, ii, 2) + arr4(i, ii, 2)
                    ElseIf arr4(i, ii, 1) > 1 Then
                        z = z - arr1(i, ii, 2) * 0.5
                    End If
                End If
                If arr1(i, ii, 2) = 80000 And arr4(i, ii, 1) > 0 Then z = z - 8000    '将受到危险
                If arr3(i, ii, 1) < 1 And arr4(i, ii, 1) > 0 Then z = z - arr1(i, ii, 2)     '如果是红色棋子,不受自已的保护,受黑色棋子危险
                If arr1(i, ii, 2) = 300 And (i = 5 Or i = 6) Then z = z - 50  '相最好不要在最前线
                If arr1(i, ii, 2) = 300 And (ii = 1 Or ii = 9) Then z = z - 100  '相最好不要在两边
                If arr1(i, ii, 2) = 999 And ((ii = 1 And i = 1) Or (ii = 9 And i = 1)) Then z = z - 50     '出车
                If arr1(i, ii, 2) = 999 And (i = 2 Or i = 5 Or i = 6 Or i = 9 Or ii = 4 Or ii = 6) Then z = z + 10    '出车
                If arr1(i, ii, 2) = 100 And i > 5 And arr4(i, ii, 1) < 1 Then z = z + 80     '过河兵
                If arr1(i, ii, 2) = 600 And i = 1 Then z = z - 100     '炮不要走到边上去
                If arr1(i, ii, 2) = 500 And i > 5 Then z = z + 10    '过河马
                If (arr1(i, ii, 2) = 400 Or arr1(i, ii, 2) = 300) And arr3(i, ii, 1) < arr4(i, ii, 1) Then z = z - 400    '保护士相
                If arr1(i, ii, 2) = 80000 Then
                    For iii = i + 1 To 10                                  '将不能对面
                        If arr1(iii, ii, 2) > 0 Then
                            If arr1(iii, ii, 2) = 80000 Then z = z - 80000
                            Exit For
                        End If
                    Next iii
                End If
            End If

            If arr3(i, ii, 2) Like " * 500 * " And arr4(i, ii, 1) < 1 Then z = z + 10     '马有更多的路可走
            If arr4(i, ii, 2) Like " * 500 * " And arr3(i, ii, 2) < 1 Then z = z - 10    '马有更多的路可走

            If arr1(i, ii, 1) = -1 Then
                z = z - arr1(i, ii, 2)
                If arr3(i, ii, 1) > 0 And arr4(i, ii, 1) > 0 Then     '如果是黑色棋子,受自已的保护,受红棋子危险
                    If arr4(i, ii, 1) = 1 And arr1(i, ii, 2) > arr3(i, ii, 2) Then
                        z = z + 80
                    End If
                End If
                If arr3(i, ii, 1) > 0 And arr4(i, ii, 1) < 1 Then        '如果是黑色棋子,不受自已的保护,受红棋子危险
                    z = z + 100
                    If arr1(i, ii, 2) = 1 Then z = z - 80
                End If
                If arr1(i, ii, 2) = 500 And i < 6 Then z = z - 10   '过河马
                If arr1(i, ii, 2) = 100 And i < 6 Then z = z - 200    '过河兵

                If arr1(i, ii, 2) = 600 And i = 1 And arr3(i, ii, 1) < 1 Then   '沉低炮可怕
                    z = z - 400
                    If arr(2, 5, 2) = 400 Then  '沉低炮不要上士
                        z = z - 1000
                    End If
                End If
            End If
        Next ii
    Next i

    If arr1(3, 5, 1) = 1 And arr1(3, 5, 2) = 300 Then z = z + 20   '当中相
    If arr1(1, 5, 1) = 1 And arr1(1, 5, 2) = 80000 Then z = z + 300  '将在中
    If arr1(3, 4, 1) = 1 And arr1(3, 4, 2) = 600 Then z = z + 100  '仕角炮
    If arr1(2, 5, 1) = 1 And arr1(2, 5, 2) = 999 Then z = z - 200   '将上车
    If arr1(2, 5, 1) = 1 And arr1(2, 5, 2) = 500 Then z = z - 200  '将上马
    If (arr4(2, 3, 2) Like 500 And arr3(2, 3, 1) < 1) Or (arr4(2, 7, 2) = 500 And arr3(2, 7, 1) < 1) Then z = z - 400  '不能让对方的马下来
    If arr3(9, 3, 2) Like 500 Or arr3(9, 7, 2) = 500 Then z = z + 100  '自已的马过去
    If arr1(4, 5, 2) = 100 And arr4(4, 5, 1) > 0 And arr3(4, 5, 1) < 1 Then z = z - 300  '保护当头兵
    If arr1(4, 6, 2) = 100 Then z = z - 400    '保护当头兵
    x = 0
      For i = 2 To 10      '当头炮是很可怕的
      If arr1(i, 5, 1) <> 0 Then x = x + 1
        If arr1(i, 5, 2) = 600 And arr1(i, 5, 1) = -1 And x < 4 Then z = z - 500
     Next i
End Sub

[此贴子已经被作者于2006-12-4 23:30:45编辑过]

TA的精华主题

TA的得分主题

发表于 2006-11-30 08:52 | 显示全部楼层
玩不了。一打开我的诺顿就报有毒。不知道是怎么回事?

TA的精华主题

TA的得分主题

发表于 2006-11-30 17:08 | 显示全部楼层

下了你的升级版,回家看整不整得赢它!

打开看了一下,为什么不吧红棋字摆正?差点要倒立着去看它的棋,有点不习惯。

[此贴子已经被作者于2006-11-30 17:13:09编辑过]

TA的精华主题

TA的得分主题

发表于 2006-11-30 17:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

高!好像存在"僵棋"----就是在一定情况下双方都重复下一步棋---红棋将军 ----黑棋保住----红旗离开----黑棋离开-----红棋再将军----黑棋再保住.........

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 21:55 , Processed in 0.042779 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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