From 9c760b186362862a8e41b1073de310d0088ead9e Mon Sep 17 00:00:00 2001 From: snsd0805 Date: Sat, 20 Jun 2020 01:21:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=BB=91=E9=BC=A0=E5=8F=AF=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E9=81=8B=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- draw.py | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.py | 31 ++++++++++++--------- 2 files changed, 104 insertions(+), 13 deletions(-) create mode 100644 draw.py diff --git a/draw.py b/draw.py new file mode 100644 index 0000000..881ad1f --- /dev/null +++ b/draw.py @@ -0,0 +1,86 @@ +import pygame, sys + + +def sendDraw(sock): + white= (255, 255, 255) + black= (0, 0, 0) + + pygame.init() + pygame.display.set_caption('Mouse Example') + size= [640, 480] + screen= pygame.display.set_mode(size) + clock= pygame.time.Clock() + + # 使系統鼠標圖標不可見 + pygame.mouse.set_visible(False) + + mouseFlag = False + while True: + for event in pygame.event.get(): + if event.type== pygame.QUIT: + pygame.quit() + sys.exit() + + # 如果按下鼠標 + # get_pressed() 告訴您按下哪個鼠標按鈕 + if event.type == pygame.MOUSEBUTTONDOWN: + print ('mouse pressed',pygame.mouse.get_pressed()) + if pygame.mouse.get_pressed()[0]: + mouseFlag = True + # 如果釋放鼠標 + elif event.type == pygame.MOUSEBUTTONUP: + print ('mouse released', pygame.mouse.get_pressed()) + if pygame.mouse.get_pressed()[0] == 0: + mouseFlag = False + # 如果鼠標在運動中 + # get_rel() - 返回自上次調用此函數以來X和Y的移動量 + if event.type == pygame.MOUSEMOTION: + print ('mouse is moving', pygame.mouse.get_pos()) + if mouseFlag: + sock.send("{}+".format(pygame.mouse.get_pos()).encode('utf-8')) + + screen.fill((255, 255, 255)) + + # 在鼠標周圍畫一個圓 + pos= (pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1]) + pygame.draw.circle(screen, black, pos, 10, 0) + + pygame.display.update() + + clock.tick(30) + +def receiveDraw(sock): + white= (255, 255, 255) + black= (0, 0, 0) + + pygame.init() + pygame.display.set_caption('Mouse Example') + size= [640, 480] + + screen= pygame.display.set_mode(size) + + clock= pygame.time.Clock() + print("draw start") + while True: + for event in pygame.event.get(): + if event.type== pygame.QUIT: + pygame.quit() + sys.exit() + data = sock.recv(1024).decode('utf-8') + li = data.split('+') + #print((li)) + for i in li: + if i!="": + screen.fill((255, 255, 255)) + + i = i.lstrip('(') + i = i.rstrip(')') + i = i.replace(',','') + i = i.split(' ') + # 在鼠標周圍畫一個圓 + pos = (int(i[0]),int(i[1])) + print(pos) + pygame.draw.circle(screen, black, pos, 10, 0) + + pygame.display.update() + diff --git a/main.py b/main.py index 0d1f568..e27a462 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,5 @@ import socket,threading,sys,random,multiprocessing,time - +import draw MAX = 1024 class Server: @@ -80,10 +80,9 @@ class Room: while True: sock,sockname = listensock.accept() print("[ {} ]{} has connected.".format(self.portNum,sockname)) - sock.send('WELCOME'.encode('utf-8')) self.sockList.append(sock) # 把sock放入list - + receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,)) receiveDataThread.start() @@ -94,12 +93,13 @@ class Room: return sock def receiveData(self,sock): while True: - data = sock.recv(MAX).decode('utf-8') + origin = sock.recv(MAX) + data = origin.decode('utf-8') if data: print(data) for clientSock in self.sockList: # 遍歷socket list if clientSock != sock: # 不是自己的才傳送資料 - clientSock.send("[{}]:{}".format(sock.getpeername(),data).encode('utf-8')) + clientSock.send(origin) class Client: def __init__(self,ip,port): @@ -123,10 +123,13 @@ class Client: room = Room(self.ip,int(connectData[1])) sock = room.connect() # sock可覆蓋了 - receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,)) - receiveDataThread.start() - sendDataThread = threading.Thread(target=self.sendData,args=(sock,)) - sendDataThread.start() + # receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,)) + # receiveDataThread.start() + # sendDataThread = threading.Thread(target=self.sendData,args=(sock,)) + # sendDataThread.start() + + a = threading.Thread(target=draw.sendDraw,args=(sock,)) + a.start() elif receiveMsg=="OK.CLIENT": roomNum = input("Room Number> ") @@ -135,10 +138,12 @@ class Client: room = Room(self.ip,int(receiveMsg)) sock = room.connect() # sock可覆蓋了 - receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,)) - receiveDataThread.start() - sendDataThread = threading.Thread(target=self.sendData,args=(sock,)) - sendDataThread.start() + # receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,)) + # receiveDataThread.start() + # sendDataThread = threading.Thread(target=self.sendData,args=(sock,)) + # sendDataThread.start() + a = threading.Thread(target=draw.receiveDraw,args=(sock,)) + a.start() else: print("ERROR TYPE")