赞
踩
规则
黑白棋的每颗棋子由黑白两色组成,一面白,一面黑。每次落子,把本方颜色的棋子放在棋盘的空格上,若在横、竖、斜八个方向的任一方向上有本方棋子,则被夹在中间的对手棋子全部翻转为本方棋子颜色;并且,仅在可以翻转棋子的地方才能落子。如果一方至少有一步合法棋步可下,他就必须落子,不得弃权。棋盘已满或双方都没有棋子可下时棋局结束,以棋子数目来计算胜负,棋子多的一方获胜。在棋盘还没有下满时,如果一方的棋子已经被对方吃光,则棋局也结束,将对手棋子吃光的一方获胜。
两位玩家轮流下棋,直到一方没有符合规则的落子位置,在这种情况下,剩下的一方继续下棋,直到对手有了可以落子的位置。此时,恢复两者轮流下棋的顺序。如果一方落子在非法位置,则视为放弃本次对弈,对方获胜。游戏结束的条件: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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。