电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋

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

本文實(shí)例為大家分享了python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋的具體代碼,供大家參考,具體內(nèi)容如下

服務(wù)器端:

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()# 走棋函數(shù)def callPos(event): global turn global MyTurn if MyTurn == -1: # 第一次確認(rèn)自己的角色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('服務(wù)器走的位置', pos)label1['text'] = '服務(wù)器走的位置' + 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# 發(fā)送消息def sendMessage(pos): global s global addr s.sendto(pos.encode(), addr)# 退出函數(shù)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: # 接受客戶端發(fā)送的消息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’: # 連接服務(wù)器的請求 print(’client 連接服務(wù)器!’) label1['text'] = ’client連接服務(wù)器成功,請你走棋!’elif a[0] == ’exit’: print(’client對方退出!’) label1['text'] = ’client對方退出,游戲結(jié)束!’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('網(wǎng)絡(luò)五子棋v2.0-服務(wù)器端') 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='服務(wù)器端...') label1.pack() button1 = Button(root, text='退出游戲') button1.bind('<Button-1>', callExit) button1.pack() # 創(chuàng)建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('網(wǎng)絡(luò)五子棋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# 發(fā)送消息def sendMessage(position): global s s.sendto(position.encode(), (host, port))# 退出函數(shù)def callExit(event): position = 'exit|' sendMessage(position) os.exit()# 走棋函數(shù)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'] = ’對方退出!游戲結(jié)束!’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'] = '服務(wù)器走的位置' + 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() # 創(chuàng)建UDP s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) port = 8000 host = ’localhost’ pos = ’join|’ sendMessage(pos) startNewThread() root.mainloop()

游戲執(zhí)行頁面:

python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 农业仪器网 - 中国自动化农业仪器信息交流平台 | 视频教程导航网_视频教程之家_视频教程大全_最新视频教程分享发布平台 | 牛皮纸|牛卡纸|进口牛皮纸|食品级牛皮纸|牛皮纸厂家-伽立实业 | 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 温湿度记录纸_圆盘_横河记录纸|霍尼韦尔记录仪-广州汤米斯机电设备有限公司 | 智能交通网_智能交通系统_ITS_交通监控_卫星导航_智能交通行业 | 隆众资讯-首页_大宗商品资讯_价格走势_市场行情 | 亳州网络公司 - 亳州网站制作 - 亳州网站建设 - 亳州易天科技 | 写方案网_方案策划方案模板下载| 宝鸡市人民医院 | TPU薄膜_TPU薄膜生产厂家_TPU热熔胶膜厂家定制_鑫亘环保科技(深圳)有限公司 | 上海佳武自动化科技有限公司| 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 震动筛选机|震动分筛机|筛粉机|振筛机|振荡筛-振动筛分设备专业生产厂家高服机械 | 升降机-高空作业车租赁-蜘蛛车-曲臂式伸缩臂剪叉式液压升降平台-脚手架-【普雷斯特公司厂家】 | 杰福伦_磁致伸缩位移传感器_线性位移传感器-意大利GEFRAN杰福伦-河南赉威液压科技有限公司 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 自动记录数据电子台秤,记忆储存重量电子桌称,设定时间记录电子秤-昆山巨天 | 微学堂-电动能源汽车评测_电动车性能分享网 | 电缆接头_防水接头_电缆防水接头 - 乐清市新豪电气有限公司 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | CPSE安博会| 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 无缝钢管-聊城无缝钢管-小口径无缝钢管-大口径无缝钢管 - 聊城宽达钢管有限公司 | 心肺复苏模拟人|医学模型|急救护理模型|医学教学模型上海康人医学仪器设备有限公司 | 火锅底料批发-串串香技术培训[川禾川调官网] | Jaeaiot捷易科技-英伟达AI显卡模组/GPU整机服务器供应商 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 湖南档案密集架,智能,物证,移动,价格-湖南档案密集架厂家 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 大倾角皮带机-皮带输送机-螺旋输送机-矿用皮带输送机价格厂家-河南坤威机械 | 北京网站建设|北京网站开发|北京网站设计|高端做网站公司 | 上海心叶港澳台联考一对一培训_上海心叶港澳台联考,港澳台联考一对一升学指导 | 【德信自动化】点胶机_全自动点胶机_自动点胶机厂家_塑料热压机_自动螺丝机-深圳市德信自动化设备有限公司 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 潍坊大集网-潍坊信息港-潍坊信息网| 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 |