예제 #1
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)
예제 #2
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)
예제 #3
0
def do_cards(player):
    """Turn in all of a player's cards"""
    for a, b, c in itertools.combinations(player.cards, 3):
        if riskengine.CardSet([a, b, c]).value() is not None:
            riskengine.logai("turning in cards")
            riskengine.turnincards(player, [a, b, c])
            return False
    
    return True
예제 #4
0
def do_cards(player):
    card_function = getattr(player.ai, "TurnInCards", None)
    print 'Trying to do cards. The card function is: ', card_function
    if callable(card_function):
        c1, c2, c3 = card_function(player)
        if c1 is not None:
            riskengine.logai("turning in cards")
            riskengine.turnincards(player, [c1, c2, c3])
    if len(player.cards) >= 5:
        do_auto_cards(player)
예제 #5
0
def do_auto_cards(player):
    """Turn in all of a player's cards"""
    if len(player.cards) >= 5:
        for a in range(len(player.cards) - 2):
            for b in range(a + 1, len(player.cards) - 1):
                for c in range(b + 1, len(player.cards)):
                    if riskengine.cardset(
                        [player.cards[a], player.cards[b], player.cards[c]]):
                        riskengine.logai("turning in cards")
                        riskengine.turnincards(player, [
                            player.cards[a], player.cards[b], player.cards[c]
                        ])
                        return
예제 #6
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")
예제 #7
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")
예제 #8
0
def UMessage(*args):
    riskengine.logai("".join([str(arg) for arg in args]))
예제 #9
0
def UMessage(*args):
    riskengine.logai("".join([str(arg) for arg in args]))