Beispiel #1
0
    def detonate(self):
        bomb = self.bombs.pop(0)
        # Remember to account for range starting at the first parameter, and stopping before the second parameter
        # Which is really stupid <_< Why do that??? It's just confusing IMO
        for x in range(bomb[0] - self.bombBlastZone,
                       bomb[0] + self.bombBlastZone + 1):
            for y in range(bomb[1] - self.bombBlastZone,
                           bomb[1] + self.bombBlastZone + 1):
                # This is REALLY inefficient, the loops make a square where there should be a diamond of explosions
                if x < 0 or x >= MAP_WIDTH or y < 0 or y >= MAP_HEIGHT:
                    continue
                if CombatUtils.distance(x, y, bomb[0],
                                        bomb[1]) > self.bombBlastZone:
                    continue
                super(Homura, self).abilityThree(x, y)

        # Normally, enemy deaths are checked at the end of the player's turn
        # But bombs don't work that way
        for event in pygame.event.get(EventType.DIED):
            if event.beingType == BeingType.FAMILIAR:
                self.killedFamiliar()
            elif event.beingType == BeingType.WITCH:
                self.killedWitch()
            elif event.beingType == BeingType.WALPURGISNACHT:
                self.killedWalpurgisnacht()
Beispiel #2
0
 def abilityTwo(self, x, y):
     for xIndex in range(self.x - self.abilityTwoRange, self.x + self.abilityTwoRange + 1):
         for yIndex in range(self.y - self.abilityTwoRange, self.y + self.abilityTwoRange + 1):
             if xIndex < 0 or xIndex >= MAP_WIDTH or yIndex < 0 or yIndex >= MAP_HEIGHT:
                 continue
             if CombatUtils.distance(self.x, self.y, xIndex, yIndex) > self.abilityTwoRange:
                 continue
             if self.x == xIndex and self.y == yIndex:
                 continue
             super(Kyoko, self).abilityTwo(xIndex, yIndex)
     return self.spinMagicCost
Beispiel #3
0
 def abilityTwo(self, x, y):
     for xIndex in range(self.x - self.abilityTwoRange,
                         self.x + self.abilityTwoRange + 1):
         for yIndex in range(self.y - self.abilityTwoRange,
                             self.y + self.abilityTwoRange + 1):
             if xIndex < 0 or xIndex >= MAP_WIDTH or yIndex < 0 or yIndex >= MAP_HEIGHT:
                 continue
             if CombatUtils.distance(self.x, self.y, xIndex,
                                     yIndex) > self.abilityTwoRange:
                 continue
             if self.x == xIndex and self.y == yIndex:
                 continue
             super(Kyoko, self).abilityTwo(xIndex, yIndex)
     return self.spinMagicCost
Beispiel #4
0
    def detonate(self):
        bomb = self.bombs.pop(0)
        # Remember to account for range starting at the first parameter, and stopping before the second parameter
        # Which is really stupid <_< Why do that??? It's just confusing IMO
        for x in range(bomb[0] - self.bombBlastZone, bomb[0] + self.bombBlastZone + 1):
            for y in range(bomb[1] - self.bombBlastZone, bomb[1] + self.bombBlastZone + 1):
                # This is REALLY inefficient, the loops make a square where there should be a diamond of explosions
                if x < 0 or x >= MAP_WIDTH or y < 0 or y >= MAP_HEIGHT:
                    continue
                if CombatUtils.distance(x, y, bomb[0], bomb[1]) > self.bombBlastZone:
                    continue
                super(Homura, self).abilityThree(x, y)

        # Normally, enemy deaths are checked at the end of the player's turn
        # But bombs don't work that way
        for event in pygame.event.get(EventType.DIED):
            if event.beingType == BeingType.FAMILIAR:
                self.killedFamiliar()
            elif event.beingType == BeingType.WITCH:
                self.killedWitch()
            elif event.beingType == BeingType.WALPURGISNACHT:
                self.killedWalpurgisnacht()
