Пример #1
0
def load_game(filename):
    """Load a previously-saved game."""
    global currentplayer, phase, currentplayernum
    if phase != "Pregame":
        riskgui.set_status("You have already started a game")
        return
    
    savefile = open(filename)
    while savefile.readline() == "player\n":
        plname = savefile.readline().strip()
        plarmies = int(savefile.readline().strip())
        plconquered = int(savefile.readline().strip())
        cards = []
        currentline = savefile.readline()
        while currentline != "endplayer\n" and currentline != "ai\n":
            nline = savefile.readline().strip()
            cards.append(Card(currentline.strip(),nline))
            currentline = savefile.readline()
        ainame = None
        if currentline == "ai\n":
            ainame = savefile.readline().strip()
            aidatalen = int(savefile.readline().strip())
            aidata = savefile.read(aidatalen)
            savefile.readline()
        if not players.has_key(plname):
            if ainame and not os.path.exists(ainame):
                riskgui.set_status("AI " + ainame + " nonexistent")
                ainame = None
            riskgui.makeplayercolors(makeplayer(plname, ainame))
            if ainame:
                players[plname].ai.loaddata(aidata)
        players[plname].freeArmies = plarmies
        players[plname].conqueredTerritory = plconquered
        players[plname].cards = cards
        playerorder.append(players[plname])
    riskgui.relistplayers(playerorder)
    currentplayer = players[savefile.readline().strip()]
    currentplayernum = playerorder.index(currentplayer)
    riskgui.set_armies(currentplayer.freeArmies)
    riskgui.playersturn(currentplayer.name)
    setphase(savefile.readline().strip())
    
    while savefile.readline().strip() == "territory":
        tname = savefile.readline().strip()
        tplayer = savefile.readline().strip()
        if tplayer == "None":
            tplayer = None
        else:
            tplayer = players[tplayer]
        territories[tname].player = tplayer
        territories[tname].armies = int(savefile.readline().strip())
        riskgui.drawterritory(territories[tname], 0)
        savefile.readline()
    
    while 1:
        cardterr = savefile.readline().strip()
        if not cardterr:
            break
        allcards.append(Card(cardterr,savefile.readline().strip()))
    savefile.close()
Пример #2
0
def startgame():
    """Start off the game."""
    global playerorder, currentplayer
    
    if phase != "Pregame":
        return False
    if len(players) < 2:
        riskgui.set_status("Not enough players")
        return False
    if len(players) > 6:
        riskgui.set_status("Too many players - 6 maximum")
        return False
    
    setphase("Preposition")
    
    createcards()
    for pl in players.values():
        pl.freeArmies = 50 - 5 * len(players)
    playerorder = players.values()[:]
    random.shuffle(playerorder)
    currentplayer = playerorder[0]
    riskgui.relistplayers(playerorder)
    riskgui.playersturn(currentplayer.name)
    riskgui.set_armies(currentplayer.freeArmies)
    
    while currentplayer.ai is not None and currentplayer.freeArmies > 0:
        currentplayer.ai.run_preplace(currentplayer)
        rotateplayers()
        riskgui.set_armies(currentplayer.freeArmies)
    
    if currentplayer.ai is not None:
        resetturn()
        nextturn()
    
    return True
Пример #3
0
def rotateplayers():
    """Set currentplayer to the next player."""
    global currentplayer, currentplayernum
    currentplayernum += 1
    if currentplayernum >= len(playerorder):
        currentplayernum = 0
    currentplayer = playerorder[currentplayernum]
    riskgui.playersturn(currentplayer.name)
Пример #4
0
def rotateplayers():
    """Set currentplayer to the next player."""
    global currentplayer, currentplayernum
    currentplayernum += 1
    if currentplayernum >= len(playerorder):
        currentplayernum = 0
    currentplayer = playerorder[currentplayernum]
    riskgui.playersturn(currentplayer.name)
