日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

minimax算法怎么在python中使用

發布時間:2023/12/15 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 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中使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。