Beispiel #5
0
        def takeTurnTargeting(self, event):
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    if self.targetY > 0 and CombatUtils.distance(
                            self.x, self.y, self.targetX,
                            self.targetY - 1) <= self.getRange(self.targeting):
                        self.targetY -= 1
                        self.targetPath.append((self.targetX, self.targetY))
                    return False

                elif event.key == pygame.K_DOWN:
                    if self.targetY < (
                            MAP_HEIGHT - 1) and CombatUtils.distance(
                                self.x, self.y, self.targetX, self.targetY +
                                1) <= self.getRange(self.targeting):
                        self.targetY += 1
                        self.targetPath.append((self.targetX, self.targetY))
                    return False

                elif event.key == pygame.K_LEFT:
                    if self.targetX > 0 and CombatUtils.distance(
                            self.x, self.y, self.targetX - 1,
                            self.targetY) <= self.getRange(self.targeting):
                        self.targetX -= 1
                        self.targetPath.append((self.targetX, self.targetY))
                    return False

                elif event.key == pygame.K_RIGHT:
                    if self.targetX < (MAP_WIDTH - 1) and CombatUtils.distance(
                            self.x, self.y, self.targetX + 1,
                            self.targetY) <= self.getRange(self.targeting):
                        self.targetX += 1
                        self.targetPath.append((self.targetX, self.targetY))
                    return False

                elif event.key == pygame.K_QUOTE and self.targeting == ABILITY_ONE:
                    self.targeting = None
                    if not board.grid[self.targetX][self.targetY].beings:
                        target = None
                    else:
                        target = board.grid[self.targetX][
                            self.targetY].beings[-1]
                    if not CombatUtils.canTarget(target,
                                                 self.abilityOneTargets):
                        self.targetPath = []
                        return False
                    magicLoss = self.abilityOne(self.targetX, self.targetY)
                    self.targetPath = []
                    if magicLoss is None:
                        return False
                    self.magic -= magicLoss
                    if self.magic <= 0:
                        Event.lossEvent()
                    return True

                elif event.key == pygame.K_COMMA and self.targeting == ABILITY_TWO:
                    self.targeting = None
                    if not board.grid[self.targetX][self.targetY].beings:
                        target = None
                    else:
                        target = board.grid[self.targetX][
                            self.targetY].beings[-1]
                    if not CombatUtils.canTarget(target,
                                                 self.abilityTwoTargets):
                        self.targetPath = []
                        return False
                    magicLoss = self.abilityTwo(self.targetX, self.targetY)
                    self.targetPath = []
                    if magicLoss is None:
                        return False
                    self.magic -= magicLoss
                    if self.magic <= 0:
                        Event.lossEvent()
                    return True

                elif event.key == pygame.K_PERIOD and self.targeting == ABILITY_THREE:
                    self.targeting = None
                    if not board.grid[self.targetX][self.targetY].beings:
                        target = None
                    else:
                        target = board.grid[self.targetX][
                            self.targetY].beings[-1]
                    if not CombatUtils.canTarget(target,
                                                 self.abilityThreeTargets):
                        self.targetPath = []
                        return False
                    magicLoss = self.abilityThree(self.targetX, self.targetY)
                    self.targetPath = []
                    if magicLoss is None:
                        return False
                    self.magic -= magicLoss
                    if self.magic <= 0:
                        Event.lossEvent()
                    return True

                elif event.key == pygame.K_p and self.targeting == ABILITY_FOUR:
                    self.targeting = None
                    if not board.grid[self.targetX][self.targetY].beings:
                        target = None
                    else:
                        target = board.grid[self.targetX][
                            self.targetY].beings[-1]
                    if not CombatUtils.canTarget(target,
                                                 self.abilityFourTargets):
                        self.targetPath = []
                        return False
                    magicLoss = self.abilityFour(self.targetX, self.targetY)
                    self.targetPath = []
                    if magicLoss is None:
                        return False
                    self.magic -= magicLoss
                    if self.magic <= 0:
                        Event.lossEvent()
                    return True

                self.targeting = None
                return False

            # Mouse support to be implemented later
            return False