Beispiel #1
0
def host(json):
    #sets a game + host player
    try:
        game = {}
        gID = helpers.genID()
        game['gID'] = gID
        game['GO'] = getInitJson()['go']
        game['type'] = json['type']
        game['playersNo'] = 0
        game['turn'] = 1
        game["spect"] = []
        game['lastActivity'] = helpers.getTime()
        game['figurines'] = getFigurinesList()
        game['state'] = 'LOBBY'
        game["lastRoll"] = {}
        game['takenGOOJF'] = {"CommunityChest": False, "Chance": False}
        game['buildings'] = getInitJson()['buildings']
        game['trade'] = {}
        r.setGame(gID, game)

        r.init(gID)

        setInitProperties(gID)
        ret = join(json, gID)
        return ret
    except:
        ret = {}
        ret['error'] = 'host'
        return ret
Beispiel #2
0
def giveGOOJF(gID, uID, deckType):
    player = r.getPlayers(gID)[uID]
    game = r.getGame(gID)
    game['takenGOOJF'][deckType] = True
    player['public']['GOOJF'][deckType] = True
    r.setPlayer(gID, uID, player)
    r.setGame(gID, game)
Beispiel #3
0
def initTrade(gID, uID, playerNumber, jOffer, jFor):
    alert = {}
    alert["boolean"] = False
    game = r.getGame(gID)
    players = r.getPlayers(gID)
    trader = players[uID]
    receiver = None
    _uID = None
    for ID in players:
        if players[ID]['public']['number'] == playerNumber:
            receiver = players[ID]
            _uID = ID

    alert = mCannotTrade(gID, trader, receiver, jOffer, jFor)["boolean"]
    if not alert["boolean"]:
        alert = pCannotTrade(gID, jOffer, jFor)

    if not alert["boolean"]:
        tID = helpers.genID()
        offer = {}
        offer["from"] = {}
        offer["to"] = {}
        offer["from"]["number"] = trader['public']['number']
        offer["from"]["name"] = trader['public']['name']
        offer["to"]["number"] = receiver['public']['number']
        offer["to"]["name"] = receiver['public']['name']
        offer['offered'] = jOffer
        offer['for'] = jFor
        game['trade'][tID] = offer
        trader["trade"]["sent"][tID] = {"pending": receiver["public"]["name"]}
        receiver["trade"]["recieved"] += tID
        r.setPlayer(gID, _uID, receiver)
        r.setPlayer(gID, uID, trader)
        r.setGame(gID, game)
    return alert
Beispiel #4
0
def killPlayer(gID, uID):
    game = r.getGame(gID)
    players = r.getPlayers(gID)
    players[uID]["options"] = []
    players[uID]["state"] = "spect"
    game["spect"].append(players[uID]["public"]["number"])
    r.setGame(gID, game)
    r.setPlayers(gID, players)
Beispiel #5
0
def roll(json):
    # rolling a dice
    gID = json['gID']
    uID = json['uID']
    roll = double_roll()
    game = r.getGame(gID)
    game['lastRoll'] = roll
    r.setGame(gID, game)

    if inJail(gID, uID) and not roll['double']:
        player = r.getPlayers(gID)[uID]
        if player["public"]["jail"]["turn"] == 4:
            alert = payToGOOJ(gID, uID, player)
            if alert["boolean"]:
                #kill player
                pass
            else:
                getOutOfJail(gID, uID)
        if player["public"]["jail"]["turn"] == 3:
            alert = payToGOOJ(gID, uID, player)
            if alert["boolean"]:
                ret = helpers.getReturnData(gID, uID, ["ROLLED"], ['ROLL'],
                                            alert['alert'])
                return ret
            else:
                getOutOfJail(gID, uID)
        if inJail(gID, uID):
            player['public']['jail']['turn'] += 1
            incrementTurn(gID)
            r.setPlayer(gID, uID, player)
            ret = helpers.getReturnData(gID, uID, [], ['ROLL'])
            return ret

    elif inJail(gID, uID) and roll['double']:
        getOutOfJail(gID, uID)

    alert = updateLocation(gID, uID, roll['value'])
    if "card" in alert:
        card = alert["card"]
    else:
        card = False
    if alert['boolean']:
        ret = helpers.getReturnData(gID, uID, [], ['ROLL'], alert['alert'],
                                    card)
        if alert["alert"] == "IN JAIL":
            incrementTurn(gID)
            return ret
        else:
            return ret
    elif "activity" in alert:
        if alert['activity'] == "rent":
            ret = helpers.getReturnData(gID, uID, [], ['ROLL'],
                                        alert['activity'], card)
            incrementTurn(gID)
            return ret
    elif card == False:
        ret = helpers.getReturnData(gID, uID, ["ROLLED"], ['ROLL'])
        return ret
