Beispiel #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()
Beispiel #2
0
def real_nextturn():
    """Hidden method to really move on."""
    global phase, selected

    if selected is not None:
        riskgui.drawterritory(selected, 0)
        selected = None

    if currentplayer.conqueredTerritory == 1:
        if len(allcards) != 0:  #too bad otherwise
            handcard = random.choice(allcards)
            currentplayer.cards.append(handcard)
            risknetwork.add_card(handcard, currentplayer)
            allcards.remove(handcard)
        currentplayer.conqueredTerritory = 0

    rotateplayers()
    riskgui.set_status("It is now " + currentplayer.name + "'s turn.")

    currentplayer.freeArmies += max(3, len(currentplayer.territories()) // 3)
    for c in continents:
        existing = [x for x in territories.values() if x.continent == c[0]]
        unowned = [x for x in existing if x.player != currentplayer]
        if len(existing) != 0 and len(unowned) == 0:
            currentplayer.freeArmies += c[1]
    riskgui.set_armies(currentplayer.freeArmies)

    setphase("Place")
Beispiel #3
0
def real_nextturn():
    """Hidden method to really move on."""
    global phase, selected
    
    if selected is not None:
        riskgui.drawterritory(selected, 0)
        selected = None
    
    if currentplayer.conqueredTerritory == 1:
        if len(allcards) != 0: #too bad otherwise
            handcard = random.choice(allcards)
            currentplayer.cards.append(handcard)
            allcards.remove(handcard)
        currentplayer.conqueredTerritory = 0
        
    rotateplayers()
    riskgui.set_status("=== %s's Turn ===" % currentplayer.name)
    
    currentplayer.freeArmies += len(currentplayer.territories()) // 3
    for c in continents.values():
        existing = [t for t in territories.values() if t.continent == c]
        unowned = [t for t in existing if t.player != currentplayer]
        if len(existing) != 0 and len(unowned) == 0 :
            currentplayer.freeArmies += c.value
    
    riskgui.set_status("[%s] armies from territories: %d" % (currentplayer.name, currentplayer.freeArmies))
    riskgui.set_armies(currentplayer.freeArmies)
    
    setphase("Place")
Beispiel #4
0
def handleselection(t, button):
    """Handle a player clicking on the map."""
    global selected
    
    if phase == "Pregame":
        return
    
    if phase == "Preposition":
        handle_preposition(t, button)
        return
    
    if phase == "Place":
        if handle_place(t, button):
            return
    
    if selected is None:
        if t.player != currentplayer:
            return
        isshaded = 1
        selected = t
    elif selected == t:
        isshaded = 0
        selected = None
        if phase == "WonAttack":
            setphase("Attack")
    else:
        if phase == "Fortifying":
            handle_fortifying(t, button)
        elif phase == "Attack":
            handle_attack(t)
        elif phase == "WonAttack":
            handle_won_attack(t, button)
        return
        
    riskgui.drawterritory(t, isshaded)
Beispiel #5
0
def real_nextturn():
    """Hidden method to really move on."""
    global phase, selected
    
    if selected is not None:
        riskgui.drawterritory(selected, 0)
        selected = None
    
    if currentplayer.conqueredTerritory == 1:
        if len(allcards) != 0: #too bad otherwise
            handcard = random.choice(allcards)
            currentplayer.cards.append(handcard)
            risknetwork.add_card(handcard, currentplayer)
            allcards.remove(handcard)
        currentplayer.conqueredTerritory = 0
        
    rotateplayers()
    riskgui.set_status("It is now " + currentplayer.name + "'s turn.")
    
    currentplayer.freeArmies += max(3, len(currentplayer.territories()) // 3)
    for c in continents:
        existing = [x for x in territories.values() if x.continent == c[0]]
        unowned = [x for x in existing if x.player != currentplayer]
        if len(existing) != 0 and len(unowned) == 0 :
            currentplayer.freeArmies += c[1]
    riskgui.set_armies(currentplayer.freeArmies)            
            
    setphase("Place")
Beispiel #6
0
def run_place(player):
    """Place a player's units at the beginning of the turn"""
    no_more_tris = False
    while no_more_tris == False:
        no_more_tris = do_cards(player)
    
    for _ in range(player.freeArmies):
        terr = player.ai.Placement(player)
        if terr is not None:
            player.place_army(terr)
            riskgui.drawterritory(terr, 0)
Beispiel #7
0
def run_place(player):
    """Place a player's units at the beginning of the turn"""
    #See if the AI wants to turn in cards
    if len(player.cards) >= 3:
        do_cards(player)

    while len(player.cards) >= 5:
        do_cards(player)

    for i in range(player.freeArmies):
        terr = player.ai.Placement(player)
        if terr is not None:
            player.place_army(terr)
            riskgui.drawterritory(terr, 0)
Beispiel #8
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
Beispiel #9
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
Beispiel #10
0
def startfortifying():
    """Handle when the player wants to start fortifying."""
    global armiesfrom, armiesto, selected
    
    if phase == "Pregame" or phase == "Preposition" or phase == "Fortifying" or (
                                 phase != "Attack" and 
                                 currentplayer.freeArmies > 0):
        riskgui.set_status("No can do")
        return
    
    if selected is not None:
        riskgui.drawterritory(selected, 0)
        selected = None
    setphase("Fortifying")
    riskgui.set_status("Now fortifying...")
    armiesfrom = None
    armiesto = None
Beispiel #11
0
def startfortifying():
    """Handle when the player wants to start fortifying."""
    global armiesfrom, armiesto, selected
    if risknetwork.start_fortifying():
        return

    if phase == "Pregame" or phase == "Preposition" or phase == "Fortifying" or (
            phase != "Attack" and currentplayer.freeArmies > 0):
        riskgui.set_status("No can do")
        return
    if phase == "Place" and len(currentplayer.cards) >= 5:
        riskgui.set_status("You must turn in your cards to start fortifying.")
        return
    if selected is not None:
        riskgui.drawterritory(selected, 0)
        selected = None
    setphase("Fortifying")
    riskgui.set_status("Now fortifying...")
    armiesfrom = None
    armiesto = None
Beispiel #12
0
def handle_fortifying(terr, button):
    """Handle the fortification phase."""
    global armiesfrom, armiesto
    if terr.player != currentplayer:
        return
    if armiesfrom is not None and armiesto is not None and \
       (selected != armiesfrom or terr != armiesto):
        riskgui.set_status("You can only fortify from one place to one space per turn.")
        return
    if not selected.neighboring(terr):
        return
        
    moving = min(selected.armies - 1, (button == 3) and 5 or 1)
    if moving:
        selected.armies -= moving
        terr.armies += moving
        armiesfrom = selected
        armiesto = terr
        riskgui.drawterritory(armiesfrom, 1)
        riskgui.drawterritory(armiesto, 0)
Beispiel #13
0
def run_preplace(player):
    """
    Runs when the player is supposed to select and support his first territory
    """
    riskengine.logai("run_preplace")
    freeplaces = [x for x in riskengine.territories.values() if x.armies == 0]
    if freeplaces:
        terr = player.ai.Assignment(player)
        if terr is not None and terr.armies == 0:
            player.place_army(terr)
            riskgui.drawterritory(terr, 0)
        else:
            riskengine.logai("AI " + player.name + " couldn't place armies, gave up")
    
    else:
        terr = player.ai.Placement(player)
        if terr is not None:  
            player.place_army(terr)
            riskgui.drawterritory(terr, 0)
        else:
            riskengine.logai("AI" + player.name + "couldn't place armies, gave up")
Beispiel #14
0
def handle_fortifying(terr, button):
    """Handle the fortification phase."""
    global armiesfrom, armiesto
    if terr.player != currentplayer:
        return
    if armiesfrom is not None and armiesto is not None and \
       (selected != armiesfrom or terr != armiesto):
        riskgui.set_status(
            "You can only fortify from one place to one space per turn.")
        return
    if not selected.neighboring(terr):
        return

    moving = min(selected.armies - 1, (button == 3) and 5 or 1)
    if moving:
        selected.armies -= moving
        terr.armies += moving
        armiesfrom = selected
        armiesto = terr
        riskgui.drawterritory(armiesfrom, 1)
        riskgui.drawterritory(armiesto, 0)
Beispiel #15
0
def handleselection(t, button):
    """Handle a player clicking on the map."""
    global selected

    if phase == "Pregame":
        return

    if risknetwork.handle_selection(t, button):
        return

    if phase == "Preposition":
        handle_preposition(t, button)
        return

    if phase == "Place":
        if handle_place(t, button):
            return

    if selected is None:
        if t.player != currentplayer:
            return
        isshaded = 1
        selected = t
    elif selected == t:
        isshaded = 0
        selected = None
        if phase == "WonAttack":
            setphase("Attack")
    else:
        if phase == "Fortifying":
            handle_fortifying(t, button)
        elif phase == "Attack":
            handle_attack(t)
        elif phase == "WonAttack":
            handle_won_attack(t, button)
        return

    riskgui.drawterritory(t, isshaded)
Beispiel #16
0
def run_preplace(player):
    """Runs when the player is supposed to select 
    and support his first territory
    """
    riskengine.logai("run_preplace")
    freeplaces = [x for x in riskengine.territories.values() if x.armies == 0]
    if freeplaces:
        terr = player.ai.Assignment(player)
        if terr is not None and terr.armies == 0:
            player.place_army(terr)
            riskgui.drawterritory(terr, 0)
        else:
            riskengine.logai("AI " + player.name +
                             " couldn't place armies, gave up")

    else:
        terr = player.ai.Placement(player)
        if terr is not None:
            player.place_army(terr)
            riskgui.drawterritory(terr, 0)
        else:
            riskengine.logai("AI" + player.name +
                             "couldn't place armies, gave up")
Beispiel #17
0
def handle_preposition(terr, button):
    """Handle the preposition phase."""
    if currentplayer.freeArmies == 0:
        resetturn()
        return

    emptyTerritories = [x for x in territories.values() if x.armies == 0]
    if (emptyTerritories and terr.player is None) or \
            (not emptyTerritories and terr.player == currentplayer):
        terr.player = currentplayer
        currentplayer.place_army(terr)
        riskgui.drawterritory(terr, 0)
    else:
        return

    rotateplayers()
    riskgui.set_armies(currentplayer.freeArmies)
    while currentplayer.ai is not None:
        currentplayer.ai.run_preplace(currentplayer)
        rotateplayers()
        riskgui.set_armies(currentplayer.freeArmies)
        if currentplayer.freeArmies == 0:
            resetturn()
            return
Beispiel #18
0
def handle_preposition(terr, button):
    """Handle the preposition phase."""
    if currentplayer.freeArmies == 0:
        resetturn()
        return
    
    emptyTerritories = [x for x in territories.values() if x.armies == 0] 
    if (emptyTerritories and terr.player is None) or \
            (not emptyTerritories and terr.player == currentplayer):
        terr.player = currentplayer
        currentplayer.place_army(terr)
        riskgui.drawterritory(terr, 0)
    else:
        return

    rotateplayers()
    riskgui.set_armies(currentplayer.freeArmies)
    while currentplayer.ai is not None:
        currentplayer.ai.run_preplace(currentplayer)
        rotateplayers()
        riskgui.set_armies(currentplayer.freeArmies)
        if currentplayer.freeArmies == 0:
            resetturn()
            return
Beispiel #19
0
def handle_won_attack(terr, button):
    """Handle the movement of armies after an attack was won."""
    global selected
    if terr == armiesto:
        if button == 3:
            moved = min(5, selected.armies - 1)
            selected.armies -= moved
            terr.armies += moved
        else:
            selected.armies -= 1
            terr.armies += 1
        riskgui.drawterritory(selected, 1)
        riskgui.drawterritory(terr, 0)
        if selected.armies == 1:
            setphase("Attack")
            riskgui.drawterritory(selected, 0)
            selected = None
            return
Beispiel #20
0
def handle_won_attack(terr, button):
    """Handle the movement of armies after an attack was won."""
    global selected
    if terr == armiesto:
        if button == 3:
            moved = min(5, selected.armies - 1)
            selected.armies -= moved
            terr.armies += moved
        else:
            selected.armies -= 1
            terr.armies += 1
        riskgui.drawterritory(selected, 1)
        riskgui.drawterritory(terr, 0)
        if selected.armies == 1:
            setphase("Attack")
            riskgui.drawterritory(selected, 0)
            selected = None          
            return
Beispiel #21
0
def handle_attack(defender):
    """Handle the attack phase."""
    global armiesto, selected
    if defender.player == currentplayer:
        return
    attacker = selected
    attack(attacker, defender)
    
    if defender.player == currentplayer and attacker.armies > 1: #we won
        armiesto = defender
        setphase("WonAttack")
        
    if defender.player == currentplayer and attacker.armies == 1:
        riskgui.drawterritory(attacker, 0)
        selected = None
    else:
        riskgui.drawterritory(attacker, 1)
    riskgui.drawterritory(defender, 0)
Beispiel #22
0
def handle_attack(defender):
    """Handle the attack phase."""
    global armiesto, selected
    if defender.player == currentplayer:
        return
    attacker = selected
    attack(attacker, defender)

    if defender.player == currentplayer and attacker.armies > 1: #we won
        riskgui.set_status(currentplayer.name + " won the territory - move armies into it")
        armiesto = defender
        setphase("WonAttack")
        
    if defender.player == currentplayer and attacker.armies == 1:
        riskgui.set_status(currentplayer.name + " won the territory")
        riskgui.drawterritory(attacker, 0)
        selected = None
    else:
        riskgui.drawterritory(attacker, 1)
    riskgui.drawterritory(defender, 0)
Beispiel #23
0
def handle_attack(defender):
    """Handle the attack phase."""
    global armiesto, selected
    if defender.player == currentplayer:
        return
    attacker = selected
    attack(attacker, defender)

    if defender.player == currentplayer and attacker.armies > 1:  #we won
        riskgui.set_status(currentplayer.name +
                           " won the territory - move armies into it")
        armiesto = defender
        setphase("WonAttack")

    if defender.player == currentplayer and attacker.armies == 1:
        riskgui.set_status(currentplayer.name + " won the territory")
        riskgui.drawterritory(attacker, 0)
        selected = None
    else:
        riskgui.drawterritory(attacker, 1)
    riskgui.drawterritory(defender, 0)
Beispiel #24
0
def run_attack(player):
    """Have a player run his attacks, and then his fortification"""
    riskengine.logai("run_attack")
    while 1:
        fromterr, toterr = player.ai.Attack(player)

        if fromterr is None or toterr is None or fromterr.armies <= 1:
            break
        riskengine.logai("AI %s attacks %s with %s" %
                         (player.name, toterr.name, fromterr.name))
        riskengine.attack(fromterr, toterr)
        riskgui.drawterritory(fromterr, 0)
        riskgui.drawterritory(toterr, 0)

        if toterr.player == player:  #we won
            movarm = player.ai.Occupation(player, fromterr, toterr)
            if movarm <= 0:
                continue
            movarm = min(movarm, fromterr.armies - 1)
            fromterr.armies -= movarm
            toterr.armies += movarm
            riskgui.drawterritory(fromterr, 0)
            riskgui.drawterritory(toterr, 0)

    fromterr, toterr, armies = player.ai.Fortification(player)
    if fromterr is not None and toterr is not None and armies > 0:
        armies = min(armies, fromterr.armies - 1)
        fromterr.armies -= armies
        toterr.armies += armies
        riskgui.drawterritory(fromterr, 0)
        riskgui.drawterritory(toterr, 0)
Beispiel #25
0
def run_attack(player):
    """Have a player run his attacks, and then his fortification"""
    riskengine.logai("run_attack")
    while True:
        if len(riskengine.players) == 1:
            break
        
        fromterr, toterr = player.ai.Attack(player)
        
        if fromterr is None or toterr is None or fromterr.armies <= 1:
            break
        riskengine.logai("AI %s attacks %s with %s" % 
                            (player.name, toterr.name, fromterr.name))
        riskengine.attack(fromterr, toterr)
        riskgui.drawterritory(fromterr, 0)
        riskgui.drawterritory(toterr, 0)
        
        if toterr.player == player: #we won
            movarm = player.ai.Occupation(player, fromterr, toterr)
            if movarm <= 0:
                continue
            movarm = min(movarm, fromterr.armies - 1)
            fromterr.armies -= movarm
            toterr.armies += movarm
            riskgui.drawterritory(fromterr, 0)
            riskgui.drawterritory(toterr, 0)
    
    fromterr, toterr, armies = player.ai.Fortification(player)
    if fromterr is not None and toterr is not None and armies > 0:
        armies = min(armies, fromterr.armies - 1)
        fromterr.armies -= armies
        toterr.armies += armies
        riskgui.drawterritory(fromterr, 0)
        riskgui.drawterritory(toterr, 0)
Beispiel #26
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()