初学 代码详见: https://gitee.com/liio/gobang 目录结构如下 #####落子与绘制棋盘
一个简单的 Python 五子棋
Python,设计了一款简单的五子棋游戏。水平有限,欢迎批评指正卷 DATA 的文件夹 PATH 列表 卷序列号为 207A-076D /. │  gobang.py        // 五子棋类文件 │  thread_stop.py   // 线程停止文件(由于我的 tk_game.py 写的不是很好所以需要辅助关闭进程) │  tk_game.py       // UI 界面 │   └─source          └─img             background.png             background_c.png             chessboard.png             icon.ico             icon.png  gobang.py 文件的分析:

输赢判断

def isWin(self, line_list=None): if line_list is None:             line_list = self.arround() for line in line_list: if line[0].count(self.__playerid) >= 5: for i in range(0, len(line[0]) - 4): if line[0][i] == line[0][i + 1] == line[0][i + 2] == line[ 0][i + 3] == line[0][i + 4] == self.__playerid: return True else: return False def arround(self=None, row=0, column=0): if self is not None: if len(self.getStep()) != 0:                 row = ord(list(self.getStep().items())[-1][1][0]) - 97                 column = ord(list(self.getStep().items())[-1][1][1]) - 97 else:                 row = 7                 column = 7         line_list, line_list1, line_list2, line_list3, line_list4 = [], [], [], [], []         line_list1_, line_list2_, line_list3_, line_list4_ = [], [], [], [] # 获取一整行         line_list1 = [list(Chess.__checkerboard[row])] for i in range(len(Chess.__checkerboard[row])):             line_list1_.append([row, i])         line_list1.append(line_list1_) # 获取一整列         line_list2 = [list(Chess.__checkerboard.T[column])] for i in range(len(Chess.__checkerboard.T[column])):             line_list2_.append([i, column])         line_list2.append(line_list2_) # 获取正斜线 if row >= column: for i in range(14 - abs(row - column) + 1):                 line_list3.append(Chess.__checkerboard[i + abs(row - column)][i])             line_list3 = [line_list3] for i in range(14 - abs(row - column) + 1):                 line_list3_.append([i + abs(row - column), i])             line_list3.append(line_list3_) if row < column: for i in range(14 - abs(row - column) + 1):                 line_list3.append(Chess.__checkerboard[i][i + abs(row - column)])             line_list3 = [line_list3] for i in range(14 - abs(row - column) + 1):                 line_list3_.append([i, i + abs(row - column)])             line_list3.append(line_list3_) # 获取反斜线 if row + column <= 14: for i in range(row + column + 1):                 line_list4.append(Chess.__checkerboard[i][row + column - i])             line_list4 = [line_list4] for i in range(row + column + 1):                 line_list4_.append([i, row + column - i])             line_list4.append(line_list4_) if row + column > 14: for i in range(28 - (row + column) + 1):                 line_list4.append(                     Chess.__checkerboard[14 - i][14 - (28 - (row + column) - i)])             line_list4 = [line_list4] for i in range(28 - (row + column) + 1):                 line_list4_.append([14 - i, 14 - (28 - (row + column) - i)])             line_list4.append(line_list4_)         line_list.append(list(line_list1))         line_list.append(list(line_list2))         line_list.append(line_list3)         line_list.append(line_list4) return line_list 计算机执子

def aiChess(): def get_score(id):         score = [[1, [0, 0, 0, 0, id], [1, 2, 4, 6, 0]], [1, [id, 0, 0, 0, 0], [0, 6, 4, 2, 1]], [1, [0, 0, 0, id, 0], [2, 4, 6, 0, 1]], [1, [0, id, 0, 0, 0], [1, 0, 6, 4, 2]], [10, [0, 0, id, 0, 0], [1, 10, 0, 10, 1]], [50, [0, id, id, 0, 0], [50, 0, 0, 50, 10]], [50, [0, 0, id, id, 0], [10, 50, 0, 0, 50]], [50, [0, id, 0, id, 0], [10, 0, 50, 0, 10]], [200, [id, id, 0, id, 0], [0, 0, 200, 0, 50]], [500, [0, 0, id, id, id], [50, 200, 0, 0, 0]], [500, [id, id, id, 0, 0], [0, 0, 0, 200, 50]], [5000, [0, id, id, id, 0], [200, 0, 0, 0, 200]], [5000, [0, id, 0, id, id, 0], [200, 0, 500, 0, 0, 200]], [5000, [0, id, id, 0, id, 0], [200, 0, 0, 500, 0, 200]], [5000, [id, id, id, 0, id], [0, 0, 0, 500, 0]], [5000, [id, id, 0, id, id], [0, 0, 500, 0, 0]], [5000, [id, 0, id, id, id], [0, 50000, 0, 0, 0]], [5000, [id, id, id, id, 0], [0, 0, 0, 0, 50000]], [5000, [0, id, id, id, id], [50000, 0, 0, 0, 0]], [99999999, [id, id, id, id, id], [0, 0, 0, 0, 0]]] return score      def dict_span(dict1: dict, dict2: dict):         weight = 100         dict1_keys = list(dict1.keys())         dict2_keys = list(dict2.keys())         re_dict = {} for key in dict1_keys: if key in dict2_keys:                 re_dict[key] = (dict1[key] *                                 dict2[key]) / weight + dict2[key] + dict1[key] else:                 re_dict[key] = dict1[key] for key in dict2_keys: if key not in dict1_keys:                 re_dict[key] = dict2[key] return re_dict      def get_p_score(id):         p_score = {} for s_line in get_score(id): for _ in traversal_checkerboard(): for i in _: for j in range((len(i[0]) - len(s_line[1])) + 1): if i[0][j:len(s_line[1]) + j] == s_line[1]: for p in range( len(i[0][j + 1:len(s_line[1]) + j + 1])): if str(i[0][j + 1:len(s_line[1]) + j + 1][p]) in p_score:                                     p_score[str(                                         i[1][j:len(s_line[1]) + j] [p])] += s_line[0] * s_line[2][p] else:                                     p_score[str(                                         i[1][j:len(s_line[1]) +                                              j][p])] = s_line[0] * s_line[2][p] return p_score      score = get_p_score(2)     score_my = get_p_score(1)     score = dict_span(score, score_my) if len(score) == 0:         score = dict_span(score, score_my) return (eval(max(score, key=score.get))[0], eval(max(score,                                                          key=score.get))[1]) def dicttoChees(step_dict):     Chess.step = step_dict.copy() for r in range(len(Chess._Chess__checkerboard)): for c in range(len(Chess._Chess__checkerboard[r])):             Chess._Chess__checkerboard[r][c] = 0 if len(step_dict) != 0: for step in step_dict.items():             row = ord(step[1][0]) - 97             column = ord(step[1][1]) - 97 if step[0] % 2 == 0:                 Chess._Chess__checkerboard[row][column] = 2 elif step[0] % 2 == 1:                 Chess._Chess__checkerboard[row][column] = 1 tk_game.py 分析

