AI围棋学习之路一----棋盘和落子的类构建

       我是一个围棋业余3段的人,学了三年,一直想拥有一个属于自己的AI,目前围棋基础还可以,就是苦于自己的编程实力不够,最近看到了一个非常棒的教程,有兴趣的去找tyler_download看他的文章,代码非常详细具体,适合小白,现将我的学习心得和要点一一陈述出来

要做围棋AI先要把架子打出来,先实现基本围棋游戏再考虑引入神经网络,今天就先完成棋盘和落子的类构建

如果你有一定围棋基础,理解下面的代码就很容易,如果没有,可以先去学习围棋的气、交叉点、胜负判断等知识,我在分析时也会穿插一些围棋基本知识

步骤

   1 棋手类

         分析:围棋有黑棋和白棋,这里的棋手代表黑白两方,属性就是颜色,方法是返回对方的颜色

import enum

#棋手(棋子颜色)
class Player(enum.Enum):
    black=1
    white=2
    #返回对方棋子颜色
    def other(self):
        if self == Player.black:
            return Player.white
        else:
            return Player.black

    2.  棋盘交叉点类

           分析: 围棋的棋子是下在交叉点上的,有9*9=81,13*13=169,19*19=361三种,而一个交叉点有上下左右四个方向的相邻点,而这个相邻点在我们之后算棋子的气(棋子的自由点)以及棋子块相连都有非常重要的用处,因此定义这个类的属性就是该点的行与列,方法就是返回该点的相邻点的集合

from collections import namedtuple

#棋盘交叉点
class Point(namedtuple("Point","row col")):#增加可读性,即可通过point.row,point.col得到行列
    #返回棋盘一个点的四个方向相邻点
    def neighbor(self):
        return[
            Point(self.row,self.col+1),
            Point(self.row,self.col-1),
            Point(self.row+1,self.col),
            Point(self.row-1,self.col)
            ]

 那位博主为了增代码可读性,引入了namedtuple

 3.落子类

     分析:落子的一个属性是所下的交叉点,然后落子前需要判断当前玩家有无pass,如果pass就让另一个玩家下,还要判断当前玩家有无投降,如果投降就不会做下

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值