成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

python實現網絡五子棋

瀏覽:84日期:2022-06-22 16:48:43

本文實例為大家分享了python實現網絡五子棋的具體代碼,供大家參考,具體內容如下

服務器端:

import osimport socketimport threadingfrom tkinter import *from tkinter.messagebox import *def drawQiPan(): for i in range(0, 15):cv.create_line(20, 20 + 40 * i, 580, 20 + 40 * i, width=2) for i in range(0, 15):cv.create_line(20 + 40 * i, 20, 20 + 40 * i, 580, width=2) cv.pack()# 走棋函數def callPos(event): global turn global MyTurn if MyTurn == -1: # 第一次確認自己的角色MyTurn = turn else:if MyTurn != turn: showinfo(title='提示', message='還沒輪到自己下棋') return # print('clicked at',event.x,event.y,true) x = event.x // 40 y = event.y // 40 print('clicked at', x, y, turn) if maps[x][y] != ' ':showinfo(title='提示', message='已有棋子') else:img1 = images[turn]cv.create_image((x * 40 + 20, y * 40 + 20), image=img1)cv.pack()maps[x][y] = str(turn)pos = str(x) + ',' + str(y)sendMessage('move|' + pos)print('服務器走的位置', pos)label1['text'] = '服務器走的位置' + pos# 輸出輸贏信息if win_lose(): if turn == 0:showinfo(title='提示', message='黑方你贏了')sendMessage('over|黑方你贏了') else:showinfo(title='提示', message='白方你贏了')sendMessage('over|白方你贏了')# 換下一方走棋if turn == 0: turn = 1else: turn = 0# 發送消息def sendMessage(pos): global s global addr s.sendto(pos.encode(), addr)# 退出函數def callExit(event): pos = 'exit|' sendMessage(pos) os.exit()# 畫對方棋子def drawOtherChess(x, y): global turn img1 = images[turn] cv.create_image((x * 40 + 20, y * 40 + 20), image=img1) cv.pack() maps[x][y] = str(turn) # 換下一方走棋 if turn == 0:turn = 1 else:turn = 0# 判斷整個棋盤的輸贏def win_lose(): a = str(turn) print('a=', a) for i in range(0, 11):for j in range(0, 11): if maps[i][j] == a and maps[i + 1][j + 1] == a and maps[i + 2][j + 2] == a and maps[i + 3][j + 3] == a and maps[i + 4][j + 4] == a:print('x=y軸上形成五子連珠')return True for i in range(4, 15):for j in range(0, 11): if maps[i][j] == a and maps[i - 1][j + 1] == a and maps[i - 2][j + 2] == a and maps[i - 3][j + 3] == a and maps[i - 4][j + 4] == a:print('x=-y軸上形成五子連珠')return True for i in range(0, 15):for j in range(4, 15): if maps[i][j] == a and maps[i][j - 1] == a and maps[i][j - 2] == a and maps[i][j - 2] == a and maps[i][j - 4] == a:print('Y軸上形成了五子連珠')return True for i in range(0, 11):for j in range(0, 15): if maps[i][j] == a and maps[i + 1][j] == a and maps[i + 2][j] == a and maps[i + 3][j] == a and maps[i + 4][j] == a:print('X軸形成五子連珠')return True return False# 輸出map地圖def print_map(): for j in range(0, 15):for i in range(0, 15): print(maps[i][j], end=’ ’)print(’w’)# 接受消息def receiveMessage(): global s while True: # 接受客戶端發送的消息global addrdata, addr = s.recvfrom(1024)data = data.decode(’utf-8’)a = data.split('|')if not data: print(’client has exited!’) breakelif a[0] == ’join’: # 連接服務器的請求 print(’client 連接服務器!’) label1['text'] = ’client連接服務器成功,請你走棋!’elif a[0] == ’exit’: print(’client對方退出!’) label1['text'] = ’client對方退出,游戲結束!’elif a[0] == ’over’: print(’對方贏信息!’) label1['text'] = data.split('|')[0] showinfo(title='提示', message=data.split('1')[1])elif a[0] == ’move’: print(’received:’, data, ’from’, addr) p = a[1].split(',') x = int(p[0]) y = int(p[1]) print(p[0], p[1]) label1['text'] = '客戶端走的位置' + p[0] + p[1] drawOtherChess(x, y) s.close()def startNewThread(): # 啟動新線程來接受客戶端消息 thread = threading.Thread(target=receiveMessage, args=()) thread.setDaemon(True) thread.start()if __name__ == ’__main__’: root = Tk() root.title('網絡五子棋v2.0-服務器端') images = [PhotoImage(file=’./images/BlackStone.png’), PhotoImage(file=’./images/WhiteStone.png’)] turn = 0 MyTurn = -1 maps = [[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '] for y in range(15)] cv = Canvas(root, bg=’green’, width=610, height=610) drawQiPan() cv.bind('<Button-1>', callPos) cv.pack() label1 = Label(root, text='服務器端...') label1.pack() button1 = Button(root, text='退出游戲') button1.bind('<Button-1>', callExit) button1.pack() # 創建UDP SOCKET s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind((’localhost’, 8000)) addr = (’localhost’, 8000) startNewThread() root.mainloop()客戶端:

