日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

python實現網絡五子棋

瀏覽:112日期: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 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品99久久久| 亚洲欧洲专区| 国产精品久久久久久久久久白浆 | 美国三级日本三级久久99| 91久久亚洲| 亚洲免费资源| 国产乱码精品一区二区三区四区 | 亚洲69av| 国产精品大片| 日产精品一区二区| 国产精品88久久久久久| 伊人久久大香线蕉av超碰演员| 老司机久久99久久精品播放免费| 蜜桃一区二区三区在线观看| 97久久中文字幕| 国产传媒在线观看| 国产亚洲在线观看| 国产精品丝袜在线播放| 日韩欧美看国产| 三级亚洲高清视频| 国产高清精品二区| 欧美色图国产精品| 日韩精品视频中文字幕| 国产成人免费精品| 日韩午夜一区| 美女毛片一区二区三区四区最新中文字幕亚洲 | 精品久久91| 美女亚洲一区| 日本vs亚洲vs韩国一区三区二区| 丰满少妇一区| 久久亚洲二区| 国产中文欧美日韩在线| 国产精品外国| 精品丝袜久久| 亚洲欧美日韩一区在线观看| 国产欧美69| 亚洲精品一区二区妖精| 免费一区二区三区在线视频| 亚洲福利专区| 欧美日韩一区二区三区四区在线观看| 日韩不卡在线| 国产美女精品视频免费播放软件| 女同性一区二区三区人了人一| 国产精品一区二区精品| 国产高清一区二区| 国产精品久久久网站| 亚洲在线电影| 日韩理论片av| 麻豆国产精品一区二区三区| 视频在线观看国产精品| 国产成人精品亚洲日本在线观看| 日韩欧美在线精品| 香蕉精品视频在线观看| 精品国产一区二区三区av片| 一区二区三区国产在线| 色天使综合视频| 久久99免费视频| 亚洲精品在线国产| 日韩视频一区| 美女一区网站| 国产精品调教| 亚州av一区| 欧美一级专区| 欧美午夜精彩| 中文字幕一区久| 国产在线不卡一区二区三区| 国产日韩视频| 日本aⅴ亚洲精品中文乱码| 亚洲成人精选| 不卡专区在线| 精品日产乱码久久久久久仙踪林| 亚州av一区| 久久av在线| 一本色道久久精品| 亚洲福利精品| 日韩在线二区| 日韩欧美不卡| 欧美日韩免费看片| 麻豆网站免费在线观看| 精品视频高潮| 国产精品久久久久久久久久妞妞| 亚洲2区在线| 亚洲一区二区小说| 久久亚洲电影| 伊人成人网在线看| 1024精品一区二区三区| 成人啊v在线| 伊人久久av| 黄在线观看免费网站ktv| 高清日韩中文字幕| 一区二区精品伦理...| 福利精品一区| 日韩欧美一区二区三区在线视频 | 免费精品视频| 蜜桃av一区二区在线观看| 日韩视频一区| 美女久久一区| 亚洲精品中文字幕99999| 亚洲欧美久久精品| 日本午夜精品久久久| 国产精品亚洲欧美日韩一区在线| 国产精品亚洲欧美| 精品一区二区三区中文字幕视频 | 国产亚洲一区二区三区啪| 日本在线不卡视频| 日韩精品亚洲aⅴ在线影院| 国产人成精品一区二区三| 国产精品美女午夜爽爽| 精品视频99| 日韩大片在线| 欧美日韩中文一区二区| 狠狠爱成人网| 色综合视频一区二区三区日韩 | 视频一区免费在线观看| 免费人成在线不卡| 亚州欧美在线| 国产精品最新自拍| 成人精品视频| 亚洲二区免费| 欧美一级专区| 国产美女撒尿一区二区| 成人一区不卡| 99精品在线观看| 亚洲免费影视| **爰片久久毛片| 麻豆一区二区三区| 99精品视频在线| 欧美日韩国产精品一区二区亚洲| 中文字幕亚洲精品乱码| 国产精品日韩精品中文字幕| 日韩欧美二区| 日韩一区精品视频| 国产精品tv| 午夜精品久久久久久久久久蜜桃| 999国产精品视频| 影音先锋久久精品| 国产视频一区二区在线播放| 麻豆视频观看网址久久| 一区二区三区四区日本视频| 黑丝一区二区三区| 午夜电影一区| 你懂的国产精品永久在线| 精品视频高潮| 久久久一二三| 亚洲乱码视频| 欧美一级鲁丝片| 久久国产精品毛片| 国产精品亲子伦av一区二区三区 | 四虎在线精品| 国产专区精品| 老司机久久99久久精品播放免费| 国产精品欧美在线观看| 精品视频国内| 性色av一区二区怡红| 久久不见久久见中文字幕免费 | 国产精品玖玖玖在线资源| 久久久亚洲一区| 日韩精品一级| 国产一区二区视频在线看| 日韩视频久久| 国产精品成人3p一区二区三区| 四虎影视精品| 人人爱人人干婷婷丁香亚洲| av亚洲一区二区三区| 亚洲aa在线| 综合日韩av| 亚洲精品精选| 欧美一级精品| 久久一区精品| 中文一区一区三区免费在线观 | 黄色网一区二区| 亚洲a成人v| 色黄视频在线观看| 91免费精品国偷自产在线在线| 精品免费av在线| 日本三级亚洲精品| 国产综合视频| 国产aⅴ精品一区二区三区久久| 亚洲免费网址| 日本高清不卡一区二区三区视频| 97久久精品| 中文精品视频| 亚洲a在线视频| 国产精品日本一区二区三区在线 | 青草久久视频| 亚洲女同一区| 一区二区精品伦理...| 国产欧美一区二区三区精品观看| 亚洲综合日韩| 激情婷婷欧美| 丝袜诱惑一区二区| 国产精品大片免费观看| 亚洲九九精品| 在线综合亚洲| 免费精品国产| 999久久久免费精品国产| 久久精品国产久精国产爱| 亚洲一区二区三区中文字幕在线观看| 四虎884aa成人精品最新| 国产精品扒开腿做爽爽爽软件|