Beispiel #6
0
def incrementTurn(gID):
    # goes to next turn (also accounts for double rolls)
    game = r.getGame(gID)
    if not game['lastRoll']['double']:
        turn = game['turn'] + 1
        if turn > game['playersNo']:
            turn = turn - game['playersNo']
        game['turn'] = turn
        r.setGame(gID, game)
        return True
    else:
        return False
Beispiel #7
0
def declineTrade(gID, uID, tID):
    game = r.getGame(gID)
    players = r.getPlayers(gID)
    player = r.getPlayers(gID)[uID]
    sender = game["trade"][tID]["from"]["number"]
    game["trade"].pop(tID, None)
    r.setGame(gID, game)
    _uID = None
    for ID in players:
        if players[ID]['public']["number"] == sender:
            sender = players[ID]
            _uID = ID
    sender["trade"]["sent"][tID] = {"declined": player["public"]["name"]}
    r.setPlayer(gID, _uID, sender)
Beispiel #8
0
def join(json, gID=None):
    #sets a player
    ret = {}
    if gID == None:
        if "gID" in json:
            gID = json['gID']
        else:
            gID = helpers.getfirstPublicGame()
    try:
        game = r.getGame(gID)
        if game['playersNo'] == 8:
            ret['error'] = 'Game is full. Try again.'
        else:
            game['playersNo'] += 1
            uID = helpers.genID()
            player = {}
            player['uID'] = uID
            player["state"] = "active"
            player['money'] = getInitJson()['startMoney']
            player['options'] = []
            player["trade"] = {}
            player["trade"]["sent"] = {}
            player["trade"]["recieved"] = []
            player['public'] = {}
            player['public']['name'] = json['name']
            player['public']['number'] = game['playersNo']
            player['public']['properties'] = getPlayerPropertiesDict()
            player['public']['GOOJF'] = {
                "CommunityChest": False,
                "Chance": False,
            }
            player['public']['position'] = 0
            player['public']['figurine'] = None
            player['public']['jail'] = {}
            player['public']['jail']['boolean'] = False
            player['public']['jail']['turn'] = 0
            player["canBuy"] = None

            r.setPlayer(gID, uID, player)
            r.setGame(gID, game)
            ret = helpers.getReturnData(gID, uID, ["FIGURINE"])

    except:
        ret['error'] = 'join'
    return ret
Beispiel #9
0
def selectFigurine(json):
    #used in lobby to select players figurine
    game = r.getGames()[json['gID']]

    if json['figurine'] in game['figurines']:

        player = r.getPlayers(json['gID'])[json['uID']]
        player['public']['figurine'] = json['figurine']

        game['figurines'].remove(json['figurine'])
        r.setPlayer(json['gID'], json['uID'], player)
        r.setGame(json['gID'], game)

        ret = helpers.getReturnData(json['gID'], json['uID'], [], ["FIGURINE"])
    else:
        ret = {}
        ret['error'] = 'figurine'
    return ret
Beispiel #10
0
def game(json):
    ret = {'error': 'game'}
    isTurn = checkTurn(json['gID'], json['uID'])
    if r.validateUID(json['gID'], json['uID']):
        if json['request'] == "PING":
            ret = ping(json, isTurn)
        if json['request'] == "CHAT":
            ret = chat(json)

        elif isTurn and json['request'] in r.getPlayers(
                json['gID'])[json['uID']]['options']:
            if "ROLLED" not in r.getPlayers(json['gID'])[
                    json['uID']]['options'] and json['request'] == "ROLL":
                ret = roll(json)
            elif json['request'] == 'BUY':
                ret = buy(json)
            elif json['request'] == 'AUCTION':
                ret = auction(json)

        elif json['request'] == 'MORTGAGE':
            ret = mortgage(json)
        elif json['request'] == "BUILD":
            ret = build(json)
        elif json['request'] == 'SELL':
            ret = build(json, True)
        elif json['request'] == 'TRADE':
            ret = trade(json)
        elif json['request'] == 'GOOJF':
            ret = getOutOfJail(json['gID'], json['uID'], True)
        elif json['request'] == 'PAYMORT':
            ret = payMort(json)
        elif json["request"] == "PGOOJ":
            ret = payGetOutOfJail(json['gID'], json['uID'])

        if gameOver(json['gID']):
            game = r.getGame(json['gID'])
            game['state'] = "FINISHED"
            r.setGame(json["gID"], game)

        return ret