点击落子
def click(event): if not w.isWin() and not b.isWin():         ismove_x = False         ismove_y = False if 10 < event.x < 650 and 10 < event.y < 650: if (event.x - START) % LENGTH < 20:                 x = (event.x - START) // LENGTH                 ismove_x = True elif (event.x - START) % LENGTH > 24:                 x = ((event.x - START) // LENGTH) + 1                 ismove_x = True if (event.y - START) % LENGTH < 20:                 y = (event.y - START) // LENGTH                 ismove_y = True elif (event.y - START) % LENGTH > 24:                 y = ((event.y - START) // LENGTH) + 1                 ismove_y = True if ismove_x and ismove_y:                 move(y, x) 移动提示
def sign(event): # 获取鼠标实时位置,做出提示 # time.sleep(0.08)     canvas.delete("Sign")     ismove_x = False     ismove_y = False if 10 < event.x < 650 and 10 < event.y < 650 and not w.isWin( ) and not b.isWin(): if (event.x - START) % LENGTH < 20:             x = (event.x - START) // LENGTH             ismove_x = True elif (event.x - START) % LENGTH > 24:             x = ((event.x - START) // LENGTH) + 1             ismove_x = True if (event.y - START) % LENGTH < 20:             y = (event.y - START) // LENGTH             ismove_y = True elif (event.y - START) % LENGTH > 24:             y = ((event.y - START) // LENGTH) + 1             ismove_y = True if ismove_x and ismove_y:             y1 = START + (LENGTH * y) - 20             x1 = START + (LENGTH * x) - 20             y2 = START + (LENGTH * y) + 20             x2 = START + (LENGTH * x) + 20             canvas.create_oval(x1 + 15,                                y1 + 15,                                x2 - 15,                                y2 - 15,                                fill='red',                                tags='Sign') def move(y, x): # 落子 global times     if not w.isWin() and not b.isWin(): if w.isPlayer(): if w.moveChessmen(y, x):                 draw() elif b.isPlayer(): if b.moveChessmen(y, x):                 draw() if w.isWin():         tkinter.messagebox.showinfo('提示', '白方获胜!') if b.isWin():         tkinter.messagebox.showinfo('提示', '黑方获胜!') def draw(step_dict=None): # 绘制棋盘     canvas.delete('Piece')     color = {1: 'black', 0: 'white'} if step_dict is None:         step_dict = Chess.getStep().copy() for step in step_dict.items():         row = ord(step[1][0]) - 97         column = ord(step[1][1]) - 97         y1 = START + (LENGTH * row) - 20         x1 = START + (LENGTH * column) - 20         y2 = START + (LENGTH * row) + 20         x2 = START + (LENGTH * column) + 20         canvas.create_oval(x1,                            y1,                            x2,                            y2,                            fill=color[(step[0] % 2)],                            tags='Piece') if step[0] == len(step_dict.items()):             canvas.create_oval(x1 + 15,                                y1 + 15,                                x2 - 15,                                y2 - 15,                                fill='pink',                                tags='Piece') if order:             canvas.create_text(x1 + 20,                                y1 + 20,                                text=str(step[0]),                                fill=color[int(not bool((step[0] % 2)))],                                tags='Piece') # print(draw_list) # 测试输出 打开与保存棋谱

def open_gs(): # 打开棋谱文件 TODO     gs_file = tkinter.filedialog.askopenfilename(title="选择棋谱",                                                  initialdir=ex_folder,                                                  filetypes=[("棋谱文件", ".sgf"), ("棋谱文件", ".gbs"), ("Gobang棋谱文件", ".gbs")]) if gs_file != '': try: with open(gs_file, encoding='utf-8') as f:                 gs_text = f.read() except UnicodeDecodeError: with open(gs_file) as f:                 gs_text = f.read() finally:             step_dict = {}             step_list = re.findall(r"[[']([a-z][a-z])[']]", gs_text) for i in range(len(step_list)):                 step_dict[i + 1] = step_list[i]             score_mode(step_dict) def save_gbs(): # 保存棋谱文件 `gbs` 格式     gbs_data = tkinter.filedialog.asksaveasfile(mode='w',                                                 title="选择棋谱",                                                 initialdir=ex_folder,                                                 defaultextension=".espace",                                                 filetypes=[("Gobang棋谱文件", ".gbs")]) if gbs_data is not None:         gbs_data.write(str(Chess.getStep())) 
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
 官方软件产品操作指南 (170)
官方软件产品操作指南 (170)