tictactoe(重印)

"""
作者:肖恩·麦克罗伊
语言:Python 2.5
概述:" tictactoeplayer"的实例播放最佳tictactoe
专业类型:player = {ex,oh};空= {空白}; cell = player+空;
董事会= [单元]
类型关系:bool(c)==单元格中任何C的true
"""
ex,哦,空白='x','0','''
线性= [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8] ,[0,4,8],,
[2,4,6]]
线= lambda板:[[board [i] for x in x in x in x in Linear中的x]
推动= lambda董事会:董事会.Count(ex)== board.Count.Count(OH)和EX或OH
对手= lambda播放器:播放器== ex和oh或ex
makesthreat = lambda播放器,单元格:cells.count(blank)== 1和
对手(玩家)不在牢房中
numPharteats = lambda播放器,董事会:len([x for x in in Lines(板),如果
makesthreat(播放器,x)])
haswon = lambda播放器,董事会:[播放器]*3行(板)
标记= lambda董事会,索引:[(板[i],mover(board))[i == index]
在范围(9)中]
display = lambda板:'\ n \ n'+'\ n-+ - + - + - \ n'.join(['|'.join(board [3*i:board [3*i:
3*(i + 1)])对于i范围(3)]) +'\ n \ n'
blankindices = lambda板:[i在范围内(9),如果板[i] ==空白]
iSfined = lambda板:blankindices(board)== []或[ex]*3 in
线(木板)或[OH]*3在行(板)中
numowntherteats = lambda板:numsthreats(Mover(董事会),董事会)
numopponentsThreats = lambda板:
数字(对手(Movor(董事会)),董事会)
compoctyvalue = lambda董事会:Haswon(对手(Movors(董事会)),董事会)和
(-1)或Haswon(Movor(董事会),董事会)和(+1)或0
评估= lambda董事会:[evermotvalue(董事会),,
(-1)*numopponentsThreats(板),(+1)*numownthreats(b oard)]
值= lambda董事会,索引:[[],[索引]]和
评估(标记(董事会,索引))或\
min([评估(标记(标记(董事会,索引),i))
blankindices(板)如果不是i ==索引))
blankIndexValues = lambda板:[value(board,i)for i in
空白(板)]
类似物= lambda list1,list2,optimum:[x for(i,x)in
枚举(list1)如果list2 [i] == optimum(list2)]
OptimalBlankIndices = Lambda板:Blankindices(板)和
类似物(Blankindices(板),BlankIndexvalu ES(板),最大)
OptimalMoves = lambda板:[标记(板,i)
OptimalBlankIndices(板)]
CenterGrabs = lambda板:[标记(板,i)为i在[4]中,如果我在
空白(板)]
CornerGrabs = lambda板:[标记(板,i)为i在[0,2,6,8]如果我
在Blankindices(板)中]
tictactoemove = lambda董事会:[8,9]中的Len(Blankindices(Board))和
(CenterGrabs(木板)或CornerGrabs(板))[0]或\
OptimalMoves(董事会)和
OptimalMoves(董事会)[0]或iSfined(董事会)和董事会
tictactoeplayer类:
def __init __(自我):
globals()['mark'] = self.mark
globals()['newgame'] = self.newgame
globals()['turn'] = self.turn
打印"输入标记(i)以在第i-th细胞上放置标记"
打印'123' +'\ n' +'456' +'\ n' +'789'
打印"输入newgame()开始新游戏"
打印"输入turn()以放弃你的回合"
self.newgame()
def mark(self,offbyoneIndex):
self.board =标记(self.board,offbyoneIndex-1)
打印"您的举动:' + Display(self.board)
self.turn()
def newgame(self):
self.board = [空白]*9
打印 '新游戏:' + display(self.board) def转(自我): self.board = tictactoemove(self.board) 打印'我的动作:' + display(self.board)

标签: python

添加新评论