本文实例为大家分享了python实现简单五子棋游戏的具体代码,供大家参考,具体内容如下
从图形导入* 从数学进口* 进口numpy np def ai (): ”“” 人工智能计算落子位置 ”“” 最大最小(真的,深度,-99999999,99999999) 返回next_point [0], next_point [1] def最大最小(is_ai,深度,α,β): ”“” 负值极大算法搜索α+β剪枝 ”“” #游戏是否结束| |探索的递归深度是否到边界 如果game_win (list1)或game_win(用于)或深度==0: 返回评估(is_ai) blank_list=列表(集(list_all) .difference(设置(list3))) 订单(blank_list) #搜索顺序排序提高剪枝效率 #遍历每一个候选步 在blank_list next_step [0:60]: #如果要评估的位置没有相邻的子,则不去评估减少计算 如果不是has_neightnor (next_step): 继续 如果is_ai: list1.append (next_step) 其他: list2.append (next_step) list3.append (next_step) 值=https://www.yisu.com/zixun/-maxmin(不是is_ai,深度- 1,β- alpha) 如果is_ai: list1.remove (next_step) 其他: list2.remove (next_step) list3.remove (next_step) 如果α值>: 如果深度==深度: next_point [0]=next_step [0] next_point [1]=next_step [1] #α+β剪枝点 如果β值>=: 回归测试 α=值 返回α def顺序(blank_list):“”” 离最后落子的邻居位置最有可能是最优点 计算最后落子点的8个方向邻居节点 若未落子,则插入到空白列表的最前端 :param blank_list:未落子节点集合 返回:blank_list ”“” last_pt=list3 [1] #在blank_list项目: 我的范围(1、2): j的范围(1、2): 如果我==0和j==0: 继续 如果(last_pt [0] + i, last_pt [1] + j) blank_list: blank_list。删除((last_pt [0] + i, last_pt [1] + j)) blank_list。插入(0,(last_pt [0] + i, last_pt [1] + j)) def has_neightnor (pt): ”“” 判断是否有邻居节点 :param pt:待评测节点 返回: ”“” 我的范围(1、2): j的范围(1、2): 如果我==0和j==0: 继续 如果(pt[0] +我,pt [1] + j) list3: 还真 返回假 def评价(is_ai): ”“” 评估函数 ”“” 如果is_ai: my_list=list1 enemy_list=用于 其他: my_list=用于 enemy_list=list1 #算自己的得分 score_all_arr=[] #得分形状的位置用于计算如果有相交得分翻倍 my_score=0 为泰党的my_list: m=pt [0] n=pt [1] my_score +=cal_score (m, n, 0, 1 enemy_list my_list, score_all_arr) my_score +=cal_score (m, n 1 0 enemy_list my_list, score_all_arr) my_score +=cal_score (m, n, 1, 1, enemy_list my_list, score_all_arr) my_score +=cal_score (m, n, 1, 1, enemy_list my_list, score_all_arr) #算敌人的得分,并减去 score_all_arr_enemy=[] enemy_score=0 为泰党的enemy_list: m=pt [0] n=pt [1] enemy_score +=cal_score (m, n, 0, 1 my_list enemy_list, score_all_arr_enemy) enemy_score +=cal_score (m, n 1 0 my_list enemy_list, score_all_arr_enemy) enemy_score +=cal_score (m, n, 1, 1, my_list enemy_list, score_all_arr_enemy) enemy_score +=cal_score (m, n, 1, 1, my_list enemy_list, score_all_arr_enemy) total_score=my_score - enemy_score * 0.1 返回total_score def cal_score (m, n, x_decrict、y_derice enemy_list, my_list, score_all_arr): ”“” 每个方向上的分值计算 :param m: :param n: :param x_decrict: :param y_derice: :param enemy_list: :param my_list: :param score_all_arr: 返回: ”“” add_score=0 #加分项 #在一个方向上,只取最大的得分项 max_score_shape=(0,没有) #如果此方向上,该点已经有得分形状,不重复计算 在score_all_arr:项 项为泰党的[1]: 如果m==pt[0]和n==pt[1]和x_decrict==[2][0]和y_derice==[2] [1]: 返回0 #在落子点左右方向上循环查找得分形状 补偿的范围(1): #抵消=2 pos=[] 因为我在范围(0,6): 如果(m + (i +偏移量)* x_decrict, n + (i +偏移量)* y_derice) enemy_list: pos.append (2) elif (m + (i +偏移量)* x_decrict, n + (i +偏移量)* y_derice) my_list: pos.append (1) 其他: pos.append (0) tmp_shap5=(pos [0], pos [1], pos [2], pos [3], pos [4]) tmp_shap6=(pos [0], pos [1], pos [2], pos [3], pos [4], pos [5]) 在shape_score(得分、形状): 如果tmp_shap5==形状或tmp_shap6==形状: 如果分数比;max_score_shape [0]: max_score_shape=(分数,((m +(0 +偏移量)* x_decrict, n +(0 +偏移量)* y_derice), (m +(1 +偏移量)* x_decrict, n +(1 +偏移量)* y_derice), (m +(2 +抵消)* x_decrict, n +(2 +偏移量)* y_derice), (m +(3 +抵消)* x_decrict, n +(3 +偏移量)* y_derice), (m +(4 +偏移量)* x_decrict, n +(4 +偏移量)* y_derice)), (x_decrict y_derice)) #计算两个形状相交,如两个3活相交,得分增加一个子的除外 如果max_score_shape[1]不是没有: 在score_all_arr:项 pt1[1]项: 在max_score_shape pt2 [1]: 如果pt1==pt2 max_score_shape[0]比;10项[0]比;10: add_score +=项目[0]+ max_score_shape [0] score_all_arr.append (max_score_shape) 返回add_score + max_score_shape [0] def game_win(列表): ”“” 胜利条件判断 ”“” # m的范围(列): # n的范围(行): #如果n & lt;行- 4和(m, n)的列表和(m, n + 1)列表和列表(m, n + 2), ( # m, n + 3)的列表,并在列表(m, n + 4): #还真 # elif m & lt;行- 4和(m, n)的列表和列表(m + 1, n)和(m + 2, n)和( # m + 3, n)在列表和列表(m + 4 n): #还真 # elif m & lt;行- 4和n & lt;行- 4和(m, n)的列表和(m + 1, n + 1)列表,( # m + 2, n + 2)列表,(m + 3, n + 3)列表,(m + 4, n + 4)名单: #还真 # elif m & lt;行- 4和n比;3和列表(m, n)和(m + 1, n - 1)在列表和( null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullpython实现简单五子棋游戏