Пример #1
0
    def _check_attributes(self, team: Team):
        utils.check_type("team", team, Team)
        
        self._check_team_attribute(team, "name")
        self._check_team_attribute(team, "units")
        self._check_team_attribute(team, "num_units")
        self._check_team_attribute(team, "num_positions")
        
        
        for unit in team:
            if unit is None:
                continue

            self._check_unit_type(unit)            
            self._check_unit_attribute(unit, "HP")
            self._check_unit_attribute(unit, "ATT")
            self._check_unit_attribute(unit, "ARM")
            self._check_unit_attribute(unit, "EVS")
            
            self._check_unit_attribute(unit, "name")
            self._check_unit_attribute(unit, "pos")
            self._check_unit_attribute(unit, "hp")
            self._check_unit_attribute(unit, "att")
            self._check_unit_attribute(unit, "arm")
            self._check_unit_attribute(unit, "evs")
Пример #2
0
 def update(self, obj: Unit):
     utils.check_type("obj", obj, Unit)        
     self.name = obj.name
     self.hp = obj.hp
     self.att = obj.att
     self.arm = obj.arm
     self.evs = obj.evs
Пример #3
0
    def _check_types(self, team: Team):
        utils.check_type("team", team, Team)        
        for unit in team:
            if unit is None:
                continue

            self._check_unit_type(unit)
Пример #4
0
    def attack(self, target: Unit):        
        utils.check_type("target", target, Unit)
        write_log(
            "Before attack, %s.%s.HP=%.2f, %s.%s.HP=%.2f"%
            (
                self.team.name,
                self.name,
                self.hp,
                target.team.name,
                target.name,
                target.hp
            )
        )
        
        target.hp = max(0, target.hp - max(1, self.att - target.arm))
        self.hp = max(0, self.hp - max(1, 0.5*target.att - self.arm))

        write_log("%s.%s attacks %s.%s"%(self.team.name,
                                         self.name,
                                         target.team.name,
                                         target.name))
        write_log(
            "After attack, %s.%s.HP=%.2f, %s.%s.HP=%.2f"%
            (
                self.team.name,
                self.name,
                self.hp,
                target.team.name,
                target.name,
                target.hp
            )
        )
Пример #5
0
 def _check_types(self, team: Team):
     utils.check_type("team", team, Team)
     for unit in team:
         if not isinstance(unit, Unit):
             err_msg = "An element of Team should be Unit type, "\
                       "not %s"%(type(unit))
             raise TypeError(err_msg)
Пример #6
0
    def play(self,
             team1: Team,
             team2: Team,
             num_turns: int = 10,
             num_repeats: int = 10):
        utils.check_type("team1", team1, Team)
        utils.check_type("team2", team2, Team)

        if len(team1) != len(team2):
            err_msg = "The sizes of team1 and team2 dost not match!"
            write_log(err_msg)
            raise ValueError(err_msg)

        num_wins_team1 = 0
        num_wins_team2 = 0
        num_draws = 0

        for i in range(num_repeats):
            team1_cpy = copy.deepcopy(team1)
            team2_cpy = copy.deepcopy(team2)
            if i % 2 == 0:
                offense, defense = team1_cpy, team2_cpy
            else:
                offense, defense = team2_cpy, team1_cpy

            for t in range(num_turns):
                write_log("[%s vs %s - Repeat #%d Turn #%d]" %
                          (team1.name, team2.name, i + 1, t + 1))

                self._examiner.check_play(offense, defense, self._league_round)

                # Arrange
                defense_cpy = copy.deepcopy(defense)
                offense.arrange(defense_cpy)

                # Attack
                self._apply_attack(offense, defense)

                self._clear_dead_units(offense)
                self._clear_dead_units(defense)
                write_log("#Units in %s=%d, #Units in %s=%d" %
                          (team1.name, len(team1), team2.name, len(team2)))
                if len(offense) == 0 or len(defense) == 0:
                    break

                offense, defense = defense, offense
            # end of for

            if len(team1_cpy) > len(team2_cpy):  # Team #1 wins.
                num_wins_team1 += 1
            elif len(team1_cpy) < len(team2_cpy):
                num_wins_team2 += 1
            else:  # Draw
                num_draws += 1
        # end of for
        return num_wins_team1, num_wins_team2, num_draws
Пример #7
0
    def __init__(self, name: str, units: List[Unit] = None):

        utils.check_type("name", name, str)
        self._name = name

        if units:
            utils.check_type("units", units, list)
            if len(units) != 0:
                utils.check_type("units[0]", units[0], Unit)
        else:
            units = []

        self._units = units
        self.initialize()
Пример #8
0
Файл: team.py Проект: daew0n/loa
    def __init__(self, name: str, units: List[Unit] = None, init=True):

        utils.check_type("name", name, str)
        self._name = name

        if units:
            utils.check_type("units", units, list)
            if len(units) != 0:
                for i, unit in enumerate(units):
                    utils.check_type("units[%d]" % (i),
                                     units[i],
                                     Unit,
                                     allow_none=True)
        else:
            units = []

        self._units = units
        if init:
            self.initialize()
Пример #9
0
 def name(self, val):
     utils.check_type("name", val, str)
     self._name = val
Пример #10
0
 def team(self, team):
     from loa import Team
     utils.check_type("team", team, Team)            
     self._team = team
Пример #11
0
    def play(self,
             team1: Team,
             team2: Team,             
             num_turns: int = 10,
             num_repeats: int =10,
             judge: Judge = None):
        
        utils.check_type("team1", team1, Team)
        utils.check_type("team2", team2, Team)
        utils.check_type("judge", judge, Judge, allow_none=True)
        
        if not judge:
            judge = MaxSurvivalJudge()

        if len(team1) != len(team2):
            err_msg = "The sizes of team1 and team2 dost not match!"
            write_log(err_msg)
            raise ValueError(err_msg)
        
        num_wins_team1 = 0
        num_wins_team2 = 0
        num_draws = 0
        
        for i in range(num_repeats):            
            team1_cpy = copy.deepcopy(team1)
            team2_cpy = copy.deepcopy(team2)
            if i % 2 == 0:
                offense, defense = team1_cpy, team2_cpy
            else:
                offense, defense = team2_cpy, team1_cpy
                
            judge.initialize()
            for t in range(num_turns):
                write_log("[%s vs %s - Repeat #%d Turn #%d]"%(team1.name,
                                                              team2.name,
                                                              i+1,
                                                              t+1))
                
                self._examiner.check_play(offense,
                                          defense,
                                          self._league_round)
                
                # Arrange
                defense_cpy = copy.deepcopy(defense)
                offense.arrange(defense_cpy)
                
                # Attack
                self._apply_attack(offense, defense)
            
                self._clear_dead_units(offense)
                self._clear_dead_units(defense)
                write_log("#Units in %s=%d, #Units in %s=%d"%(team1.name,
                                                              len(team1_cpy),
                                                              team2.name,
                                                              len(team2_cpy)))
                
                judge.update(t, team1_cpy, team2_cpy)
                if len(offense) == 0 or len(defense) == 0:
                    break                                        
                
                offense, defense = defense, offense                
            # end of for
            
            winner = judge.decide(team1_cpy, team2_cpy)
            if winner == team1.name:
                num_wins_team1 += 1
            elif winner == team2_cpy.name:
                num_wins_team2 += 1
            else:  # Draw
                num_draws += 1

        # end of for
        
        return num_wins_team1, num_wins_team2, num_draws