def correct(self, email, word): wordDB = gameInfoCol.find()[0]["word"] drawerDB = gameInfoCol.find()[0]["drawer"] if word == wordDB and email != drawerDB: return True else: return False
def save(data): email = data[1] img = data[0] if len(gameInfoCol.find()[0]["word"]) > 1: if imageCol.find({"email": email}).count() > 0: imageCol.update( {"email": email}, {"$push": { "images": [img, gameInfoCol.find()[0]["word"]] }}) else: image_data = { "email": email, "images": [[img, gameInfoCol.find()[0]["word"]]] } imageCol.insert_one(image_data)
def game(data): if data[0] == "disconnectGame": lobby_manager.updateStatus(data[0], data[1]) #ok if len(lobby_manager.members(2)) < 2: lobby_manager.endGame() #ok emit('receiveChat', lobby_manager.updateChat('System', 'Not enough players, game stopped'), broadcast=True) #ok emit('endGame', None, broadcast=True) #ok elif data[0] == "connectGame": lobby_manager.updateStatus(data[0], data[1]) #get points in format [email, points] p = lobby_manager.getPoints() #ok drawer = gameInfoCol.find()[0]["drawer"] #ok word = gameInfoCol.find()[0]["word"] #ok emit('gameUsers', [lobby_manager.members(2), drawer, word, p], broadcast=True)
def updateChat(self, email, msg): if msg: gameInfoCol.update({}, { "$push": { "gameChat": [email, msg] } }) msg = gameInfoCol.find()[0]["gameChat"] if len(msg) > 100: msg = msg.copy()[5:] return msg
def nextD(nothing): if (lobby_manager.winner == False and len(lobby_manager.members(2)) > 1): lobby_manager.winner = True sec = 5 lobby_manager.newRound() while sec > 0 and len(lobby_manager.members(2)) > 1: emit('receiveChat', lobby_manager.updateChat( 'System', 'The next game will start in {}'.format(sec)), broadcast=True) sec -= 1 sleep(1) lobby_manager.winner = False emit('newDrawer', lobby_manager.newDrawer(), broadcast=True) emit('receiveChat', lobby_manager.updateChat(None, None), broadcast=True) gRound = gameInfoCol.find()[0]["round"] nGame = True time = 30 while gRound == gameInfoCol.find()[0]["round"] and time > -1 and len( lobby_manager.members(2)) > 1: if time == -1: nGame = True break if gRound != gameInfoCol.find()[0]["round"]: nGame = False break if len(lobby_manager.members(2)) < 2: break sleep(1) emit('timerLeft', time, broadcast=True) #emit('receiveChat', lobby_manager.updateChat('System', "timer going newDrawer," + str(gRound) + ", " + str(lobby_manager.gameStatus["round"])), broadcast = True) time -= 1 if nGame and gRound == gameInfoCol.find()[0]["round"]: emit('receiveChat', lobby_manager.updateChat('System', "Timer's up!"), broadcast=True) emit('timerUp', None, broadcast=True)
def newDrawer(self): greater_than = usersCol.find({"status": 2}).count() if greater_than > 1: inGame = [] result_2 = usersCol.find({"status": 2}) for u in result_2: inGame.append(u["email"]) resultGameAll = gameInfoCol.find() drawer = resultGameAll[0]["drawer"] if drawer != None: #New drawer from running game index = inGame.index(drawer) if index + 1 == len(inGame): index = 0 else: index += 1 newDrawer = inGame[index] drawer = newDrawer gameInfoCol.update({}, { "$set": { "drawer": newDrawer } }) else: #New drawer from new game gameInfoCol.update({}, { "$set": { "drawer": inGame[0], "status": True, } }) drawer = gameInfoCol.find()[0]["drawer"] prevWordsList = [] if len(resultGameAll[0]["prevWords"]) == 3: newPrev = (resultGameAll[0]["prevWords"][:2]).copy() gameInfoCol.update({}, { "$set": { "prevWords": newPrev } }) prevWordsList = newPrev result = wordListCol.find() n = result[0]["words"] r = random.randint(0, len(n) - 1) while n[r] in prevWordsList: r = random.randint(0, len(n) - 1) word = n[r] prevWordsList.append(word) gameInfoCol.update({}, { "$set": { "prevWords": prevWordsList, "word": word }, "$push": { "gameChat": { "$each": [['System', 'New game is starting'], ['System', drawer + ' is the new drawer!']] } } }) return [drawer, word]
def nextC(data): #data is {email: chat} if data: sec = 5 player = usersCol.find({"email": data[0]}) stat = '' for n in player: stat = n["status"] if lobby_manager.correct( data[0], data[1]) and (data[0] != gameInfoCol.find()[0]["drawer"]) and ( stat == 2) and lobby_manager.winner == False and len( lobby_manager.members(2)) > 1: usersCol.update({"email": data[0]}, {"$inc": {"points": 75}}) usersCol.update({"email": gameInfoCol.find()[0]["drawer"]}, {"$inc": { "points": 100 }}) lobby_manager.winner = True lobby_manager.newRound() emit('receiveChat', lobby_manager.updateChat( 'System', data[0] + ' has found the answer of "' + gameInfoCol.find()[0]["word"] + '"!'), broadcast=True) while sec > 0 and len(lobby_manager.members(2)) > 1: emit('receiveChat', lobby_manager.updateChat( 'System', 'The next game will start in {}'.format(sec)), broadcast=True) sec -= 1 sleep(1) emit('newDrawer', lobby_manager.newDrawer(), broadcast=True) emit('receiveChat', lobby_manager.updateChat(None, None), broadcast=True) gRound = gameInfoCol.find()[0]["round"] nGame = True time = 30 lobby_manager.winner = False while gRound == gameInfoCol.find( )[0]["round"] and time > -1 and len(lobby_manager.members(2)) > 1: if time == -1: nGame = True break if gRound != gameInfoCol.find()[0]["round"]: nGame = False break if len(lobby_manager.members(2)) < 2: break sleep(1) emit('timerLeft', time, broadcast=True) #emit('receiveChat', lobby_manager.updateChat('System', "timer going lobbyChat," + str(gRound) + ", " + str(lobby_manager.gameStatus["round"])), broadcast = True) time -= 1 if nGame and gRound == gameInfoCol.find()[0]["round"]: emit('receiveChat', lobby_manager.updateChat('System', "Timer's up!"), broadcast=True) emit('timerUp', None, broadcast=True) else: emit('receiveChat', lobby_manager.updateChat(data[0], data[1]), broadcast=True) else: emit('receiveChat', lobby_manager.updateChat(None, None), broadcast=True)