91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 13KB
    文件類型: .py
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-17
  • 語言: Python
  • 標簽: 五子棋AI??

資源簡介

使用python寫的基于兩層博弈樹的五子棋AI。加入了阿爾法貝塔剪枝。 python版本:3+,應該可以在命令行里直接跑。 電腦執黑,玩家執白。無禁手。 因為只有兩層博弈樹,請大家不要嫌他菜哈哈哈,僅供大家學習參考。 由于寫得比較匆忙,代碼寫的十分丑陋,望海涵!

資源截圖

代碼片段和文件信息

#?-*-?coding:?utf-8?-*-


from?tkinter?import?*
from?tkinter?import?messagebox
import?time
root=Tk()
root.title(‘五子棋‘)
SIZE=17
win_flag=0#-1是人贏1是電腦贏
w=Canvas(rootwidth=SIZE*30height=SIZE*30background=‘orange‘)
w.pack()
for?num?in?range(1SIZE):
????w.create_line(num*3030num*30(SIZE-1)*30width=2)
for?num?in?range(1SIZE):
????w.create_line(30num*30(SIZE-1)*30num*30width=2)

color_flag=1?#下一步要下黑子
STEP=0?#為0則表示還沒落第一個子
matrix?=?[[0?for?i?in?range(SIZE+2)]?for?i?in?range(SIZE+2)]?#外面pading了一圈
#matrix_copy?=?[[0?for?i?in?range(SIZE+2)]?for?i?in?range(SIZE+2)]?#外面pading了一圈
min_x=0?#當前棋子最左的范圍
min_y=0
max_x=0
max_y=0

def?fresh_outline_rectangle(xy):?#刷新棋子外接矩形范圍
????global?min_x
????global?max_x
????global?min_y
????global?max_y
????global?STEP
????if?(STEP?==?0):#下第一顆棋
????????min_x?=?x
????????min_y?=?y
????????max_x?=?x
????????max_y?=?y
#????????STEP?=?1
????else:
????????if(x????????????min_x=x
????????elif(x>max_x):
????????????max_x=x
????????if(y????????????min_y=y
????????elif(y>max_y):
????????????max_y=y
#????w.create_rectangle(30*min_x30*min_y30*max_x30*max_yfill=‘blue‘outline=‘blue‘)

????????

#?棋型的評估分數

shape_score?=?{?(010):5???????????#單子
????????????????(011-1):10???????#死2
????????????????(-1110):10???????#死2
????????????????(0110):20????????#活2
????????????????(-11110):20?????#死3
????????????????(0111-1):20?????#死3
????????????????(01110):45??????#活3
????????????????(-111110):60???#死4
????????????????(01111-1):60???#死4
????????????????(011110):120???#活4
????????????????(0111110):300?#成5
????????????????(011111-1):300
????????????????(-1111110):300
????????????????(-111111-1):300
????????????????(-1111111-1):300
????????????????(-11111111-1):300
????????????????}


def?evaluate_each(list_adlist_xwlist_zelist_cq):??#對一個節點的估值
????score_ad=shape_score.get(tuple(list_ad)0)?#默認為0
????score_xw?=?shape_score.get(tuple(list_xw)0)
????score_ze?=?shape_score.get(tuple(list_ze)0)
????score_cq?=?shape_score.get(tuple(list_cq)0)
????rank=[score_adscore_xwscore_zescore_cq]?
????rank.sort()
????rank.reverse()
????score?=?rank[0]+rank[1]?#當前節點的最大評分值
????return??score


def?get_list(mx?mycolor):?#從當前節點搜索?出來4個列表(四個方向)這里colorflag是局部變量
????######################list_ad
????global?matrix
????list1?=?[]
????tx?=?mx
????ty?=?my
????while?(matrix[tx][ty]?==?color):
????????list1.append(1)?#1表示是己方棋子,-1是地方棋子
????????tx?=?tx?+?1?#右
????????ty?=?ty
????if?(matrix[tx][ty]?==?-color?or?tx?==?0?or?ty?==?0?or?tx?>=?SIZE?or?ty?>=?SIZE):
????????list1.append(-1)
????else:
????????list1.append(0)
????list1.pop(0)?#刪除自己?防止在合并的時候重復計算
????list2?=?[]
????tx?=?mx
????ty?=?my
????while?(matrix[tx][ty]?==?color):
????????list2.append(1)
????????tx?=?tx?-?1
????????ty?=?ty
????if?(matrix[tx][ty]?==?-color?or?tx?==?0?or?ty?==?0?or?tx?>=

評論

共有 條評論

相關資源