Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #battle system by Joshua Sumague, Joshua Torres, Ethan
- import math
- import random
- import os
- import time
- from typedata import *
- from player import *
- #import typedata
- #computer player definition. A.B.
- class computerPlayer:
- name = "???"
- isTrainer = True
- class pkmn1:
- maxHP = 10
- HP = 10
- AP = 1
- moves = ["Ember"]
- Name = "Charmander"
- typing = "Fire"
- weakness = ["Water"]
- class pkmn2:
- maxHP = 10
- HP = 10
- AP = 1
- moves = ["Ember"]
- Name = "Charmander"
- typing = "Fire"
- weakness = ["Water"]
- class pkmn3:
- Name = "?"
- maxHP = 10
- HP = 10
- AP = 1
- moves = ["Ember"]
- Name = "Charmander"
- typing = "Fire"
- weakness = ["Water"]
- class pkmn4:
- Name = "?"
- maxHP = 10
- HP = 10
- AP = 1
- moves = ["Ember"]
- Name = "Charmander"
- typing = "Fire"
- weakness = ["Water"]
- class pkmn5:
- maxHP = 10
- HP = 10
- AP = 1
- moves = ["Ember"]
- Name = "Charmander"
- typing = "Fire"
- weakness = ["Water"]
- class pkmn6:
- maxHP = 10
- HP = 10
- AP = 1
- moves = ["Ember"]
- Name = "Charmander"
- typing = "Fire"
- weakness = ["Water"]
- #holds the computer player's current pokemon. A.B.
- class computerBattlingPokemon:
- maxHP = 10
- HP = 10
- AP = 1
- moves = ["Ember"]
- Name = "Charmander"
- typing = "Fire"
- weakness = ["Water"]
- baseClass = computerPlayer.pkmn1
- #stores the list in a readily changeable format. A.B.
- class computerPokemon:
- availablePokemon = [computerPlayer.pkmn1]
- #death handler, for checking for losses and faints. A.B.
- def deathHandler():
- if playerBattlingPokemon.HP <= 0:
- print "%s fainted!" % playerBattlingPokemon.Name
- for pokemon in playerPokemon.playerPokemonList:
- print "%s | HP: %d | AP: %d" % (pokemon.Name, pokemon.HP, pokemon.AP)
- position = int(raw_input("Enter 1 to switch to your first pokemon and so on"))
- pokemon = playerPokemon.playerPokemonList[position-1]
- if playerBattlingPokemon.Name == pokemon.Name and playerBattlingPokemon.AP == pokemon.AP:
- print "You are already using this pokemon"
- elif playerPokemon.playerPokemonList[position-1].HP <= 0:
- print "This pokemon is out of energy!"
- else:
- returningPkmn = playerBattlingPokemon.baseClass
- returningPkmn.Name = playerBattlingPokemon.Name
- returningPkmn.maxHP = playerBattlingPokemon.maxHP
- returningPkmn.HP = playerBattlingPokemon.HP
- returningPkmn.AP = playerBattlingPokemon.AP
- returningPkmn.moves = playerBattlingPokemon.moves
- returningPkmn.typing = playerBattlingPokemon.typing
- returningPkmn.weakness = playerBattlingPokemon.weakness
- playerBattlingPokemon.maxHP = pokemon.maxHP
- playerBattlingPokemon.HP = pokemon.HP
- playerBattlingPokemon.Name = pokemon.Name
- playerBattlingPokemon.moves = pokemon.moves
- playerBattlingPokemon.typing = pokemon.typing
- playerBattlingPokemon.weakness = pokemon.weakness
- playerBattlingPokemon.AP = playerBattlingPokemon.AP
- playerBattlingPokemon.baseClass = pokemon
- if computerBattlingPokemon.HP <= 0:
- returningPkmn = computerBattlingPokemon.baseClass
- while True:
- pokemon = random.choice(computerPokemon.availablePokemon)
- if pokemon.HP >=0:
- break
- returningPkmn = computerBattlingPokemon.baseClass
- returningPkmn.Name = computerBattlingPokemon.Name
- returningPkmn.maxHP = computerBattlingPokemon.maxHP
- returningPkmn.HP = computerBattlingPokemon.HP
- returningPkmn.AP = computerBattlingPokemon.AP
- returningPkmn.moves = computerBattlingPokemon.moves
- returningPkmn.typing = computerBattlingPokemon.typing
- returningPkmn.weakness = computerBattlingPokemon.weakness
- computerBattlingPokemon.maxHP = pokemon.maxHP
- computerBattlingPokemon.HP = pokemon.HP
- computerBattlingPokemon.Name = pokemon.Name
- computerBattlingPokemon.moves = pokemon.moves
- computerBattlingPokemon.typing = pokemon.typing
- computerBattlingPokemon.weakness = pokemon.weakness
- computerBattlingPokemon.AP = pokemon.AP
- computerBattlingPokemon.baseClass = pokemon
- counter = 0
- for pokemon in playerPokemon.playerPokemonList:
- if pokemon.HP <=0:
- counter += 1
- if counter == len(playerPokemon.playerPokemonList):
- print "%s lost!" % player.name
- return 'L'
- counter = 0
- for pokemon in computerPokemon.availablePokemon:
- if pokemon.HP <=0:
- counter += 1
- if counter == len(computerPokemon.availablePokemon):
- print "%s won!" % player.name
- return 'W'
- #computer A.I. script. A.B.
- def computerAI():
- actionNumber = random.randint(1, 6)
- if computerPlayer.isTrainer == False:
- if actionNumber >= 4:
- move = random.choice(computerBattlingPokemon.moves)
- for typing in typelisting:
- if move in typing.moves:
- acc = typing.moves[move][1]
- power = typing.moves[move][0]
- if random.randint(1, 100) > acc:
- print "%s's %s missed!" % (computerBattlingPokemon.Name, move)
- else:
- damage = math.floor(random.randint(math.floor(power*0.3), power)*0.4)+math.floor(computerBattlingPokemon.AP*0.15)+random.randint(-15, 15)
- if typing.name in playerBattlingPokemon.weakness:
- damage = damage*1.5
- print "%s is attacking. %s used %s! It dealt %d damage!" % (computerPlayer.Name, computerBattlingPokemon.Name, move, damage)
- playerBattlingPokemon.HP -= power
- else:
- print "The %s fled!" % computerBattlingPokemon.Name
- return "Wild pokemon ran away"
- else:
- if computerBattlingPokemon.HP <= 0:
- returningPkmn = computerBattlingPokemon.baseClass
- while True:
- pokemon = random.choice(computerPokemon.availablePokemon)
- if pokemon.HP >=0:
- break
- returningPkmn = computerBattlingPokemon.baseClass
- returningPkmn.Name = computerBattlingPokemon.Name
- returningPkmn.maxHP = computerBattlingPokemon.maxHP
- returningPkmn.HP = computerBattlingPokemon.HP
- returningPkmn.AP = computerBattlingPokemon.AP
- returningPkmn.moves = computerBattlingPokemon.moves
- returningPkmn.typing = computerBattlingPokemon.typing
- returningPkmn.weakness = computerBattlingPokemon.weakness
- print "%s sends out %s!" % (computerPlayer.name, pokemon.Name)
- computerBattlingPokemon.maxHP = pokemon.maxHP
- computerBattlingPokemon.HP = pokemon.HP
- computerBattlingPokemon.Name = pokemon.Name
- computerBattlingPokemon.moves = pokemon.moves
- computerBattlingPokemon.typing = pokemon.typing
- computerBattlingPokemon.weakness = pokemon.weakness
- computerBattlingPokemon.AP = pokemon.AP
- computerBattlingPokemon.baseClass = pokemon
- elif actionNumber >= 4:
- move = random.choice(computerBattlingPokemon.moves)
- for typing in typelisting:
- if move in typing.moves:
- acc = typing.moves[move][1]
- power = typing.moves[move][0]
- if random.randint(1, 100) > acc:
- print "%s's %s missed!" % (computerBattlingPokemon.Name, move)
- else:
- damage = math.floor(random.randint(math.floor(power*0.3), power)*0.4)+math.floor(computerBattlingPokemon.AP*0.15)+random.randint(-15, 15)
- print "%s is attacking. %s used %s! It dealt %d damage!" % (computerPlayer.Name, computerBattlingPokemon.Name, move, damage)
- playerBattlingPokemon.HP -= power
- elif actionNumber == 5:
- print "%s heals their Pokemon!"
- computerBattlingPokemon.HP += 20
- if computerBattlingPokemon.HP > computerBattlingPokemon.maxHP:
- computerBattlingPokemon.HP = computerBattlingPokemon.maxHP
- else:
- returningPkmn = computerBattlingPokemon.baseClass
- while True:
- pokemon = random.choice(computerPokemon.availablePokemon)
- if pokemon.HP >=0:
- break
- returningPkmn = computerBattlingPokemon.baseClass
- returningPkmn.Name = computerBattlingPokemon.Name
- returningPkmn.maxHP = computerBattlingPokemon.maxHP
- returningPkmn.HP = computerBattlingPokemon.HP
- returningPkmn.AP = computerBattlingPokemon.AP
- returningPkmn.moves = computerBattlingPokemon.moves
- returningPkmn.typing = computerBattlingPokemon.typing
- returningPkmn.weakness = computerBattlingPokemon.weakness
- computerBattlingPokemon.maxHP = pokemon.maxHP
- computerBattlingPokemon.HP = pokemon.HP
- computerBattlingPokemon.Name = pokemon.Name
- computerBattlingPokemon.moves = pokemon.moves
- computerBattlingPokemon.typing = pokemon.typing
- computerBattlingPokemon.weakness = pokemon.weakness
- computerBattlingPokemon.AP = pokemon.AP
- computerBattlingPokemon.baseClass = pokemon
- #randomly picks the computer player's starting pokemon. A.B.
- def computerInitialization():
- battlingClass = random.choice(computerPokemon.availablePokemon)
- computerBattlingPokemon.Name = battlingClass.Name
- computerBattlingPokemon.maxHP = battlingClass.maxHP
- computerBattlingPokemon.HP = battlingClass.HP
- computerBattlingPokemon.AP = battlingClass.AP
- computerBattlingPokemon.moves = battlingClass.moves
- computerBattlingPokemon.typing = battlingClass.typing
- #list of types, for battle purposes
- typelisting = [fire, water, grass]
- #the core battle system. The basic mechanics were Josh, A.B. was responsible for refinining it and adding a few of the commands
- def encounter():
- computerInitialization()
- if computerPlayer.isTrainer == True:
- print "%s challenges you to a battle! They send out %s!" % (computerPlayer.Name, computerBattlingPokemon.Name)
- else:
- print 'A wild %s appears!' % computerBattlingPokemon.Name
- print "Which pokemon will you send out first?"
- for pokemon in playerPokemon.playerPokemonList:
- print "%s | HP: %d | AP: %d" % (pokemon.Name, pokemon.HP, pokemon.AP)
- position = int(raw_input("Enter 1 to switch to your first pokemon and so on"))
- pokemon = playerPokemon.playerPokemonList[position-1]
- if playerBattlingPokemon.Name == pokemon.Name and playerBattlingPokemon.AP == pokemon.AP:
- print "You are already using this pokemon"
- elif playerPokemon.playerPokemonList[position-1].HP <= 0:
- print "This pokemon is out of energy!"
- else:
- playerBattlingPokemon.maxHP = pokemon.maxHP
- playerBattlingPokemon.HP = pokemon.HP
- playerBattlingPokemon.Name = pokemon.Name
- playerBattlingPokemon.moves = pokemon.moves
- playerBattlingPokemon.typing = pokemon.typing
- playerBattlingPokemon.weakness = pokemon.weakness
- playerBattlingPokemon.AP = playerBattlingPokemon.AP
- playerBattlingPokemon.baseClass = pokemon
- while True:
- battle_choice = int(raw_input("""What will %s do?
- 1. Fight
- 2. Heal
- 3. Pokemon
- 4. Run
- 5. Poke Ball
- """ % playerBattlingPokemon.Name))
- if battle_choice == 1:
- for attack in playerBattlingPokemon.moves:
- print attack
- move = raw_input("Enter an attack exactly as shown.")
- if move in playerBattlingPokemon.moves:
- for typing in typelisting:
- if move in typing.moves:
- acc = typing.moves[move][1]
- power = typing.moves[move][0]
- if random.randint(1, 100) > acc:
- print "%s's %s missed!" % (playerBattlingPokemon.Name, move)
- if computerAI() == "Wild pokemon ran away":
- return 'L'
- else:
- damage = math.floor(random.randint(math.floor(power*0.6), power))+math.floor(playerBattlingPokemon.AP*0.15)+random.randint(-15, 15)
- if typing.name in computerBattlingPokemon.weakness:
- damage = damage*1.5
- print "%s is attacking. %s used %s! It dealt %d damage!" % (player.name, playerBattlingPokemon.Name, move, damage)
- computerBattlingPokemon.HP -= power
- result = deathHandler()
- if result == 'L' or result == 'W':
- return result
- if computerAI() == "Wild pokemon ran away":
- return 'L'
- else:
- continue
- else:
- print "No moves!"
- elif battle_choice == 2:
- playerBattlingPokemon.HP += 20
- if playerBattlingPokemon.HP > playerBattlingPokemon.maxHP:
- playerBattlingPokemon.HP = playerBattlingPokemon.maxHP
- result = deathHandler()
- if result == 'L' or result == 'W':
- return result
- if computerAI() == "Wild pokemon ran away":
- return 'L'
- elif battle_choice == 3:
- for pokemon in playerPokemon.playerPokemonList:
- print "%s | HP: %d | AP: %d" % (pokemon.Name, pokemon.HP, pokemon.AP)
- position = int(raw_input("Enter 1 to switch to your first pokemon and so on"))
- pokemon = playerPokemon.playerPokemonList[position-1]
- if playerBattlingPokemon.Name == pokemon.Name and playerBattlingPokemon.AP == pokemon.AP:
- print "You are already using this pokemon"
- elif playerPokemon.playerPokemonList[position-1].HP <= 0:
- print "This pokemon is out of energy!"
- else:
- returningPkmn = playerBattlingPokemon.baseClass
- returningPkmn.Name = playerBattlingPokemon.Name
- returningPkmn.maxHP = playerBattlingPokemon.maxHP
- returningPkmn.HP = playerBattlingPokemon.HP
- returningPkmn.AP = playerBattlingPokemon.AP
- returningPkmn.moves = playerBattlingPokemon.moves
- returningPkmn.typing = playerBattlingPokemon.typing
- returningPkmn.weakness = playerBattlingPokemon.weakness
- playerBattlingPokemon.maxHP = pokemon.maxHP
- playerBattlingPokemon.HP = pokemon.HP
- playerBattlingPokemon.Name = pokemon.Name
- playerBattlingPokemon.moves = pokemon.moves
- playerBattlingPokemon.typing = pokemon.typing
- playerBattlingPokemon.weakness = pokemon.weakness
- playerBattlingPokemon.AP = playerBattlingPokemon.AP
- playerBattlingPokemon.baseClass = pokemon
- result = deathHandler()
- if result == 'L' or result == 'W':
- return result
- if computerAI() == "Wild pokemon ran away":
- return 'L'
- elif battle_choice == 4:
- run = random.randint(1, 100)
- if run >= 80:
- print "You got away!"
- return "R"
- else:
- print "You failed to run away!"
- if computerAI() == "Wild pokemon ran away":
- return 'L'
- elif battle_choice == 5 and computerPlayer.isTrainer == False:
- print "You throw a pokeball!"
- catch = random.randint(1, 100)
- if catch > 80:
- #catching stuff
- return "C"
- print "You fail to catch the pokemon!"
- result = deathHandler()
- if result == 'L' or result == 'W':
- return result
- if computerAI() == "Wild pokemon ran away":
- return 'L'
- else:
- print "invalid!"
- def generateTrainer(potentialPokemonDataContainers, pokemonNumber = 2, maxPkmnLevel = 6, potentialNameList = ["Mike", "Loogmin", "Jackson", "Fitzroy", "Mr. Softee"], isTrainer = False):
- pkmnHolders = [computerPlayer.pkmn1, computerPlayer.pkmn2, computerPlayer.pkmn3, computerPlayer.pkmn4, computerPlayer.pkmn5, computerPlayer.pkmn6]
- computerPokemon.availablePokemon = []
- for iteration in range(0, pokemonNumber):
- computerPlayer.Name = random.choice(potentialNameList)
- pokemon = random.choice(potentialPokemonDataContainers)
- targetClass = pkmnHolders[iteration]
- targetClass.maxHP = pokemon.maxHP + (random.randint(maxPkmnLevel*-3, maxPkmnLevel)*3)
- targetClass.HP = pokemon.HP + (random.randint(maxPkmnLevel*-3, maxPkmnLevel)*3)
- targetClass.AP = pokemon.AP + random.randint(maxPkmnLevel*-3, maxPkmnLevel)
- targetClass.moves = pokemon.moves
- targetClass.Name = pokemon.Name
- targetClass.typing = pokemon.typing
- targetClass.weakness = pokemon.weakness
- pkmnholder = pkmnHolders[iteration]
- computerPokemon.availablePokemon.append(pkmnholder)
- computerPlayer.isTrainer = isTrainer
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement