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时,也easy很多。题外话,眼下如今围棋的AI多为双重随机-蒙特卡罗算法之类吧。有兴趣读者能够研究下。

    1.走法生成:

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

    2.估值核心:

        对于棋面的推断也相对easy,不须要考虑地域与势等抽象概念,这些抽象的概念连当下计算机科学家都没有找到比較好的解决的方法。

    但这一部分要測试非常难。要微调非常多參数,感知棋力变化。对于未发生提子的叶子结点,推断形势与输赢。

    1.轮到我下,对方存在一个一气的棋窜,则我胜利。

    2.轮到我下。对方不存在一个一气的棋窜,而我有两个一气的棋窜,则我失败。3.轮到我下,敌方不存在一气的棋窜,若我没有1气的窜,对方可有两气棋窜,若有開始考虑,双打吃与征吃的可能。4.同三情况考虑自己,我方仅存在一个一气窜,则考虑是否被征吃。以及双打吃。5.都没有出现,考虑一些其它的额外參数。

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


    写在最后:

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

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

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


    转载请标明出处。谢谢

  • 相关阅读:
    POJ 1681 Painter's Problem(高斯消元法)
    HDU 3530 Subsequence(单调队列)
    HDU 4302 Holedox Eating(优先队列或者线段树)
    POJ 2947 Widget Factory(高斯消元法,解模线性方程组)
    HDU 3635 Dragon Balls(并查集)
    HDU 4301 Divide Chocolate(找规律,DP)
    POJ 1753 Flip Game(高斯消元)
    POJ 3185 The Water Bowls(高斯消元)
    克琳:http://liyu.eu5.org
    WinDbg使用
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7083484.html
Copyright © 2011-2022 走看看