from tkinter import *from tkinter.messagebox import *import socketimport threadingimport os# 主程序root = Tk()root.title('網絡五子棋v2.0--UDP客戶端')imgs = [PhotoImage(file=’./images/BlackStone.png’), PhotoImage(file=’./images/WhiteStone.png’)]turn = 0MyTurn = -1# 畫對方棋子def drawOtherChess(x, y): global turn img1 = imgs[turn] cv.create_image((x * 40 + 20, y * 40 + 20), image=img1) cv.pack() maps[x][y] = str(turn) # 換下一方走棋 if turn == 0:turn = 1 else:turn = 0# 發送消息def sendMessage(position): global s s.sendto(position.encode(), (host, port))# 退出函數def callExit(event): position = 'exit|' sendMessage(position) os.exit()# 走棋函數def callback(event): global turn global MyTurn if MyTurn == -1:MyTurn = turn else:if MyTurn != turn: showinfo(title='提示', message='還沒輪到自己走棋') return # print('clicked at',event.x,event.y) x = event.x // 40 y = event.y // 40 print('clicked at', x, y, turn) if maps[x][y] != ' ':showinfo(title='提示', message='已有棋子') else:img1 = imgs[turn]cv.create_image((x * 40 + 20, y * 40 + 20), image=img1)cv.pack()maps[x][y] = str(turn)position = str(x) + ’,’ + str(y)sendMessage('move|' + position)print('客戶端走的位置', position)label1['text'] = '客戶端走的位置' + position# 輸出輸贏信息if win_lose(): if turn == 0:showinfo(title='提示', message='黑方你贏了')sendMessage('over|黑方你贏了!') else:showinfo(title='提示', message='白方你贏了!')sendMessage('over|白方你贏了!')# 換下一方走棋:if turn == 0: turn = 1else: turn = 0# 畫棋盤def drawQiPan(): # 畫棋盤 for i in range(0, 15):cv.create_line(20, 20 + 40 * i, 580, 20 + 40 * i, width=2) for i in range(0, 15):cv.create_line(20 + 40 * i, 20, 20 + 40 * i, 580, width=2) cv.pack()# 輸贏判斷def win_lose(): a = str(turn) print('a=', a) for i in range(0, 11):for j in range(0, 11): if maps[i][j] == a and maps[i + 1][j + 1] == a and maps[i + 2][j + 2] == a and maps[i + 3][j + 3] == a and maps[i + 4][j + 4] == a:print('x=y軸上形成五子連珠')return True for i in range(4, 15):for j in range(0, 11): if maps[i][j] == a and maps[i - 1][j + 1] == a and maps[i - 2][j + 2] == a and maps[i - 3][j + 3] == a and maps[i - 4][j + 4] == a:print('x=-y軸上形成五子連珠')return True for i in range(0, 15):for j in range(4, 15): if maps[i][j] == a and maps[i][j - 1] == a and maps[i][j - 2] == a and maps[i][j - 2] == a and maps[i][j - 4] == a:print('Y軸上形成了五子連珠')return True for i in range(0, 11):for j in range(0, 15): if maps[i][j] == a and maps[i + 1][j] == a and maps[i + 2][j] == a and maps[i + 3][j] == a and maps[i + 4][j] == a:print('X軸形成五子連珠')return True return False# 接受消息def receiveMessage(): # 接受消息 global s while True:data = s.recv(1024).decode(’utf-8’)a = data.split('|')if not data: print(’server has exited!’) breakelif a[0] == ’exit’: print(’對方退出!’) label1['text'] = ’對方退出!游戲結束!’elif a[0] == ’over’: print(’對方贏信息!’) label1['text'] = data.split('|')[0] showinfo(title='提示', message=data.split('|')[1])elif a[0] == ’move’: print(’received:’, data) p = a[1].split(',') x = int(p[0]) y = int(p[1]) print(p[0], p[1]) label1['text'] = '服務器走的位置' + p[0] + p[1] drawOtherChess(x, y) s.close()# 啟動線程接受客戶端消息def startNewThread(): thread = threading.Thread(target=receiveMessage, args=()) thread.setDaemon(True) thread.start()if __name__ == ’__main__’: # 主程序 maps = [[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '] for y in range(15)] cv = Canvas(root, bg=’green’, width=610, height=610) drawQiPan() cv.bind('<Button-1>', callback) cv.pack() label1 = Label(root, text='客戶端...') label1.pack() button1 = Button(root, text='退出游戲') button1.bind('<Button-1>', callExit) button1.pack() # 創建UDP s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) port = 8000 host = ’localhost’ pos = ’join|’ sendMessage(pos) startNewThread() root.mainloop()

