Beta 0.1 Clients can start the game in turn

This commit is contained in:
snsd0805 2020-06-29 04:35:23 +08:00
parent 5ac4e377a5
commit f8fb53fca5
2 changed files with 42 additions and 24 deletions

41
draw.py
View File

@ -1,5 +1,5 @@
import pygame, sys,threading import pygame, sys,threading
import json import json,time
def drawUserList(nowUserList,screen): def drawUserList(nowUserList,screen):
listSTR = nowUserList[7:] listSTR = nowUserList[7:]
@ -21,7 +21,10 @@ def drawerReceive(sock,screen):
data = sock.recv(1024).decode('utf-8') data = sock.recv(1024).decode('utf-8')
if data[0:6] == "[list]": if data[0:6] == "[list]":
drawUserList(data,screen) drawUserList(data,screen)
elif data == "restart":
print("restart")
break
print("drawerRECEIVE CLOSED")
def sendDraw(sock,nowUserList,screen,problem): def sendDraw(sock,nowUserList,screen,problem):
# Set white background # Set white background
@ -49,11 +52,11 @@ def sendDraw(sock,nowUserList,screen,problem):
pygame.display.update() pygame.display.update()
tempPos = () tempPos = ()
detectFlag = True #detectFlag = True
while detectFlag: print("可以開始畫圖")
while True:
for event in pygame.event.get(): for event in pygame.event.get():
if event.type== pygame.QUIT: if event.type== pygame.QUIT:
detectFlag = False
return True return True
# 如果按下滑鼠 # 如果按下滑鼠
@ -65,7 +68,9 @@ def sendDraw(sock,nowUserList,screen,problem):
# 100,400,50,20 # 100,400,50,20
if pos[0]>=100 and pos[0]<=150 and pos[1]>=400 and pos[1]<=420: if pos[0]>=100 and pos[0]<=150 and pos[1]>=400 and pos[1]<=420:
sock.send("[restart]".encode('utf-8')) sock.send("[restart]".encode('utf-8'))
detectFlag = False #if data == 'restart':
time.sleep(1) #drawerReceive
#detectFlag = False
return False return False
#print("restart") #print("restart")
mouseFlag = True mouseFlag = True
@ -95,8 +100,11 @@ def sendDraw(sock,nowUserList,screen,problem):
clock.tick(30) clock.tick(30)
startFlag = True print("停止畫圖")
startFlag = True
def guessInput(screen,sock): def guessInput(screen,sock):
global startFlag global startFlag
guessStr = "" guessStr = ""
@ -121,9 +129,12 @@ def guessInput(screen,sock):
pygame.display.update() pygame.display.update()
def receiveDraw(sock,screen): def receiveDraw(sock,screen):
global startFlag
print("進入receiveDraw")
print(startFlag)
white= (255, 255, 255) white= (255, 255, 255)
black= (0, 0, 0) black= (0, 0, 0)
global startFlag
screen.fill((255, 255, 255)) screen.fill((255, 255, 255))
pygame.draw.rect(screen,(171, 254, 250),[100,450,500,550],0) pygame.draw.rect(screen,(171, 254, 250),[100,450,500,550],0)
pygame.display.update() pygame.display.update()
@ -136,13 +147,15 @@ def receiveDraw(sock,screen):
data = sock.recv(1024).decode('utf-8') data = sock.recv(1024).decode('utf-8')
if data == 'exitok': if data == 'exitok':
startFlag = False startFlag = False
pygame.quit() return True
sys.exit()
elif data[0:6] == "[list]": elif data[0:6] == "[list]":
drawUserList(data,screen) drawUserList(data,screen)
continue continue
elif data == 'restart':
startFlag = False
time.sleep(0.5)
startFlag = True
return False
#print(data) #print(data)
li = data.split('+') # 送來的座標可能一次有多個,規範以+隔開 li = data.split('+') # 送來的座標可能一次有多個,規範以+隔開
for i in li: for i in li:
@ -159,5 +172,5 @@ def receiveDraw(sock,screen):
# pygame.draw.circle(screen, black, pos, 5, 0) # pygame.draw.circle(screen, black, pos, 5, 0)
pygame.draw.circle(screen,black,pos,5,0) pygame.draw.circle(screen,black,pos,5,0)
pygame.display.update() pygame.display.update()
sock.close() startFlag = True
print("退出receiveDraw")

25
main.py
View File

@ -122,12 +122,13 @@ class Room:
def game(self): def game(self):
mainSocket = random.choice(self.sockList) mainSocket = random.choice(self.sockList)
time.sleep(4)
print("GAME SEND PROBLEM") print("GAME SEND PROBLEM")
for sock in self.sockList: for clientSock in self.sockList:
if sock == mainSocket: if clientSock == mainSocket:
sock.send('[prob] {}'.format(self.problem).encode('utf-8')) clientSock.send('[prob] {}'.format(self.problem).encode('utf-8'))
else: else:
sock.send('[gues]'.encode('utf-8')) clientSock.send('[gues]'.encode('utf-8'))
def connect(self): def connect(self):
time.sleep(0.5) time.sleep(0.5)
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
@ -152,7 +153,10 @@ class Room:
clientSock.send(origin) clientSock.send(origin)
elif data=='[restart]': # [restart] elif data=='[restart]': # [restart]
print('game restart') print('game restart')
time.sleep(4) time.sleep(1)
for clientSock in self.sockList:
clientSock.send('restart'.encode('utf-8'))
self.game() #restart self.game() #restart
else: # it is from other client. He/she want to send answer to check the answer else: # it is from other client. He/she want to send answer to check the answer
@ -230,29 +234,30 @@ class Client:
screen= pygame.display.set_mode(size) screen= pygame.display.set_mode(size)
continueFlag = False continueFlag = False
while not continueFlag: while not continueFlag:
screen.fill((255, 255, 255)) screen.fill((255, 255, 255))
pgStringVar = pygame.font.Font(None,25).render("Please wait...",False,(0,0,0))# 文字物件 pgStringVar = pygame.font.Font(None,25).render("Please wait...",False,(0,0,0))# 文字物件
screen.blit(pgStringVar,(500,240))# draw font screen.blit(pgStringVar,(500,240))# draw font
pygame.display.update() pygame.display.update()
time.sleep(1)
print("START RECEIVE.") print("START RECEIVE.")
data = sock.recv(1024).decode('utf-8') data = sock.recv(1024).decode('utf-8')
role = data[1:5] role = data[1:5]
problem = data.split(' ')[1]
print("Role: ",role) print("Role: ",role)
if role == "prob": if role == "prob":
problem = data.split(' ')[1]
continueFlag = draw.sendDraw(sock,userList,screen,problem) continueFlag = draw.sendDraw(sock,userList,screen,problem)
elif role == "gues": elif role == "gues":
draw.receiveDraw(sock,screen) continueFlag = draw.receiveDraw(sock,screen)
continueFlag = True
elif role == "list": elif role == "list":
userList = data userList = data
print("List: ",userList) print("List: ",userList)
continueFlag = False continueFlag = False
else: #useless position else: #useless position
continueFlag = False continueFlag = False