예제 #1
0
class Game:
    def __init__(self):
        self.buttons = []
        self.menu = Menu()
        self.gui = GUI()
        self.bg = None
        pygame.init()

        self.screen = pygame.display.set_mode((160 * 4, 144 * 4))
        pygame.display.set_caption("Suscribete a BettaTech!")

        clock = pygame.time.Clock()
        clock.tick(60)

        self.initPokemonStats()
        #Attacks
        #Button(500, 500, 100, 40, 'Attack', self.makeTurn)
        self.pokemon1.attacks = [
            Attack("Cabezazo", 11, PHYSICAL, 10, 90, 100),
            Attack("Hidrobomba", 10, SPECIAL, 10, 110, 100)
        ]
        self.pokemon2.attacks = [
            Attack("Ala de Acero", 10, PHYSICAL, 10, 85, 100)
        ]
        self.loadResources()
        print('Resources loaded succesfully')
        #Start battle
        self.battle = Battle(self.pokemon1, self.pokemon2)

        self.stopped = False
        print('Initialization finished')

    def process(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game.stopped = True
            for button in self.buttons:
                button.handle_event(event, self)
            self.menu.handle_event(event, self)

            if event.type == pygame.MOUSEBUTTONUP:
                if event.button == 1:
                    print(event.pos)

    def loadResources(self):
        self.loadPokemonImage(self.pokemon1, True)
        self.loadPokemonImage(self.pokemon2, False)
        self.gui.loadResources()

    def loadPokemonImage(self, pokemon, isPlayer):
        pokemon_name = pokemon.name.lower()
        if isPlayer:
            pokemon_img = pygame.image.load('res/pokemon/' + pokemon_name +
                                            "_back.png")
            pokemon_img = pygame.transform.scale(pokemon_img, (300, 300))
            pokemon.renderer = pokemon_img
        else:
            pokemon_img = pygame.image.load('res/pokemon/' + pokemon_name +
                                            ".png")
            pokemon_img = pygame.transform.scale(pokemon_img, (200, 200))

            pokemon.renderer = pokemon_img
        self.bg = pygame.image.load('res/battle_bg/battle_bg_1.png')
        self.bg = pygame.transform.scale(self.bg, (160 * 4, 400))

    def initPokemonStats(self):
        #First define pokemons with its stats

        pokemon1 = "Blastoise"
        pokemon2 = "Skarmory"
        with open('db/pokemons.json') as f:
            data = json.load(f)
            type2 = None
            if "type2" in data[pokemon1].keys():
                type2 = data[pokemon1]["type2"]
            self.pokemon1 = Pokemon(pokemon1, 100, data[pokemon1]["type1"],
                                    type2)
            type22 = None
            if "type2" in data[pokemon2]:
                type22 = data[pokemon2]["type2"]
            self.pokemon2 = Pokemon(pokemon2, 100, data[pokemon2]["type1"],
                                    type22)
            self.pokemon1.baseStats = {
                HP: data[self.pokemon1.name]["hp"],
                ATTACK: data[self.pokemon1.name]["attack"],
                DEFENSE: data[self.pokemon1.name]["defense"],
                SPATTACK: data[self.pokemon1.name]["spattack"],
                SPDEFENSE: data[self.pokemon1.name]["spdefense"],
                SPEED: data[self.pokemon1.name]["speed"]
            }

            self.pokemon2.baseStats = {
                HP: data[self.pokemon2.name]["hp"],
                ATTACK: data[self.pokemon2.name]["attack"],
                DEFENSE: data[self.pokemon2.name]["defense"],
                SPATTACK: data[self.pokemon2.name]["spattack"],
                SPDEFENSE: data[self.pokemon2.name]["spdefense"],
                SPEED: data[self.pokemon2.name]["speed"]
            }

        self.pokemon1.ev = {
            HP: 0,
            ATTACK: 0,
            DEFENSE: 0,
            SPATTACK: 0,
            SPDEFENSE: 0,
            SPEED: 0
        }

        self.pokemon1.iv = {
            HP: 21,
            ATTACK: 21,
            DEFENSE: 21,
            SPATTACK: 21,
            SPDEFENSE: 21,
            SPEED: 21
        }

        self.pokemon2.ev = {
            HP: 0,
            ATTACK: 0,
            DEFENSE: 0,
            SPATTACK: 0,
            SPDEFENSE: 0,
            SPEED: 0
        }

        self.pokemon2.iv = {
            HP: 21,
            ATTACK: 21,
            DEFENSE: 21,
            SPATTACK: 21,
            SPDEFENSE: 21,
            SPEED: 21
        }
        self.pokemon1.compute_stats()
        self.pokemon2.compute_stats()
        print(self.pokemon1.stats)
        print(self.pokemon2.stats)
        self.pokemon1.current_hp = self.pokemon1.stats["HP"]
        self.pokemon2.current_hp = self.pokemon2.stats["HP"]
        print(self.pokemon1.current_hp, self.pokemon1.stats["HP"])

    def renderPokemons(self):
        pokemon1Size = self.pokemon1.renderer.get_rect().size
        self.pokemon1.render(self.screen, (10, 460 - pokemon1Size[1]))
        self.pokemon2.render(self.screen, (440, 0))

    def renderButtons(self):
        self.menu.render(self)
        self.gui.render(self)
        if self.pokemon1.current_hp > 0 and self.pokemon2.current_hp > 0:
            for button in self.buttons:
                button.render(self)

        if self.pokemon1.current_hp > 0 and self.pokemon2.current_hp == 0:
            self.gui.renderMessage(self, self.pokemon1.name + " ha ganado!")
        elif self.pokemon2.current_hp > 0 and self.pokemon1.current_hp == 0:
            self.gui.renderMessage(self, self.pokemon2.name + " ha ganado!")
        elif self.pokemon2.current_hp == 0 and self.pokemon1.current_hp == 0:
            self.gui.renderMessage(self, "Increible! Doble KO!")
        else:
            self.gui.renderMessage(
                self, "Que deberia hacer " + self.pokemon1.name + "?")

    def render(self):
        self.screen.fill((255, 255, 255))  #fill white
        if (self.bg):
            self.screen.blit(self.bg, (0, 0))
        self.renderPokemons()
        self.renderButtons()
        pygame.display.update()

    def makeTurn(self, index):
        print('Using attack', index)
        turn = Turn()
        turn.command1 = Command({DO_ATTACK: index})
        turn.command2 = Command({DO_ATTACK: 0})

        if turn.can_start():
            # Execute turn
            self.battle.execute_turn(turn)
            self.battle.print_current_status()
예제 #2
0
파일: main.py 프로젝트: Nogthings/pykemon
        if len(tmp_command) == 2:
            print(tmp_command)
            try:
                if tmp_command[0] == DO_ATTACK and 0 <= int(
                        tmp_command[1]) < 4:
                    command = Command({DO_ATTACK: int(tmp_command[1])})
            except Exception:
                pass
    return command


#Start battle

battle = Battle(pokemon1, pokemon2)

while not battle.is_finished():
    #Main pokemon battle loop
    #First ask for the commands
    command1 = ask_command(pokemon1)
    command2 = ask_command(pokemon2)

    #Generate new turn
    turn = Turn()
    turn.command1 = command1
    turn.command2 = command2

    if turn.can_start():
        # Execute turn
        battle.execute_turn(turn)
        battle.print_current_status()