游戲執行頁面:

python實現網絡五子棋

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美人妖巨大在线| 国产欧美日韩亚洲一区二区三区| 欧美三级韩国三级日本一级| 亚洲精品国产精品乱码不99| 国产成人鲁色资源国产91色综| 国产日产精品1区| 先锋亚洲精品| 欧美日韩四区| 国产一区二区久久| 亚洲国产另类精品专区| 精品久久久久香蕉网| 色网站国产精品| 激情久久久久久| 不卡在线视频中文字幕| 亚洲视频一区二区在线观看| 欧美日韩五月天| 国产精品日韩| 亚洲午夜激情| 9i看片成人免费高清| 色狠狠色狠狠综合| 在线精品在线| 91女神在线视频| 久久精品国产网站| 国产精品天美传媒| 欧美精品一区二区蜜臀亚洲| 在线一区二区三区| 国产欧美另类| 欧美人成网站| av高清久久久| 欧美aaaaa成人免费观看视频| 久久精品一区四区| 日韩欧美的一区二区| 欧美一a一片一级一片| 日本vs亚洲vs韩国一区三区二区 | 日韩精品视频网| 亚洲h在线观看| 视频一区在线播放| 日本伊人色综合网| 91久久综合| 欧美一区在线看| 91色在线porny| 91在线丨porny丨国产| 91浏览器在线视频| 国产乱子伦视频一区二区三区| 国产做a爰片久久毛片 | 中文字幕一区二区三区视频| 中日韩免费视频中文字幕| 亚洲天堂福利av| 午夜精品福利在线| 精品综合免费视频观看| 国产99精品在线观看| 欧美日韩国产欧| 国产一级一区二区| 欧美影院精品一区| 欧美狂野另类xxxxoooo| 精品国产精品网麻豆系列| 国产亚洲欧美日韩在线一区| 3atv一区二区三区| 久久久国产一区二区三区四区小说| 26uuu另类欧美| 国产亚洲美州欧州综合国 | 成人免费毛片片v| 岛国av在线一区| 99re热视频这里只精品| 国产亚洲亚洲| 久久国产精品久久w女人spa| 国产亚洲激情| 色狠狠一区二区三区香蕉| 亚洲欧美久久久| 在线观看日韩高清av| 欧洲精品一区二区| 国产日韩av一区| 1区2区3区国产精品| 亚洲成人www| 一区二区三区中文字幕电影| 《视频一区视频二区| 亚洲午夜国产一区99re久久| 一区二区三区产品免费精品久久75| 日韩精品一二三四| 极品美女销魂一区二区三区免费| 高清在线观看日韩| 亚洲欧美春色| 欧美精品一区二区三| 久久久.com| 亚洲一二三四区| 日韩vs国产vs欧美| 欧美一区影院| 欧美日本精品一区二区三区| 日韩毛片视频在线看| 国产精品系列在线观看| 欧美日韩精品综合| 欧美高清视频一二三区| 欧美岛国在线观看| 夜色激情一区二区| 国产精品一级片| 国产主播一区| 欧美绝品在线观看成人午夜影视| 国产精品国产自产拍在线| 日产国产欧美视频一区精品| 91一区二区三区在线播放| 亚洲高清久久| 欧美精品一区二区高清在线观看| 亚洲精品久久嫩草网站秘色| 国产麻豆视频精品| 中文一区在线| 欧美一区二区在线播放| 国产精品高潮久久久久无| 裸体一区二区三区| 亚洲黄色一区二区三区| 久久这里只有精品首页| 亚洲va天堂va国产va久| 国产成人av福利| 欧美中文字幕一二三区视频| 久久婷婷综合激情| 久久97超碰色| 国产精品视频| 国产午夜亚洲精品理论片色戒| 老司机午夜精品| 国产亚洲一区二区三区在线播放| 欧美tk—视频vk| 韩国女主播成人在线| 欧美性大战久久| 亚洲伊人伊色伊影伊综合网| 国产91丝袜在线播放九色| 国产午夜精品在线| 亚洲成av人片一区二区三区 | 午夜影视日本亚洲欧洲精品| 91免费精品国自产拍在线不卡| 久久综合九色99| 亚洲成av人片在线| 欧美一级一区| 伊人开心综合网| 成人午夜视频网站| 日韩欧美中文字幕精品| 国产呦萝稀缺另类资源| 欧美午夜电影在线播放| 蜜臀久久99精品久久久久久9| 久久综合久久久| 偷拍亚洲欧洲综合| 免费久久99精品国产自| 最新国产精品久久精品| 91在线无精精品入口| 久久九九99视频| 欧美国产日本| 日本一区二区久久| 欧美精品一区三区在线观看| 国产精品私人自拍| 亚洲美女网站| 美女在线视频一区| 欧美午夜在线一二页| 久久er99热精品一区二区| 久久久久se| 精品无人区卡一卡二卡三乱码免费卡 | 一区二区三区91| 91麻豆.com| 亚洲一二三专区| 欧美日本国产视频| 色综合色综合色综合色综合色综合 | 99视频热这里只有精品免费| 日韩美女视频19| 国产激情一区二区三区| 国产精品亚洲专一区二区三区| 国产精品普通话对白| 成人精品视频一区| 国产精品一区二区黑丝| 亚洲成人久久影院| 亚洲视频一区二区免费在线观看| 欧美tickling网站挠脚心| 噜噜噜91成人网| 欧美视频网站| 国产夫妻精品视频| 日韩高清不卡一区二区| 亚洲欧洲综合另类| 中文字幕 久热精品 视频在线| 在线观看视频91| 亚洲精品乱码| 欧美区日韩区| 99精品偷自拍| 国产a精品视频| 精品一区二区三区香蕉蜜桃| 亚洲成在线观看| 一区二区三区在线免费播放| 国产精品夫妻自拍| 亚洲国产高清在线| 国产精品色哟哟网站| 久久精品夜色噜噜亚洲aⅴ| 91精品久久久久久久91蜜桃| 色婷婷一区二区三区四区| 在线看一区二区| 国产一区二区高清| 波波电影院一区二区三区| 亚洲国产美女搞黄色| 国产女人水真多18毛片18精品视频 | 欧美一区二区成人6969| 色婷婷久久99综合精品jk白丝| 亚洲特级毛片| 99这里只有精品| 欧美日韩一级二级三级| 香蕉国产精品偷在线观看不卡| 国产精品swag|