Remove some code doesn't follow DRY-Rule & Let main client can safely close
This commit is contained in:
parent
62fc412e95
commit
1a68e3b3dd
41
draw.py
41
draw.py
@ -22,22 +22,15 @@ def drawerReceive(sock,screen):
|
||||
if data[0:6] == "[list]":
|
||||
drawUserList(data,screen)
|
||||
|
||||
def sendDraw(sock,nowUserList):
|
||||
white= (255, 255, 255)
|
||||
black= (0, 0, 0)
|
||||
|
||||
pygame.init()
|
||||
pygame.display.set_caption('Mouse Example')
|
||||
size= [1080, 480]
|
||||
screen= pygame.display.set_mode(size)
|
||||
clock= pygame.time.Clock()
|
||||
def sendDraw(sock,nowUserList,screen):
|
||||
screen.fill((255, 255, 255))
|
||||
|
||||
|
||||
|
||||
white= (255, 255, 255)
|
||||
black= (0, 0, 0)
|
||||
clock= pygame.time.Clock()
|
||||
# 開始話user list
|
||||
drawUserList(nowUserList,screen)
|
||||
drawerRecvThreading = threading.Thread(target=drawerReceive,args=(sock,screen))
|
||||
drawerRecvThreading = threading.Thread(target=drawerReceive,args=(sock,screen),daemon=True)
|
||||
drawerRecvThreading.start()
|
||||
# 使系統滑鼠圖標不可見
|
||||
#pygame.mouse.set_visible(False)
|
||||
@ -48,11 +41,11 @@ def sendDraw(sock,nowUserList):
|
||||
|
||||
pygame.display.update()
|
||||
tempPos = ()
|
||||
while True:
|
||||
detectFlag = True
|
||||
while detectFlag:
|
||||
for event in pygame.event.get():
|
||||
if event.type== pygame.QUIT:
|
||||
pygame.quit()
|
||||
sys.exit()
|
||||
detectFlag = False
|
||||
|
||||
# 如果按下滑鼠
|
||||
# get_pressed() 告訴您按下哪個滑鼠按鈕
|
||||
@ -73,6 +66,7 @@ def sendDraw(sock,nowUserList):
|
||||
if(pygame.mouse.get_pos()!=tempPos):
|
||||
sock.send("{}+".format(pygame.mouse.get_pos()).encode('utf-8'))
|
||||
pygame.draw.circle(screen,black,pygame.mouse.get_pos(),5,0)
|
||||
pygame.display.update()
|
||||
tempPos = pygame.mouse.get_pos()
|
||||
|
||||
|
||||
@ -83,10 +77,8 @@ def sendDraw(sock,nowUserList):
|
||||
#pos= (pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1])
|
||||
#pygame.draw.circle(screen, black, pos, 5, 0)
|
||||
|
||||
pygame.display.update()
|
||||
|
||||
clock.tick(30)
|
||||
|
||||
startFlag = True
|
||||
|
||||
def guessInput(screen,sock):
|
||||
@ -112,25 +104,16 @@ def guessInput(screen,sock):
|
||||
screen.blit(pgStringVar,(120,455))# draw font
|
||||
pygame.display.update()
|
||||
|
||||
def receiveDraw(sock):
|
||||
global startFlag
|
||||
def receiveDraw(sock,screen):
|
||||
white= (255, 255, 255)
|
||||
black= (0, 0, 0)
|
||||
|
||||
pygame.init()
|
||||
pygame.display.set_caption('Mouse Example')
|
||||
size= [1080, 480]
|
||||
|
||||
screen= pygame.display.set_mode(size)
|
||||
|
||||
clock= pygame.time.Clock()
|
||||
global startFlag
|
||||
screen.fill((255, 255, 255))
|
||||
pygame.draw.rect(screen,(171, 254, 250),[100,450,500,550],0)
|
||||
pygame.display.update()
|
||||
print("draw start")
|
||||
|
||||
guessThreading = threading.Thread(target=guessInput,args=(screen,sock)) # guest input
|
||||
guessThreading.setDaemon(False)
|
||||
guessThreading = threading.Thread(target=guessInput,args=(screen,sock),daemon=True) # guest input
|
||||
guessThreading.start()
|
||||
|
||||
while startFlag:
|
||||
|
||||
27
main.py
27
main.py
@ -1,5 +1,5 @@
|
||||
import socket,threading,sys,random,multiprocessing,time
|
||||
import draw
|
||||
import draw,pygame
|
||||
import requests,json # Get problem
|
||||
MAX = 1024
|
||||
|
||||
@ -19,7 +19,7 @@ class Server:
|
||||
while True:
|
||||
sock,sockname = listensock.accept()
|
||||
print("{} has connected.".format(sockname))
|
||||
setTypeThread = threading.Thread(target = self.selectType,args=(sock,)) # Create a thread for communicating with client.
|
||||
setTypeThread = threading.Thread(target = self.selectType,args=(sock,),daemon=True) # Create a thread for communicating with client.
|
||||
setTypeThread.start()
|
||||
|
||||
def selectType(self,sock):
|
||||
@ -112,7 +112,7 @@ class Room:
|
||||
allPeerName.append(i.getpeername())
|
||||
for sock in self.sockList:
|
||||
sock.send("[list] {}".format(json.dumps(allPeerName)).encode('utf-8'))
|
||||
receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,))
|
||||
receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,),daemon=True)
|
||||
# 負責與client通信,傳輸遊戲所必須的指令
|
||||
receiveDataThread.start()
|
||||
|
||||
@ -177,6 +177,7 @@ class Client:
|
||||
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
||||
sock.connect((self.ip,self.port))
|
||||
self.setType(sock)
|
||||
sock.close()
|
||||
|
||||
def setType(self,sock):
|
||||
print("Type in 'MAIN' to set a new room\nType in 'CLIENT' to join a room")
|
||||
@ -189,6 +190,7 @@ class Client:
|
||||
# get ROOMNUM and PORTNUM
|
||||
connectData = receiveMsg.split(' ')
|
||||
room = Room(self.ip,int(connectData[1]))
|
||||
sock.close()
|
||||
sock = room.connect() # sock可覆蓋了
|
||||
|
||||
# receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,))
|
||||
@ -202,6 +204,7 @@ class Client:
|
||||
receiveMsg = sock.recv(MAX).decode('utf-8')
|
||||
# Get port number
|
||||
room = Room(self.ip,int(receiveMsg))
|
||||
sock.close()
|
||||
sock = room.connect() # sock可覆蓋了
|
||||
|
||||
# receiveDataThread = threading.Thread(target=self.receiveData,args=(sock,))
|
||||
@ -216,15 +219,28 @@ class Client:
|
||||
userList = sock.recv(1024).decode('utf-8')
|
||||
print("List: ",userList)
|
||||
|
||||
## SET PYGAME
|
||||
pygame.init()
|
||||
pygame.display.set_caption('Mouse Example')
|
||||
size= [1080, 480]
|
||||
screen= pygame.display.set_mode(size)
|
||||
screen.fill((255, 255, 255))
|
||||
pgStringVar = pygame.font.Font(None,25).render("Please wait...",False,(0,0,0))# 文字物件
|
||||
screen.blit(pgStringVar,(500,240))# draw font
|
||||
pygame.display.update()
|
||||
time.sleep(2)
|
||||
|
||||
|
||||
continueFlag = False
|
||||
while not continueFlag:
|
||||
data = sock.recv(1024).decode('utf-8')
|
||||
role = data[1:5]
|
||||
#print("Role: ",role)
|
||||
if role == "prob":
|
||||
draw.sendDraw(sock,userList)
|
||||
draw.sendDraw(sock,userList,screen)
|
||||
continueFlag = True
|
||||
elif role == "gues":
|
||||
draw.receiveDraw(sock)
|
||||
draw.receiveDraw(sock,screen)
|
||||
continueFlag = True
|
||||
elif role == "list":
|
||||
userList = data
|
||||
@ -232,6 +248,7 @@ class Client:
|
||||
continueFlag = False
|
||||
else: #useless position
|
||||
continueFlag = False
|
||||
pygame.quit()
|
||||
# def receiveData(self,sock):
|
||||
# while True:
|
||||
# data = sock.recv(MAX).decode('utf-8')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user