当前位置:   article > 正文

Python实现黑白棋人机对弈_黑白棋人机网页版

黑白棋人机网页版

Python实现黑白棋人机对弈


简书:Python实现黑白棋人机对弈https://www.jianshu.com/p/37191dffbe07

  • 规则
    黑白棋的每颗棋子由黑白两色组成,一面白,一面黑。每次落子,把本方颜色的棋子放在棋盘的空格上,若在横、竖、斜八个方向的任一方向上有本方棋子,则被夹在中间的对手棋子全部翻转为本方棋子颜色;并且,仅在可以翻转棋子的地方才能落子。如果一方至少有一步合法棋步可下,他就必须落子,不得弃权。棋盘已满或双方都没有棋子可下时棋局结束,以棋子数目来计算胜负,棋子多的一方获胜。在棋盘还没有下满时,如果一方的棋子已经被对方吃光,则棋局也结束,将对手棋子吃光的一方获胜。
    两位玩家轮流下棋,直到一方没有符合规则的落子位置,在这种情况下,剩下的一方继续下棋,直到对手有了可以落子的位置。此时,恢复两者轮流下棋的顺序。如果一方落子在非法位置,则视为放弃本次对弈,对方获胜。游戏结束的条件:1)整个棋盘满了;2)一方的棋子已经被对方吃光;3)两名玩家都没有可以落子的棋盘格;4)一方落子在非法位置。前3 种情况以棋子数目来计算胜负,棋子多的一方获胜;第4 种情况判定对方获胜。

  • 计算机选择落子位置的策略
    选择落子位置的策略 选择落子位置的策略对每个可能 的落子 位置,计算 该位置的 该位置的 “分值 ”(可以翻转的对手棋子数量 可以翻转的对手棋子数量 可以翻转的对手棋子数量.同分数选择行数小的。

  • 实现思路
    黑白棋玩家的子的坐标放在集合中,改变集合元素实现下棋。根据集合中元素打印棋盘。

  • 亟待完善的地方
    机器下棋策略可以改善,设计递推方法
    不同的持棋方式写了重复的代码,可以进一步包装
    无效代码可以删除,如cont,
    命名

import time

import csv

class HeiBaiPlayer(object):

    status = True  # 是否有位置可以下

    defeat = False  # 是否赢了

    R_LIST = [(i, j) for i in range(-1, 2) for j in range(-1, 2)]

    R_LIST.remove((0, 0))

    count = 0

    def __init__(self, dim, players, _color):  # _color只能是hei or bai ,players只能是com or peop

        self.hei = {(dim//2+1, dim//2), (dim//2, dim//2+1)}

        self.players = players

        self.bai = {(dim//2, dim//2), (dim//2+1, dim//2+1)}

        self.dim = dim

        self._color = _color  # dic

    def qp_print(self):

        '''

        根据场中的hei和bai打印棋盘

        :return:

        '''

        for i in range(self.dim + 1):

            if i == 0:

                print(" ", end='')

                print(''.join([str(chr(97 + x)) for x in range(self.dim)]))

            else:

                for j in range(self.dim + 1):

                    if j == 0:

                        print(chr(96 + i), end='')

                    else:

                        if (i, j) in self.hei:

                            print('X', end='')

                        elif (i, j) in self.bai:

                            print('O', end='')

                        else:

                            # print((i,j))

                            print('.', end='')

                print()

    def legal_position(self,players):

        '''

        :param players:bai或者h
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/135293
推荐阅读
相关标签
  

闽ICP备14008679号