Пример #5
0
def client_receive_message(mess, sock):
    """Run when the client receives a message."""
    global clplayer, am_client
    print >>riskengine.verbosefile, mess, "client received"
    parts = splitparms(mess)
    if parts[0] == "draw_army" or parts[0] == "draw_territory":
        terr = riskengine.territories[parts[1]]
        terr.armies = int(parts[2])
        terr.player = riskengine.players[parts[3]]
        if parts[0] == "draw_army":
            riskgui.drawarmy(terr)
        else:
            riskgui.drawterritory(terr, int(parts[4]))
    if parts[0] == "set_armies":
        riskgui.set_armies(int(parts[1]))
    if parts[0] == "won_game":
        riskgui.won_game(parts[1])
    if parts[0] == "playersturn":
        riskgui.playersturn(parts[1])
    if parts[0] == "set_status":
        riskgui.set_status(parts[1])
    if parts[0] == "newplayer":
        riskgui.net_newplayer(parts[1])
    if parts[0] == "removeplayer":
        riskgui.removeplayer(parts[1])   
    if parts[0] == "relistplayers":
        riskgui.relistplayers([riskengine.players[p] for p in parts[1:]])
    if parts[0] == "set_phase":
        riskengine.setphase(parts[1])
    if parts[0] == "add_card":
        riskengine.players[parts[3]].cards.append(riskengine.Card(parts[2], parts[1]))
    if parts[0] == "remove_card":
        foundcard = 0
        for n in riskengine.players[parts[3]].cards:
            if n.territory == parts[2]:
                riskengine.players[parts[3]].cards.remove(n)
                foundcard = 1
                break
        if foundcard == 0:
            print >>riskengine.verbosefile, "Couldn't find card"
            print >>riskengine.verbosefile, "players' cards:", riskengine.players[parts[3]].cards
        #riskengine.players[parts[3]].cards.remove(riskengine.card(parts[2], parts[1]))
    if parts[0] == "message":
        riskgui.set_status(parts[2] + " sent message: " + parts[1])
    if parts[0] == "leaving":
        riskgui.show_status_message("The server has left.")
        serv_sock.close()
        am_client = 0
Пример #6
0
def client_receive_message(mess, sock):
    """Run when the client receives a message."""
    global clplayer, am_client
    print >>riskengine.verbosefile, mess, "client received"
    parts = splitparms(mess)
    if parts[0] == "draw_army" or parts[0] == "draw_territory":
        terr = riskengine.territories[parts[1]]
        terr.armies = int(parts[2])
        terr.player = riskengine.players[parts[3]]
        if parts[0] == "draw_army":
            riskgui.drawarmy(terr)
        else:
            riskgui.drawterritory(terr, int(parts[4]))
    if parts[0] == "set_armies":
        riskgui.set_armies(int(parts[1]))
    if parts[0] == "won_game":
        riskgui.won_game(parts[1])
    if parts[0] == "playersturn":
        riskgui.playersturn(parts[1])
    if parts[0] == "set_status":
        riskgui.set_status(parts[1])
    if parts[0] == "newplayer":
        riskgui.net_newplayer(parts[1])
    if parts[0] == "removeplayer":
        riskgui.removeplayer(parts[1])
    if parts[0] == "relistplayers":
        riskgui.relistplayers([riskengine.players[p] for p in parts[1:]])
    if parts[0] == "set_phase":
        riskengine.setphase(parts[1])
    if parts[0] == "add_card":
        riskengine.players[parts[3]].cards.append(riskengine.Card(parts[2], parts[1]))
    if parts[0] == "remove_card":
        foundcard = 0
        for n in riskengine.players[parts[3]].cards:
            if n.territory == parts[2]:
                riskengine.players[parts[3]].cards.remove(n)
                foundcard = 1
                break
        if foundcard == 0:
            print >>riskengine.verbosefile, "Couldn't find card"
            print >>riskengine.verbosefile, "players' cards:", riskengine.players[parts[3]].cards
        # riskengine.players[parts[3]].cards.remove(riskengine.card(parts[2], parts[1]))
    if parts[0] == "message":
        riskgui.set_status(parts[2] + " sent message: " + parts[1])
    if parts[0] == "leaving":
        riskgui.show_status_message("The server has left.")
        serv_sock.close()
        am_client = 0
