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
def handle_network(): """Repeatedly handle input from the network""" global line if am_server: for s in sockets: while 1: lin = None try: lin = s.readline() except: (ErrorType, ErrorValue, ErrorTB)=sys.exc_info() riskgui.set_status("A client disconnected.") if lin: server_receive_message(lin, s) else: break if am_client: while 1: lin = None try: lin = serv_sock.readline() except: (ErrorType, ErrorValue, ErrorTB)=sys.exc_info() riskgui.set_status("Connection broken.") return if lin: client_receive_message(lin, serv_sock) else: break riskgui.root.after(50, handle_network)
def turnincards(player, cards): """Turn in a set of cards.""" if phase != "Place": return for c in cards: if not c in player.cards: return cards.sort(lambda a, b: cmp(a.picture, b.picture)) card_set = CardSet(cards) value = card_set.value() if value is None: return for c in cards: if territories[c.territory].player == player: value += 2 player.freeArmies += value for c in cards: allcards.append(c) for ca in player.cards: if c == ca: player.cards.remove(ca) riskgui.set_status("[%s] Card Set: %d" % (player.name, value)) riskgui.set_armies(currentplayer.freeArmies)
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")
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")
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")
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()
def handle_network(): """Repeatedly handle input from the network""" global line if am_server: for s in sockets: while 1: lin = None try: lin = s.readline() except: (ErrorType, ErrorValue, ErrorTB) = sys.exc_info() riskgui.set_status("A client disconnected.") if lin: server_receive_message(lin, s) else: break if am_client: while 1: lin = None try: lin = serv_sock.readline() except: (ErrorType, ErrorValue, ErrorTB) = sys.exc_info() riskgui.set_status("Connection broken.") return if lin: client_receive_message(lin, serv_sock) else: break riskgui.root.after(50, handle_network)
def send(self, data): """Send some data""" if self.fine == 1: try: socket.socket.send(self, data) except socket.error, (ErrorValue, ErrorTB): self.fine = 0 riskgui.set_status("Connection broken.")
def binder(): """Get connections to the server""" serv_sock.listen(1) while 1: q, v = serv_sock.accept() q.setblocking(0) sockets.append(q) riskgui.set_status("Got connection")
def sendparts(sck, *parts): """Send the combined parts of the message to the specified socket""" try: sck.send(" ".join(str(a).replace("-", "-0").replace(" ", "-1").replace("\n", "-2") for a in parts) + "\n") except socket.error, (ErrorValue, ErrorTB): if ErrorValue == 10035: time.sleep(1) sendparts(sck, *parts) else: riskgui.set_status("Connection broken.") raise
def sendparts(sck, *parts): """Send the combined parts of the message to the specified socket""" try: sck.send(" ".join(str(a).replace("-","-0").replace(" ","-1").replace("\n","-2") for a in parts) + "\n") except socket.error, (ErrorValue, ErrorTB): if ErrorValue == 10035: time.sleep(1) sendparts(sck, *parts) else: riskgui.set_status("Connection broken.") raise
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
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
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
def nextturn(): """Move on to the next turn.""" if phase == "Pregame": return if currentplayer.freeArmies > 0: riskgui.set_status("You must position all your armies first") return real_nextturn() while currentplayer.ai is not None: if len(players) == 1: riskgui.set_status(currentplayer.name + " won!") return setphase("Place") currentplayer.ai.run_place(currentplayer) setphase("Attack") currentplayer.ai.run_attack(currentplayer) real_nextturn()
def nextturn(): """Move on to the next turn.""" if phase == "Pregame": return if risknetwork.next_turn(): return if currentplayer.freeArmies > 0: riskgui.set_status("You must position all your armies first") return real_nextturn() while currentplayer.ai is not None: if len(players) == 1: riskgui.set_status(currentplayer.name + " won!") return setphase("Place") currentplayer.ai.run_place(currentplayer) setphase("Attack") currentplayer.ai.run_attack(currentplayer) real_nextturn()
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)
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)
def handle_place(terr, button): """Handle the placing of the armies before a turn.""" if terr.player != currentplayer: return 1 if currentplayer.freeArmies > 0: if button == 3: currentplayer.place_army(terr, min(5, currentplayer.freeArmies)) else: currentplayer.place_army(terr) riskgui.drawarmy(terr) riskgui.set_armies(currentplayer.freeArmies) return 1 else: if len(currentplayer.cards) >= 5: riskgui.set_status("You must turn in cards to attack") return 1 riskgui.set_status("Moving to Attack") setphase("Attack") print >> verbosefile, "Attacking" return 0
def handle_place(terr, button): """Handle the placing of the armies before a turn.""" if terr.player != currentplayer: return 1 if currentplayer.freeArmies > 0: if button == 3: currentplayer.place_army(terr, min(5, currentplayer.freeArmies)) else: currentplayer.place_army(terr) riskgui.drawarmy(terr) riskgui.set_armies(currentplayer.freeArmies) return 1 else: if len(currentplayer.cards) >= 5: riskgui.set_status("You must turn in cards to attack") return 1 riskgui.set_status("Moving to Attack") setphase("Attack") print >>verbosefile, "Attacking" return 0
def server_receive_message(mess, sock): """Run when the server receives a message""" print >>riskengine.verbosefile, mess, "server received" parts = splitparms(mess) if parts[0] == "newplayer": riskgui.net_newplayer(parts[1]) riskengine.players[parts[1]].connection = sock for sck in sockets: if sck != sock: sendparts(sck, "newplayer", parts[1]) if parts[0] == "handle_selection": if hasattr(riskengine.currentplayer, "connection") and riskengine.currentplayer.connection == sock: riskengine.handleselection(riskengine.territories[parts[1]], int(parts[2])) if parts[0] == "start_fortifying": riskengine.startfortifying() if parts[0] == "next_turn": riskengine.nextturn() if parts[0] == "turnincards": if hasattr(riskengine.currentplayer, "connection") and riskengine.currentplayer.connection == sock: cd = [] for c in riskengine.currentplayer.cards: if c.territory in parts[1:]: cd.append(c) riskengine.turnincards(riskengine.currentplayer, cd) if parts[0] == "message": pla = sockettoplayer(sock) if pla: plname = pla.name else: plname = "Someone" riskgui.set_status(plname + " sent message: " + parts[1]) if parts[0] == "leaving": sockets.remove(sock) sock.close() pla = sockettoplayer(sock) if pla: plname = pla.name else: plname = "Someone" riskgui.set_status(plname + " has left")
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)
def save_game(filename): """Save the game.""" if phase == "Pregame": riskgui.set_status("You can't save, you haven't even started.") return savefile = open(filename,"w") for player in playerorder: savefile.write("player\n") savefile.write(player.name + "\n") savefile.write(str(player.freeArmies) + "\n") savefile.write(str(player.conqueredTerritory) + "\n") for card in player.cards: savefile.write(card.territory + "\n") savefile.write(card.picture + "\n") if player.ai: savefile.write("ai\n") savefile.write(player.ainame + "\n") aidata = player.ai.saveddata() savefile.write(str(len(aidata))+"\n") savefile.write(aidata) savefile.write("endplayer\n") savefile.write("endplayers\n") savefile.write(currentplayer.name + "\n") savefile.write(phase + "\n") savefile.write(str(currentcard) + "\n") for territory in territories.values(): savefile.write("territory\n") savefile.write(territory.name + "\n") if territory.player: savefile.write(territory.player.name + "\n") else: savefile.write("None\n") savefile.write(str(territory.armies) + "\n") savefile.write("endterritory\n") savefile.write("cards\n") for card in allcards: savefile.write(card.territory + "\n") savefile.write(card.picture + "\n") savefile.close()
def save_game(filename): """Save the game.""" if phase == "Pregame": riskgui.set_status("You can't save, you haven't even started.") return savefile = open(filename, "w") for player in playerorder: savefile.write("player\n") savefile.write(player.name + "\n") savefile.write(str(player.freeArmies) + "\n") savefile.write(str(player.conqueredTerritory) + "\n") for card in player.cards: savefile.write(card.territory + "\n") savefile.write(card.picture + "\n") if player.ai: savefile.write("ai\n") savefile.write(player.ainame + "\n") aidata = player.ai.saveddata() savefile.write(str(len(aidata)) + "\n") savefile.write(aidata) savefile.write("endplayer\n") savefile.write("endplayers\n") savefile.write(currentplayer.name + "\n") savefile.write(phase + "\n") savefile.write(str(currentcard) + "\n") for territory in territories.values(): savefile.write("territory\n") savefile.write(territory.name + "\n") if territory.player: savefile.write(territory.player.name + "\n") else: savefile.write("None\n") savefile.write(str(territory.armies) + "\n") savefile.write("endterritory\n") savefile.write("cards\n") for card in allcards: savefile.write(card.territory + "\n") savefile.write(card.picture + "\n") savefile.close()
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
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
def start_client(host): """Start up the client""" global serv_sock, am_client if am_client: riskgui.set_status("Already connected to a server.") return try: serv_sock = StringSocket(socket.AF_INET, socket.SOCK_STREAM) serv_sock.connect((socket.gethostbyname(host), port)) serv_sock.setblocking(0) except: riskgui.set_status("Unable to connect to server.") return am_client = 1 riskgui.set_status("Connected to server.")
def start_server(): """Start up the server""" global serv_sock, am_server if am_server == 1: riskgui.set_status("Server already started.") return am_server = 1 serv_sock = StringSocket(socket.AF_INET, socket.SOCK_STREAM) serv_sock.bind(('', port)) thread.start_new_thread(binder,()) try: riskgui.set_status("My IP: "+ socket.gethostbyname(socket.getfqdn(''))) return except: pass try: riskgui.set_status("My IP: "+ socket.gethostbyname(socket.gethostname())) return except: pass
def start_server(): """Start up the server""" global serv_sock, am_server if am_server == 1: riskgui.set_status("Server already started.") return am_server = 1 serv_sock = StringSocket(socket.AF_INET, socket.SOCK_STREAM) serv_sock.bind(("", port)) thread.start_new_thread(binder, ()) try: riskgui.set_status("My IP: " + socket.gethostbyname(socket.getfqdn(""))) return except: pass try: riskgui.set_status("My IP: " + socket.gethostbyname(socket.gethostname())) return except: pass
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
def newplayer(plname): if am_server: riskgui.set_status("New player " + plname) sendall("newplayer", plname) clientsend("newplayer", plname)
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()
def changecontrol(territory1, territory2, dice): """Change control of an army from one player to another.""" riskgui.set_status("[%s] conquered %s's territory: %s" % ( territory1.player.name, territory2.player.name, territory2.name)) territory2.player = territory1.player movearmies(territory1, territory2, dice)