Beispiel #11
0
def start(json):
    #initialises the board and starts the game
    gID = json['gID']
    uID = json['uID']
    if canStart(gID, uID):
        game = r.getGame(gID)
        game['state'] = "PLAYING"
        r.setGame(gID, game)
        _start(gID)

        players = r.getPlayers(
            gID)  #add the default options for the PLAYING state to all players
        for _uID in players:
            players[_uID]["options"].append("TRADE")
            players[_uID]["options"].append("MORTGAGE")
        r.setPlayers(gID, players)

        ret = helpers.getReturnData(gID, uID, ["ROLL"], ["START"])
    else:
        ret = {}
        ret['error'] = "START"
    return ret
Beispiel #12
0
 def close():
     if hBidder == None or int(hBidder) == 0:
         for _uID in players:
             players[_uID]['options'].remove("BID")
             if "AUCTION" in players[_uID]["options"]:
                 players[_uID]['options'].remove("AUCTION")
             if "BUY" in players[_uID]["options"]:
                 players[_uID]['options'].remove("BUY")
                 players[_uID]["canBuy"] = None
         r.setPlayers(gID, players)
         game['state'] = "PLAYING"
         r.setGame(gID, game)
         incrementTurn(gID)
         return helpers.getReturnData(gID, uID)
     if int(hBidder) != 0:
         payUID = None
         for _uID in players:
             if players[_uID]["public"]["number"] == int(hBidder):
                 payUID = _uID
                 break
         alert = pay(gID, payUID, 0, hBidAmount)
         if not alert['boolean']:
             deed = r.getDeeds(gID)[game['auction']['pID']]
             giveProperty(gID, payUID, deed)
             for _uID in players:
                 players[_uID]['options'].remove("BID")
                 if "AUCTION" in players[_uID]["options"]:
                     players[_uID]['options'].remove("AUCTION")
                 if "BUY" in players[_uID]["options"]:
                     players[_uID]['options'].remove("BUY")
                     players[_uID]["canBuy"] = None
             r.setPlayers(gID, players)
             game['state'] = "PLAYING"
             r.setGame(gID, game)
             incrementTurn(gID)
             return helpers.getReturnData(gID, uID)
         else:
             return helpers.getReturnData(gID, uID, [], [],
                                          alert['alert'])
Beispiel #13
0
def auction(json):
    # moves the game state into an auction for 30 seconds
    gID = json['gID']
    uID = json['uID']
    players = r.getPlayers(gID)
    player = players[uID]
    pID = json["pID"]
    if player["canBuy"] == pID:
        deed = r.getDeeds(gID)[pID]
        for _uID in players:
            players[_uID]['options'] += ["BID"]
            r.setPlayer(gID, _uID, players[_uID])
        game = r.getGame(gID)
        game['auction'] = {}
        game['auction']['pID'] = pID
        game['auction']['highest'] = {0: deed['price'] / 2}
        game['auction']['out'] = []
        game['lastActivity'] = helpers.getTime()
        game['state'] = "AUCTION"
        r.setGame(gID, game)
        ret = helpers.getReturnData(gID, uID, [], ["AUCTION", "BUY"])
        return ret
Beispiel #14
0
def getOutOfJail(gID, uID, card=False):
    ret = None
    if card:
        player = r.getPlayers(gID)[uID]
        if inJail(gID, uID) and (player['public']['GOOJF']['CommunityChest']
                                 or player['public']['GOOJF']['Chance']):
            deck = None
            if player['public']['GOOJF']['CommunityChest']:
                deck = "CommunityChest"
            elif player['public']['GOOJF']['Chance']:
                deck = "Chance"
            player['public']['GOOJF'][deck] = False
            game = r.getGame(gID)
            game['takenGOOJF'][deck] = False
            r.setGame(gID, game)
            ret = helpers.getReturnData(gID, uID)
        else:
            ret = helpers.getReturnData(gID, uID, [], [], "INVALID USE")
    player = r.getPlayers(gID)[uID]
    player['public']['jail']['boolean'] = False
    player['public']['jail']['turn'] = 0
    r.setPlayer(gID, uID, player)
    if card:
        return ret
