Exemplo n.º 1
0
 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
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
    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]
Exemplo n.º 7
0
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)