zoukankan      html  css  js  c++  java
  • 五子棋算法详解——解决方案之一

    这里讲述棋盘大小为10×10的人机对战五子棋实现方法,要看完整代码请看Java做的五子棋

    1.         概述

    玩家每走一步,对于玩家和计算机,都根据获胜表对棋盘各个空棋位进行评分,每个位置的分数与下面这句话有关:该位置所在的每一种获胜组合中已经拥有的棋子数,然后对玩家和计算机产生的分数均衡,以判断计算机是进攻还是防守。

    2.         数据结构

    10×10的数据,用来记录棋盘状态;

    两个获胜表([10][10][192]),也就是获胜组合,因为五个子一线则胜,不在一线上的五个子就不在一个组合中,对于10×10的棋盘获胜的组合有192种,下面将会详细说明,获胜表用来表示棋盘上的每个位置是否在玩家或计算机的获胜组合中;

    一个二维数组([2][192]),记录玩家与计算机在各种获胜组合中填入了多少棋子;

    两个10×10的数组,用来记录玩家与计算机在各个棋盘位置上的分数,分数高的将是计算机下一步的着法。

     

    3.         计算获胜组合

     

    上图是一个10×10的五子棋棋盘,我们可以得出垂直方向上的获胜组合是10×6=60,同理,水平方向的获胜组合也是60,而两个倾斜方向上的获胜组合是(1+2+3+4+5)×2+6=36,即:

    60*2+36*2=192

    4.         评分

    用两个数组存储每个棋位的分数,一个是计算机的,另一个是玩家的,表示该位置对于各方是最佳着法的肯定程度,对一个位置的评分就是:遍历该位置所在的每一种获胜组合,根据这个组合中已经拥有的己方棋子数14分别加不同分数,最后将这些所有的获胜组合所得出的分数相加就是该位置的分数,下图是对于黑方各棋位的评分(其中的1234这几个值要根据实际需要来确定)。

     

    0

    1

    0

    0

    0

    1

    0

    0

    0

    1

    0

    0

    2

    0

    0

    1

    0

    0

    2

    0

    0

    0

    0

    3

    0

    1

    0

    3

    0

    0

    0

    0

    0

    0

    4

    1

    4

    0

    0

    0

    0

    1

    2

    3

    4

    4

    3

    2

    1

    0

    0

    0

    0

    4

    4

    0

    0

    0

    0

    0

    0

    3

    0

    0

    0

    3

    0

    0

    0

    0

    2

    0

    0

    0

    0

    0

    2

    0

    0

    1

    0

    0

    0

    0

    0

    0

    0

    1

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    5.         思路

     

    作者:Rick Carter
    出处:http://pains.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    AS3的内存泄漏与垃圾回收
    Unity序列化和持久化
    首发|创业3年半,做8款App全部扑街;转做公众号5个月,零成本吸粉12万还拿了百万天使轮
    为什么成功的人都不太要脸?
    浅谈2040年的职业环境应该是怎么样的?
    2040年的职业环境应该是怎么样的?
    潮汕牛肉火锅,美味在你身边
    要闻:2016胡润百富榜昨天发布 宝能姚振华从炸油条到千亿身家“大黑马”
    海报设计灵感:简约独特的图形图案排版 by Quim Marin
    摄影的基础美学详解
  • 原文地址:https://www.cnblogs.com/pains/p/939673.html
Copyright © 2011-2022 走看看