Beispiel #15
0
def getReturnData(gID,
                  uID,
                  optionsToAdd=[],
                  optionsToRemove=[],
                  alert={},
                  card=False):
    ret = {}
    game = r.getGame(gID)
    players = r.getPlayers(gID)
    player = players[uID]

    ret['players'] = {}
    for _uID in players:
        ret['players'][players[_uID]['public']
                       ['name']] = players[_uID]['public']

    if game['state'] != "LOBBY":
        ret['board'] = r.getBoard(gID)
        ret['deeds'] = r.getDeeds(gID)

        ret["chat"] = r.getChat(gID)

        ret["trade"] = {}
        if len(player["trade"]["recieved"]) > 0:
            ret["trade"]["recieved"] = player["trade"]["recieved"][0]

        if len(player["trade"]["sent"]) > 0:
            for tID in player["trade"]["sent"]:
                if player["trade"]["sent"][tID] == "declined":
                    game["trade"].pop(tID, None)
                    ret["trade"]["sent"] = player["trade"]["sent"][tID][
                        "declined"] + "declined your trade offer"
                    player["trade"]["sent"].pop(tID, None)
                    r.setPlayer(gID, uID, player)
                    r.setGame(gID, game)
                    break
                if player["trade"]["sent"][tID] == "accepted":
                    game["trade"].pop(tID, None)
                    ret["trade"]["sent"] = player["trade"]["sent"][tID][
                        "accepted"] + "accepted your trade offer"
                    player["trade"]["sent"].pop(tID, None)
                    r.setPlayer(gID, uID, player)
                    r.setGame(gID, game)
                    break

    if len(optionsToAdd) + len(optionsToRemove) > 0:
        for option in optionsToAdd:
            if option not in player['options']:
                player['options'] += [option]
        for option in optionsToRemove:
            try:
                if option == "BUY":
                    player["canBuy"] = None
                player['options'].remove(option)
            except:
                pass
        r.setPlayer(gID, uID, player)

    ret['options'] = player['options']
    if len(alert) != 0:
        ret['alert'] = alert
    if card:
        ret['card'] = card

    ret['game'] = game
    ret['player'] = player
    # if game['state'] != "LOBBY" and (game["turn"] == player["public"]["number"]):
    #     print ("Return Data")
    #     print("name: " + player["public"]["name"])
    #     print("turn: " + str(game["turn"]))
    #     print("options: " + str(ret['options']))
    #     if "card" in ret:
    #         print (card['type'])
    #     if 'alert' in ret:
    #         print (alert)
    #     print("")
    return ret
Beispiel #16
0
def bid(json):
    gID = json['gID']
    uID = json['uID']
    if r.validateUID(json['gID'], json['uID']):
        game = r.getGame(gID)
        players = r.getPlayers(gID)
        player = players[uID]
        hBidder = None
        for key in game['auction']['highest']:
            hBidder = key
        hBidAmount = game['auction']['highest'][hBidder]

        def close():
            if hBidder == None or int(hBidder) == 0:
                for _uID in players:
                    players[_uID]['options'].remove("BID")
                    if "AUCTION" in players[_uID]["options"]:
                        players[_uID]['options'].remove("AUCTION")
                    if "BUY" in players[_uID]["options"]:
                        players[_uID]['options'].remove("BUY")
                        players[_uID]["canBuy"] = None
                r.setPlayers(gID, players)
                game['state'] = "PLAYING"
                r.setGame(gID, game)
                incrementTurn(gID)
                return helpers.getReturnData(gID, uID)
            if int(hBidder) != 0:
                payUID = None
                for _uID in players:
                    if players[_uID]["public"]["number"] == int(hBidder):
                        payUID = _uID
                        break
                alert = pay(gID, payUID, 0, hBidAmount)
                if not alert['boolean']:
                    deed = r.getDeeds(gID)[game['auction']['pID']]
                    giveProperty(gID, payUID, deed)
                    for _uID in players:
                        players[_uID]['options'].remove("BID")
                        if "AUCTION" in players[_uID]["options"]:
                            players[_uID]['options'].remove("AUCTION")
                        if "BUY" in players[_uID]["options"]:
                            players[_uID]['options'].remove("BUY")
                            players[_uID]["canBuy"] = None
                    r.setPlayers(gID, players)
                    game['state'] = "PLAYING"
                    r.setGame(gID, game)
                    incrementTurn(gID)
                    return helpers.getReturnData(gID, uID)
                else:
                    return helpers.getReturnData(gID, uID, [], [],
                                                 alert['alert'])

        if not helpers.checkTime(game['lastActivity'], 30, True):
            return close()

        elif json['request'] == "PING":
            pass

        elif json['request'] == "BID" and player['public'][
                'number'] not in game['auction']['out']:
            if (json['amount'] > hBidAmount) and (json['amount'] <=
                                                  player['money']):
                newBid = {player['public']['number']: json['amount']}
                game['auction']['highest'] = newBid
                r.setGame(json['gID'], game)
            else:
                return helpers.getReturnData(gID, uID, [], [],
                                             "INSUFFICIENT FUNDS")

        elif json['request'] == "OUT":
            if hBidder != player['public']['number']:
                game['auction']['out'].append(player['public']['number'])
                r.setGame(json['gID'], game)
                if len(game['auction']['out']) >= game['playersNo'] - 1 - len(
                        game['spect']):
                    return close()

        return helpers.getReturnData(gID, uID)