minimax算法怎么在python中使用
生活随笔
收集整理的這篇文章主要介紹了
minimax算法怎么在python中使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這期內容當中小編將會給大家帶來有關minimax算法怎么在python中使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
完整代碼
fromfunctoolsimportwraps
importtime
importcsv
#1.初始化棋盤
#------------
definit_board():
'''
初始化棋盤
棋盤規格15*15
如下所示:
board=[[...............],
[...............],
[...............],
[...............],
[...............],
[...............],
[...............],
[...............],
[...............],
[...............],
[...............],
[...............],
[...............],
[...............],
[...............]]
其中:
.–未被占用
X–被黑棋占用
O–被白棋占用
'''
print('Initboard...')
time.sleep(0.5)
n=15
board=[['.'for_inrange(n)]for_inrange(n)]
returnboard
#2.確定玩家,執黑先走
#--------------------
defget_player():
'''
人類玩家選擇棋子顏色(黑'X'先走)
'''
humancolor=input("Enteryourcolor.(ex.'X'or'O'):").upper()
computercolor=['X','O'][humancolor=='X']
returncomputercolor,humancolor
#3.進入循環
#----------
#4.打印棋盤、提示走子
#------------------------------
defprint_board(board):#ok
'''
打印棋盤、比分
開局:
123456789abcdef
1...............
2...............
3...............
4...............
5...............
6...............
7...............
8...............
9...............
a...............
b...............
c...............
d...............
e...............
f...............
'''
axises=list('123456789abcdef')
print('',''.join(axises))
fori,vinenumerate(axises):
print(v,''.join(board[i]))
#5.思考走法、放棄終止
#--------------------
defget_human_move(board,color):#ok
'''
取人類玩家走法
'''
giveup=True#放棄標志
legal_moves=_get_legal_moves(board,color)
#print(','.join([translate_move(move)formoveinlegal_moves]),len(legal_moves))
whileTrue:
_move=input("Enteryourmove.(ex.'cd'meansrow=ccol=d):").lower()
move=translate_move(_move)
ifmoveinlegal_moves:
giveup=False#不放棄
break
returnmove,giveup
def_get_all_lianxin(board,move,color):#ok
'''
取當前點位落子后連星
1.按照棋盤兩連、三連、四連的個數doubletriplequadrapenta
'''
n=len(board)
uncolor=['X','O'][color=='X']#反色
lianxin=[]#連星數,len(lianxin)==4
directions=((0,1),(1,0),(1,1),(1,-1))#東,南,東南,西南
fordirectionindirections:
dr,dc=direction#步幅
#r,c=move#起點
count=1#連星數,算上起點(落子位置)
jump_count=[0,0]#順、反方向跳開一個空格之后的連星數
jump_flag=[False,False]#順、反方向跳開一個空格的標志
block=[False,False]#順、反方向是否堵死
#name=['','']
fori,vinenumerate([1,-1]):#順、反方向分別用1、-1表示
dr,dc=v*dr,v*dc#步幅
r,c=move[0]+dr,move[1]+dc#先走一步
whileTrue:
ifnot_is_on_board(board,[r,c])orboard[r][c]==uncolor:#不在棋盤內,或對方棋子
block[i]=True#被堵死
break
ifboard[r][c]=='.':#為空
ifnot_is_on_board(board,[r+dr,c+dc])orboard[r+dr][c+dc]!=color:#且下一格,不在棋盤內、或者非己方棋子
break
ifjump_flag[i]==True:#前面已經跳了一格了,則終止
break#能力所限,不考慮又跳一格的情況!!!
else:
jump_flag[i]=True
elifboard[r][c]==color:
ifjump_flag[i]==True:
jump_count[i]+=1
else:
count+=1
r,c=r+dr,c+dc#步進
lianxin.append([count,jump_count,block])
returnlianxin
def_move_score(board,move):#ok
'''
對該落子位置“打分”
這個邏輯太復雜了,代碼又長又臭!!暫時不考慮簡化
棋型分值:
0.活五+100000
1.死五+100000
2.活四+10000
3.死四+1000
4.活三+1000
5.死三+100
6.活二+100
7.死二+10
8.活一+10
9.死一+2
特別說明:
10.跳N兩邊棋型分相加*上一級分值的20%?商榷
lianxin==[[2,[0,0],[True,False]],
[1,[0,0],[True,False]],
[3,[1,0],[False,False]],
[3,[2,1],[True,False]]]
'''
#死一,活一,死二,活二,死三,活三,死四,活四,死五,活五
scores=[2,10,10,100,100,1000,1000,10000,100000,100000]
sum_score=0
forcolorin['X','O']:
forlianxinin_get_all_lianxin(board,move,color):
count,jump_count,block=lianxin
ifjump_count[0]>0andjump_count[1]>0:#情況一:兩邊跳
ifblock[0]==Trueandblock[1]==True:
ifcount+jump_count[0]+jump_count[1]+2<5:continue
else:
#這邊跳了
ifblock[0]==True:#有跳的,先把分數加了再說(查表加分)
sum_score+=scores[jump_count[0]*2-2]#加死的分
sum_score+=min(scores[(jump_count[0]+count)*2-2]*0.2,200)#上一級的20%
else:
sum_score+=scores[jump_count[0]*2-1]#加活的分
sum_score+=min(scores[(jump_count[0]+count)*2-1]*0.2,200)#上一級的20%
#這邊也跳了
ifblock[1]==True:#有跳的,先把分數加了再說(查表加分)
sum_score+=scores[jump_count[1]*2-2]#加死的分
sum_score+=min(scores[(jump_count[1]+count)*2-2]*0.2,200)#上一級的20%
else:
sum_score+=scores[jump_count[1]*2-1]#加活的分
sum_score+=min(scores[(jump_count[1]+count)*2-1]*0.2,200)#上一級的20%
#中間
sum_score+=scores[count*2-1]#中間加活的分
elifjump_count[0]>0andjump_count[1]==0:#情況二:有一邊跳
ifblock[0]==Trueandblock[1]==True:
ifcount+jump_count[0]+jump_count[1]+1<5:continue
else:
#跳的這邊
ifblock[0]==True:#先把跳那邊的分數加了再說(查表加分)
sum_score+=scores[jump_count[0]*2-2]#加死的分
sum_score+=min(scores[(jump_count[0]+count)*2-2]*0.2,200)#上一級的20%
else:
sum_score+=scores[jump_count[0]*2-1]#加活的分
sum_score+=min(scores[(jump_count[0]+count)*2-1]*0.2,200)#上一級的20%
#沒跳的那邊
ifblock[1]==True:
sum_score+=scores[count*2-2]#加死的分
else:
sum_score+=scores[count*2-1]#加活的分
elifjump_count[1]>0andjump_count[0]==0:#情況三:另一邊跳
ifblock[0]==Trueandblock[1]==True:
ifcount+jump_count[0]+jump_count[1]+1<5:continue
else:
#跳的這邊
ifblock[1]==True:#先把跳那邊的分數加了再說(查表加分)
sum_score+=scores[jump_count[1]*2-2]#加死的分
sum_score+=min(scores[(jump_count[1]+count)*2-2]*0.2,200)#上一級的20%
else:
sum_score+=scores[jump_count[1]*2-1]#加活的分
sum_score+=min(scores[(jump_count[1]+count)*2-1]*0.2,200)#上一級的20%
#沒跳的那邊
ifblock[0]==True:
sum_score+=scores[count*2-2]#加死的分
else:
sum_score+=scores[count*2-1]#加活的分
elifjump_count[0]==0andjump_count[1]==0:#情況四:兩邊都沒跳
ifblock[0]andblock[1]:#兩邊都堵死了
ifcount==5:#等于5才加,否則不加
sum_score+=scores[count*2-2]#-1,-2一樣
elifblock[0]orblock[1]:#只堵死一邊
sum_score+=scores[count*2-2]#加死的分
else:
sum_score+=scores[count*2-1]#加活的分
returnsum_score
def_get_center_enmpty_points(board):#ok
'''
取中心點附近的空位
從中心點逐圈順時針掃描,若連續兩圈未有棋子,則停止
'''
n=len(board)
center_point=[n//2,n//2]#中心點[7,7],即'88'
c1=0#空圈計數
legal_moves=[]#保存空位
foriinrange(8):#從內到外掃描8圈
c2=True#空圈標志
ifi==0:
points=[[n//2,n//2]]
else:
#points=[第7-i行]+[第7+i列]+[第7+i行]+[第7-i列]#從左上開始,順時針一圈
points=[[7-i,c]forcinrange(7-i,7+i)]+\
[[r,7+i]forrinrange(7-i,7+i)]+\
[[7+i,c]forcinrange(7+i,7-i,-1)]+\
[[r,7-i]forrinrange(7+i,7-i,-1)]
forpointinpoints:
ifboard[point[0]][point[1]]=='.':#遇到空位,則
legal_moves.append(point)#保存點位
else:
c2=False#此圈非空
ifc2==True:#若此圈為空,空圈計數器加1
c1+=1
ifc1==2:break
else:#否則,清零
c1=0
returnlegal_moves#越前,棋盤點位分值越高!
defminimax(board,color,maximizingPlayer,depth):
'''
極大極小算法
其中:
maximizingPlayer=True#己方
用例:
_,move=minimax(board,'X',True,4)#假設計算機執黑'X'
#參見:https://en.wikipedia.org/wiki/Minimax
functionminimax(node,depth,maximizingPlayer)is
ifdepth=0ornodeisaterminalnodethen
returntheheuristicvalueofnode
ifmaximizingPlayerthen
value:=?∞
foreachchildofnodedo
value:=max(value,minimax(child,depth?1,FALSE))
returnvalue
else(*minimizingplayer*)
value:=+∞
foreachchildofnodedo
value:=min(value,minimax(child,depth?1,TRUE))
returnvalue
(*Initialcall*)
minimax(origin,depth,TRUE)
'''
pass
defget_computer_move(board,color):
'''
取計算機玩家走法
計算機走子策略:
1.對所有合法的落子位置逐個“打分”(如何“打分”,決定了計算機下棋的水平)
2.取所有分值最高的落子位置
'''
print('Computeristhinking...',end='')
legal_moves=_get_legal_moves(board,color)
scores=[_move_score(board,move)formoveinlegal_moves]
max_score=max(scores)#最高分值
best_move=legal_moves[scores.index(max_score)]
print("'{}'".format(translate_move(best_move)))
returnbest_move
def_is_legal_move(board,move):#ok
'''
判斷落子位置是否合法
說明:只要在棋盤內,且為空,即合法
'''
if_is_on_board(board,move)andboard[move[0]][move[1]]=='.':
returnTrue
returnFalse
def_get_legal_moves(board,color):#ok
'''
取當前顏色棋子所有的合法走法
返回格式:[[x1,y1],[x2,y2],...]
'''
legal_moves=_get_center_enmpty_points(board)
returnlegal_moves
def_is_on_board(board,move):#ok
'''
判斷點位是否在棋盤范圍內
'''
n=len(board)
returnmove[0]inrange(n)andmove[1]inrange(n)
deftranslate_move(move):#ok
'''
轉換坐標
如'1a'可轉換為[0,9];又如[9,10]轉換為'ab'
此函數,只是為了方便,不是必要的
'''
axises=list('123456789abcdef')
iftype(move)isstr:#如'cd'
row=axises.index(move[0])
col=axises.index(move[1])
_move=[row,col]#得[2,3]
eliftype(move)islist:#如[2,3]
row=axises[move[0]]
col=axises[move[1]]
_move='{}{}'.format(row,col)#得'cd'
return_move
#6.落子
#----------
defdo_move(board,move,color):#ok
'''
在當前位置落子
'''
assertboard[move[0]][move[1]]=='.'
board[move[0]][move[1]]=color
#7.判斷局面、是否終止
#------------------------------
defcheck_board(board,color):#ok
'''
檢查棋盤
返回:是否勝利
'''
n=len(board)
directions=((0,1),(1,0),(1,1),(1,-1))#東,南,東南,西南
#四個搜索方向的起點(坐標),分四組。
#形如:[[第1列的點],[第1行的點],[第1列+第1行的點],[第1行+第n列的點]]
all_start_points=[[[i,0]foriinrange(n)],
[[0,j]forjinrange(n)],
[[i,0]foriinrange(n-4)]+[[0,j]forjinrange(1,n-4)],#排除了長度小于5,及重復的情況
[[0,j]forjinrange(4,n)]+[[i,n-1]foriinrange(1,n-4)]]
fordirection,start_pointsinzip(directions,all_start_points):
dr,dc=direction#步幅
forstart_pointinstart_points:
r,c=start_point#起點
count=0
while_is_on_board(board,[r,c]):
ifboard[r][c]==color:
count+=1
ifcount==5:
returnTrue
else:
count=0
r,c=r+dr,c+dc#步進
returnFalse
defcheck_board__(board,color):#廢棄!
'''
檢查棋盤(不如上面的方式簡潔)
返回是否勝利
'''
n=len(board)
uncolor=['X','O'][color=='X']#反色
#1.行搜索
foriinrange(n):
count=0
forjinrange(n):
ifboard[i][j]==color:
count+=1
ifcount==5:
returnTrue#'Winneris'+color
elifboard[i][j]==uncolor:
count=0
#2.列搜索
forjinrange(n):
count=0
foriinrange(n):
ifboard[i][j]==color:
count+=1
ifcount==5:
returnTrue#'Winneris'+color
elifboard[i][j]==uncolor:
count=0
#3.斜搜索k=1左上右下
#3.a.k=1對角線上方
forjinrange(n-4):#終止列n-4
count=0
foriinrange(n-j):#終止行n-j
ifboard[i][j+i]==color:
count+=1
ifcount==5:
returnTrue
elifboard[i][j+i]==uncolor:
count=0
#3.b.k=1對角線下方
foriinrange(1,n-4):#終止行n-4
count=0
forjinrange(n-i):#終止列n-i
ifboard[i+j][j]==color:
count+=1
ifcount==5:
returnTrue
elifboard[i+j][j]==uncolor:
count=0
#4.斜搜索k=-1左下右上
#4.a.k=-1對角線下方
forjinrange(n-4):#終止列n-4
count=0
foriinrange(n-j):#終止行n-j
ifboard[n-i-1][j+i]==color:
count+=1
ifcount==5:
returnTrue
elifboard[n-i-1][j+i]==uncolor:
count=0
#4.b.k=-1對角線上方
forjinrange(4,n):
count=0
foriinrange(n-1):
ifboard[i][j-i]==color:
count+=1
ifcount==5:
returnTrue
elifboard[i][j-i]==uncolor:
count=0
returnFalse
#8.游戲結束,返回信息
#--------------------
deflogging(func):#ok
'''
記錄游戲相關信息(裝飾器)
包括:
開始時間、比賽耗時、棋盤大小、黑棋玩家、白棋玩家、游戲比分、本局棋譜
保存到reversi.csv文件
'''
@wraps(func)
defwrap(*args,**kwargs):
try:
start=time.strftime("%Y%m%d%H:%M:%S",time.localtime())#開始時間
t1=time.time()
info=func(*args,**kwargs)#棋盤大小、黑棋玩家、白棋玩家、游戲比分、本局棋譜(主程序)
t2=time.time()
t=int(t2-t1)#比賽耗時
line=[start,t,*info]
withopen('gobang.csv','a')asf:
writer=csv.writer(f,lineterminator='\n')
writer.writerow(line)#寫入
exceptExceptionase:
pass
returnwrap
#==========================================
#主函數
#==========================================
#@logging
defmain():#ok
'''
主程序
人機對戰
流程:
1.初始化棋盤
2.確定棋手,黑先
3.進入循環
4.打印棋盤,提示走子
5.思考走法,放棄終止
6.落子
7.檢查棋盤,是否終止
8.切換棋手
9.游戲結束,返回信息
'''
#1.初始化棋盤
board=init_board()
#2.確定玩家,執黑先走
computer_color,human_color=get_player()
current_color='X'
record=''#棋譜,如'X:abO:aaX:ba...'
#3.進入循環
whileTrue:
#4.打印棋盤、提示走子
print_board(board)
print("Nowturnto'{}'...".format(current_color))
#5.思考走法,記錄棋譜
ifcurrent_color==computer_color:
move=get_computer_move(board,current_color)
elifcurrent_color==human_color:
move,giveup=get_human_move(board,current_color)
ifgiveup==True:break#放棄則終止
record=record+'{}:{}'.format(current_color,translate_move(move))#錄入棋譜
#6.落子
do_move(board,move,current_color)
#7.判斷局面
done=check_board(board,current_color)#返回終止標志
#7_1.終止
ifdone==True:
print_board(board)
print("Gameover!Winneris'{}'".format(current_color))
break
#8.切換棋手
current_color=['X','O'][current_color=='X']
#測試
deftest_get_center_enmpty_points():
'''
#123456789abcdef
board=[[...............],#1
[...............],#2
[...............],#3
[...............],#4
[...............],#5
[...............],#6
[...............],#7
[...............],#8
[...............],#9
[...............],#a
[...............],#b
[...............],#c
[...............],#d
[...............],#e
[...............]]#f
#123456789abcdef
board=[[...............],#1
[...............],#2
[...............],#3
[...............],#4
[.........X.....],#5
[......X........],#6
[.....O..XO.....],#7
[.....XXOX......],#8
[.....XOX.......],#9
[..........X....],#a
[...X...........],#b
[..X............],#c
[.O.............],#d
[...............],#e
[...............]]#f
'''
print('Testing_get_center_enmpty_points()...')
#123456789abcdef
board=[['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#1
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#2
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#3
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#4
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#5
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#6
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#7
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#8
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#9
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#a
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#b
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#c
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#d
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#e
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.']]#f
empty_points=_get_center_enmpty_points(board)
translate_points=[translate_move(move)formoveinempty_points]
#print(translate_points)
asserttranslate_points==['77','78','79','89','99','98','97','87','66','67','68','69','6a','7a','8a','9a','aa','a9','a8','a7','a6','96','86','76']
#123456789abcdef
board=[['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#1
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#2
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#3
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#4
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#5
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#6
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#7
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#8
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#9
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#a
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#b
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#c
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#d
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#e
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.']]#f
empty_points=_get_center_enmpty_points(board)
translate_points=[translate_move(move)formoveinempty_points]
print(translate_points)
assert'11'intranslate_points
#123456789abcdef
board=[['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#1
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#2
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#3
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#4
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#5
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#6
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#7
['.','.','.','.','.','.','.','X','.','.','.','.','.','.','.'],#8
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#9
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#a
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#b
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#c
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#d
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#e
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.']]#f
empty_points=_get_center_enmpty_points(board)
translate_points=[translate_move(move)formoveinempty_points]
print(translate_points)
assert'11'intranslate_points
print('ok')
deftest_move_score():
'''
_move_score(board,move,color)
#123456789abcdef
board=[[...............],#1
[...............],#2
[...............],#3
[...............],#4
[...............],#5
[...............],#6
[...............],#7
[...............],#8
[...............],#9
[...............],#a
[...............],#b
[...............],#c
[...............],#d
[...............],#e
[...............]]#f
#123456789abcdef
board=[[...............],#1
[...............],#2
[...............],#3
[...............],#4
[.........X.....],#5
[......X........],#6
[.....O..XO.....],#7
[.....XXOX......],#8
[.....XOX.......],#9
[..........X....],#a
[...X...........],#b
[..X............],#c
[.O.............],#d
[...............],#e
[...............]]#f
'''
print('Testing_move_score()...')
#123456789abcdef
board=[['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#1
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#2
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#3
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#4
['.','.','.','.','.','.','.','.','.','X','.','.','.','.','.'],#5
['.','.','.','.','.','.','X','.','.','.','.','.','.','.','.'],#6
['.','.','.','.','.','O','.','.','X','O','.','.','.','.','.'],#7
['.','.','.','.','.','X','X','O','X','.','.','.','.','.','.'],#8
['.','.','.','.','.','X','O','X','.','.','.','.','.','.','.'],#9
['.','.','.','.','.','.','.','.','.','.','X','.','.','.','.'],#a
['.','.','.','X','.','.','.','.','.','.','.','.','.','.','.'],#b
['.','.','X','.','.','.','.','.','.','.','.','.','.','.','.'],#c
['.','O','.','.','.','.','.','.','.','.','.','.','.','.','.'],#d
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#e
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.']]#f
#[count,jump_count,block]#東,南,東南,西南
lianxin=_get_all_lianxin(board,[6,7],'X')
#print(lianxin)
assertlianxin==[[2,[0,0],[True,False]],
[1,[0,0],[True,False]],
[3,[1,0],[False,False]],
[3,[2,1],[True,False]]]
#死一,活一,死二,活二,死三,活三,死四,活四,死五,活五
scores=[2,10,10,100,100,1000,1000,10000,100000,100000]
assert_move_score(board,[6,7],'X')==10+2+(1000+10+200)+(1000+10+10+200+200)
print('ok')
deftest_get_all_lianxin():
'''
get_all_lianxin(board,move,color)
#123456789abcdef
board=[[...............],#1
[...............],#2
[...............],#3
[...............],#4
[...............],#5
[...............],#6
[...............],#7
[...............],#8
[...............],#9
[...............],#a
[...............],#b
[...............],#c
[...............],#d
[...............],#e
[...............]]#f
#123456789abcdef
board=[[...............],#1
[...............],#2
[...............],#3
[...............],#4
[.........X.....],#5
[......X........],#6
[.....O..XO.....],#7
[.....XXOX......],#8
[.....XOX.......],#9
[..........X....],#a
[...X...........],#b
[..X............],#c
[.O.............],#d
[...............],#e
[...............]]#f
'''
print('Testing_get_all_lianxin()...')
#123456789abcdef
board=[['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#1
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#2
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#3
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#4
['.','.','.','.','.','.','.','.','.','X','.','.','.','.','.'],#5
['.','.','.','.','.','.','X','.','.','.','.','.','.','.','.'],#6
['.','.','.','.','.','O','.','.','X','O','.','.','.','.','.'],#7
['.','.','.','.','.','X','X','O','X','.','.','.','.','.','.'],#8
['.','.','.','.','.','X','O','X','.','.','.','.','.','.','.'],#9
['.','.','.','.','.','.','.','.','.','.','X','.','.','.','.'],#a
['.','.','.','X','.','.','.','.','.','.','.','.','.','.','.'],#b
['.','.','X','.','.','.','.','.','.','.','.','.','.','.','.'],#c
['.','O','.','.','.','.','.','.','.','.','.','.','.','.','.'],#d
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#e
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.']]#f
#[count,jump_count,block]#東,南,東南,西南
lianxin=_get_all_lianxin(board,[6,7],'X')
#print(lianxin)
assertlianxin==[[2,[0,0],[True,False]],
[1,[0,0],[True,False]],
[3,[1,0],[False,False]],
[3,[2,1],[True,False]]]
#123456789abcdef
board=[['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#1
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#2
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#3
['.','.','.','.','.','.','.','.','.','X','.','.','.','.','.'],#4
['.','.','.','.','.','.','X','.','.','.','.','.','.','.','.'],#5
['.','.','.','.','.','O','.','.','X','O','.','.','.','.','.'],#6
['.','.','.','.','.','X','X','O','X','.','.','.','.','.','.'],#7
['.','.','.','.','.','X','O','X','.','.','.','.','.','.','.'],#8
['.','.','.','.','.','.','.','.','.','.','X','.','.','.','.'],#9
['.','.','.','X','.','.','.','.','.','.','.','.','.','.','.'],#a
['.','.','X','.','.','.','.','.','.','.','.','.','.','.','.'],#b
['.','O','.','.','.','.','.','.','.','.','.','.','.','.','.'],#c
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#d
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],#e
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.']]#f
#[count,jump_count,block]#東,南,東南,西南
lianxin=_get_all_lianxin(board,[5,7],'X')
#print(lianxin)
assertlianxin==[[2,[0,0],[True,False]],
[1,[0,0],[True,False]],
[3,[1,0],[False,False]],
[3,[2,1],[True,False]]]
print('ok')
deftest_check_board():
'''
'''
print('Testingcheck_board()...')
board=[['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.']]
assertcheck_board(board,'X')==False
board=[['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['X','X','X','X','X','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.']]
assertcheck_board(board,'X')==True
board=[['X','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['X','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['X','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['X','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['X','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.']]
assertcheck_board(board,'X')==True
board=[['.','.','.','.','.','.','.','.','.','.','X','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','X','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','X','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','X','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','X'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.']]
assertcheck_board(board,'X')==True
board=[['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['X','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','X','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','X','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','X','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','X','.','.','.','.','.','.','.','.','.','.']]
assertcheck_board(board,'X')==True
board=[['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','X'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','X','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','X','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','X','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','X','.','.','.','.']]
assertcheck_board(board,'X')==True
board=[['.','.','.','.','X','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','X','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','X','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','X','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['X','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
['.','.','.','.','.','.','.','.','.','.','.','.','.','.','.']]
assertcheck_board(board,'X')==True
print('ok')
if__name__=='__main__':
main()
#test_check_board()
#test_get_all_lianxin()
#test_move_score()
#test_get_center_enmpty_points()
總結
以上是生活随笔為你收集整理的minimax算法怎么在python中使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux(CenterOS 6.4)下
- 下一篇: 免费空间可以放几个网站