Пример #7
0
def startgame():
    """Start off the game."""
    global playerorder, currentplayer
    if risknetwork.am_client:
        riskgui.show_status_message("You aren't the server; you can't do that.")
        return False
        
    if phase != "Pregame":
        return False
    if len(players) < 2:
        riskgui.set_status("Not enough players")
        return False
    if len(players) > 7:
        riskgui.set_status("Too many players - 7 maximum")
        return False
    
    
    setphase("Preposition")
    
    createcards()
    for pl in players.values():
        pl.freeArmies = 45 - 5 * len(players)
    playerorder = players.values()[:]
    random.shuffle(playerorder)
    currentplayer = playerorder[0]
    riskgui.relistplayers(playerorder)
    riskgui.playersturn(currentplayer.name)
    riskgui.set_armies(currentplayer.freeArmies)
    
    
    while currentplayer.ai is not None and currentplayer.freeArmies > 0:
        currentplayer.ai.run_preplace(currentplayer)
        rotateplayers()  
        riskgui.set_armies(currentplayer.freeArmies)
    if currentplayer.ai is not None:
        resetturn()
        nextturn()
    return True
Пример #8
0
def startgame():
    """Start off the game."""
    global playerorder, currentplayer
    if risknetwork.am_client:
        riskgui.show_status_message(
            "You aren't the server; you can't do that.")
        return False

    if phase != "Pregame":
        return False
    if len(players) < 2:
        riskgui.set_status("Not enough players")
        return False
    if len(players) > 7:
        riskgui.set_status("Too many players - 7 maximum")
        return False

    setphase("Preposition")

    createcards()
    for pl in players.values():
        pl.freeArmies = 45 - 5 * len(players)
    playerorder = players.values()[:]
    random.shuffle(playerorder)
    currentplayer = playerorder[0]
    riskgui.relistplayers(playerorder)
    riskgui.playersturn(currentplayer.name)
    riskgui.set_armies(currentplayer.freeArmies)

    while currentplayer.ai is not None and currentplayer.freeArmies > 0:
        currentplayer.ai.run_preplace(currentplayer)
        rotateplayers()
        riskgui.set_armies(currentplayer.freeArmies)
    if currentplayer.ai is not None:
        resetturn()
        nextturn()
    return True
Пример #9
0
def load_game(filename):
    """Load a previously-saved game."""
    global currentplayer, phase, currentcard, currentplayernum
    if phase != "Pregame":
        riskgui.set_status("You have already started a game")
        return

    savefile = open(filename)
    while savefile.readline() == "player\n":
        plname = savefile.readline().strip()
        plarmies = int(savefile.readline().strip())
        plconquered = int(savefile.readline().strip())
        cards = []
        currentline = savefile.readline()
        while currentline != "endplayer\n" and currentline != "ai\n":
            nline = savefile.readline().strip()
            cards.append(Card(currentline.strip(), nline))
            currentline = savefile.readline()
        ainame = None
        if currentline == "ai\n":
            ainame = savefile.readline().strip()
            aidatalen = int(savefile.readline().strip())
            aidata = savefile.read(aidatalen)
            savefile.readline()
        if not players.has_key(plname):
            if ainame and not os.path.exists(ainame):
                riskgui.set_status("AI " + ainame + " nonexistent")
                ainame = None
            riskgui.makeplayercolors(makeplayer(plname, ainame))
            if ainame:
                players[plname].ai.loaddata(aidata)
        players[plname].freeArmies = plarmies
        players[plname].conqueredTerritory = plconquered
        players[plname].cards = cards
        for card in cards:
            risknetwork.add_card(card, players[plname])
        playerorder.append(players[plname])
    riskgui.relistplayers(playerorder)
    currentplayer = players[savefile.readline().strip()]
    currentplayernum = playerorder.index(currentplayer)
    riskgui.set_armies(currentplayer.freeArmies)
    riskgui.playersturn(currentplayer.name)
    setphase(savefile.readline().strip())
    currentcard = int(savefile.readline().strip())

    while savefile.readline().strip() == "territory":
        tname = savefile.readline().strip()
        tplayer = savefile.readline().strip()
        if tplayer == "None":
            tplayer = None
        else:
            tplayer = players[tplayer]
        territories[tname].player = tplayer
        territories[tname].armies = int(savefile.readline().strip())
        riskgui.drawterritory(territories[tname], 0)
        savefile.readline()

    while 1:
        cardterr = savefile.readline().strip()
        if not cardterr:
            break
        allcards.append(Card(cardterr, savefile.readline().strip()))
    savefile.close()