zoukankan      html  css  js  c++  java
  • 人机博弈,吃子棋游戏(一)总序

    (1)什么是吃子棋?

         吃子棋,是小孩子学围棋的入门棋,其规则部分取自于围棋,但比围棋简单很多。

    (2)吃子棋的行棋规则?

        1.吃子棋,在行棋时,若一方棋子没有被打吃,则其必须落子在能够紧对方棋子气的位置。

        2.吃子棋,当一方棋子处于被打吃的状态,则可以逃命,而不用紧对方棋子的气。

        3.吃子棋,当一方棋子被吃提,则输赢即分,吃子方胜。

        4.吃子棋,一般有两种赢棋方式,双打吃和征吃。

        5.吃子棋,起手棋必须位于天元。

     (3)应用设计思路

       设计此应用的总体思路如下:

       DATA:

       1.棋盘表示

       2.棋子表示

       3.计算棋子棋的辅助数据

       AI:

       1:走法产生(依据行棋规则,产生走法)

       2:估值核心(暂时的思路是对双方一气,两气棋窜进行分析统计,并对双打吃与征吃进行特别处理)

       3:优秀走法搜索引擎(暂时仅使用极窄窗口搜索,一种优化过的alpha-beta搜索)

       UI:

       cocos2d-x 3.2

       绘制棋盘,棋子,开始界面,背景等。

    (4)吃子棋AI

    鉴于吃子棋的规则,在做AI时,也容易许多。题外话,目前现在围棋的AI多为双重随机-蒙特卡罗算法之类吧,有兴趣读者可以研究下。

    1.走法生成:

       走法的生成会相对容易很多,因为吃子棋大多数情况下,每一步都要紧对方的气,而少数情况只能长气逃命,因此前中期合理走法很少,而游戏很少发展至后期。

    2.估值核心:

        对于棋面的判断也相对容易,不需要考虑地域与势等抽象概念,这些抽象的概念连当下计算机科学家都没有找到比较好的解决办法。但这一部分要测试非常难,要微 调很多参数,感知棋力变化。对于未发生提子的叶子结点,判断形势与输赢。1.轮到我下,对方存在一个一气的棋窜,则我胜利。2.轮到我下,对方不存在一个 一气的棋窜,而我有两个一气的棋窜,则我失败。3.轮到我下,敌方不存在一气的棋窜,若我没有1气的窜,对方可有两气棋窜,若有开始考虑,双打吃与征吃的 可能。4.同三情况考虑自己,我方仅存在一个一气窜,则考虑是否被征吃,以及双打吃。5.都没有出现,考虑一些其他的额外参数。

    3.搜索引擎:PVS,如果有性能需求考虑使用置换表。


    写在最后(这是一个系列文章,此写在最后仅针对本篇文章):

    我曾兼职围棋入门班的助教,深知陪着4,5岁小孩子下围棋是一件很头大的事,因为他们下棋时经常会哭鼻子闹脾气刷淘气。孩子们刚入门时下得是吃子棋,下课回家都是家长陪着下,同样无论输赢都是一件头大的事,但是家长们都说孩子和电脑对战不会哭鼻子闹脾气耍淘气。

    于是,我上网搜索有没有吃子棋对战软件,使家长脱离苦海,也使孩子能够专心下棋而不是哭鼻子闹脾气耍淘气,但未找到,可能是需求过少的缘故,一般孩子们下一周的吃子棋就可以下真正的围棋了。

    目前,本人正在用业余时间,研发此游戏。欢迎和广大围棋爱好者,吃子棋爱好者多多交流。



  • 相关阅读:
    ElasticSearch大数据分布式弹性搜索引擎使用—从0到1
    使用Fiddler搭建手机调试环境(我做得项目是调试微信的公众号)
    Ajax的三种实现及JSON解析
    jquery ajax调用返回json格式数据处理
    jsp页面格式化数字或时间
    java组装json和提取一个json的例子
    span的onclick事件
    Android Studio创建库项目及引用
    xmlns:android="http://schemas.android.com/apk/res/android的作用是
    Android中attrs.xml文件的使用详解
  • 原文地址:https://www.cnblogs.com/tangzhenqiang/p/4015166.html
Copyright © 2011-2022 走看看