Advertisement
Guest User

Untitled

a guest
Jan 15th, 2020
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.87 KB | None | 0 0
  1. #battle system by Joshua Sumague, Joshua Torres, Ethan
  2. import math
  3. import random
  4. import os
  5. import time
  6. from typedata import *
  7. from player import *
  8. #import typedata
  9. #computer player definition. A.B.
  10. class computerPlayer:
  11. name = "???"
  12. isTrainer = True
  13. class pkmn1:
  14. maxHP = 10
  15. HP = 10
  16. AP = 1
  17. moves = ["Ember"]
  18. Name = "Charmander"
  19. typing = "Fire"
  20. weakness = ["Water"]
  21. class pkmn2:
  22. maxHP = 10
  23. HP = 10
  24. AP = 1
  25. moves = ["Ember"]
  26. Name = "Charmander"
  27. typing = "Fire"
  28. weakness = ["Water"]
  29. class pkmn3:
  30. Name = "?"
  31. maxHP = 10
  32. HP = 10
  33. AP = 1
  34. moves = ["Ember"]
  35. Name = "Charmander"
  36. typing = "Fire"
  37. weakness = ["Water"]
  38. class pkmn4:
  39. Name = "?"
  40. maxHP = 10
  41. HP = 10
  42. AP = 1
  43. moves = ["Ember"]
  44. Name = "Charmander"
  45. typing = "Fire"
  46. weakness = ["Water"]
  47. class pkmn5:
  48. maxHP = 10
  49. HP = 10
  50. AP = 1
  51. moves = ["Ember"]
  52. Name = "Charmander"
  53. typing = "Fire"
  54. weakness = ["Water"]
  55. class pkmn6:
  56. maxHP = 10
  57. HP = 10
  58. AP = 1
  59. moves = ["Ember"]
  60. Name = "Charmander"
  61. typing = "Fire"
  62. weakness = ["Water"]
  63. #holds the computer player's current pokemon. A.B.
  64. class computerBattlingPokemon:
  65. maxHP = 10
  66. HP = 10
  67. AP = 1
  68. moves = ["Ember"]
  69. Name = "Charmander"
  70. typing = "Fire"
  71. weakness = ["Water"]
  72. baseClass = computerPlayer.pkmn1
  73. #stores the list in a readily changeable format. A.B.
  74. class computerPokemon:
  75. availablePokemon = [computerPlayer.pkmn1]
  76. #death handler, for checking for losses and faints. A.B.
  77. def deathHandler():
  78. if playerBattlingPokemon.HP <= 0:
  79. print "%s fainted!" % playerBattlingPokemon.Name
  80. for pokemon in playerPokemon.playerPokemonList:
  81. print "%s | HP: %d | AP: %d" % (pokemon.Name, pokemon.HP, pokemon.AP)
  82. position = int(raw_input("Enter 1 to switch to your first pokemon and so on"))
  83. pokemon = playerPokemon.playerPokemonList[position-1]
  84. if playerBattlingPokemon.Name == pokemon.Name and playerBattlingPokemon.AP == pokemon.AP:
  85. print "You are already using this pokemon"
  86. elif playerPokemon.playerPokemonList[position-1].HP <= 0:
  87. print "This pokemon is out of energy!"
  88. else:
  89. returningPkmn = playerBattlingPokemon.baseClass
  90. returningPkmn.Name = playerBattlingPokemon.Name
  91. returningPkmn.maxHP = playerBattlingPokemon.maxHP
  92. returningPkmn.HP = playerBattlingPokemon.HP
  93. returningPkmn.AP = playerBattlingPokemon.AP
  94. returningPkmn.moves = playerBattlingPokemon.moves
  95. returningPkmn.typing = playerBattlingPokemon.typing
  96. returningPkmn.weakness = playerBattlingPokemon.weakness
  97. playerBattlingPokemon.maxHP = pokemon.maxHP
  98. playerBattlingPokemon.HP = pokemon.HP
  99. playerBattlingPokemon.Name = pokemon.Name
  100. playerBattlingPokemon.moves = pokemon.moves
  101. playerBattlingPokemon.typing = pokemon.typing
  102. playerBattlingPokemon.weakness = pokemon.weakness
  103. playerBattlingPokemon.AP = playerBattlingPokemon.AP
  104. playerBattlingPokemon.baseClass = pokemon
  105. if computerBattlingPokemon.HP <= 0:
  106. returningPkmn = computerBattlingPokemon.baseClass
  107. while True:
  108. pokemon = random.choice(computerPokemon.availablePokemon)
  109. if pokemon.HP >=0:
  110. break
  111. returningPkmn = computerBattlingPokemon.baseClass
  112. returningPkmn.Name = computerBattlingPokemon.Name
  113. returningPkmn.maxHP = computerBattlingPokemon.maxHP
  114. returningPkmn.HP = computerBattlingPokemon.HP
  115. returningPkmn.AP = computerBattlingPokemon.AP
  116. returningPkmn.moves = computerBattlingPokemon.moves
  117. returningPkmn.typing = computerBattlingPokemon.typing
  118. returningPkmn.weakness = computerBattlingPokemon.weakness
  119. computerBattlingPokemon.maxHP = pokemon.maxHP
  120. computerBattlingPokemon.HP = pokemon.HP
  121. computerBattlingPokemon.Name = pokemon.Name
  122. computerBattlingPokemon.moves = pokemon.moves
  123. computerBattlingPokemon.typing = pokemon.typing
  124. computerBattlingPokemon.weakness = pokemon.weakness
  125. computerBattlingPokemon.AP = pokemon.AP
  126. computerBattlingPokemon.baseClass = pokemon
  127. counter = 0
  128. for pokemon in playerPokemon.playerPokemonList:
  129. if pokemon.HP <=0:
  130. counter += 1
  131. if counter == len(playerPokemon.playerPokemonList):
  132. print "%s lost!" % player.name
  133. return 'L'
  134. counter = 0
  135. for pokemon in computerPokemon.availablePokemon:
  136. if pokemon.HP <=0:
  137. counter += 1
  138. if counter == len(computerPokemon.availablePokemon):
  139. print "%s won!" % player.name
  140. return 'W'
  141. #computer A.I. script. A.B.
  142. def computerAI():
  143. actionNumber = random.randint(1, 6)
  144. if computerPlayer.isTrainer == False:
  145. if actionNumber >= 4:
  146. move = random.choice(computerBattlingPokemon.moves)
  147. for typing in typelisting:
  148. if move in typing.moves:
  149. acc = typing.moves[move][1]
  150. power = typing.moves[move][0]
  151. if random.randint(1, 100) > acc:
  152. print "%s's %s missed!" % (computerBattlingPokemon.Name, move)
  153. else:
  154. damage = math.floor(random.randint(math.floor(power*0.3), power)*0.4)+math.floor(computerBattlingPokemon.AP*0.15)+random.randint(-15, 15)
  155. if typing.name in playerBattlingPokemon.weakness:
  156. damage = damage*1.5
  157. print "%s is attacking. %s used %s! It dealt %d damage!" % (computerPlayer.Name, computerBattlingPokemon.Name, move, damage)
  158. playerBattlingPokemon.HP -= power
  159. else:
  160. print "The %s fled!" % computerBattlingPokemon.Name
  161. return "Wild pokemon ran away"
  162. else:
  163. if computerBattlingPokemon.HP <= 0:
  164. returningPkmn = computerBattlingPokemon.baseClass
  165. while True:
  166. pokemon = random.choice(computerPokemon.availablePokemon)
  167. if pokemon.HP >=0:
  168. break
  169. returningPkmn = computerBattlingPokemon.baseClass
  170. returningPkmn.Name = computerBattlingPokemon.Name
  171. returningPkmn.maxHP = computerBattlingPokemon.maxHP
  172. returningPkmn.HP = computerBattlingPokemon.HP
  173. returningPkmn.AP = computerBattlingPokemon.AP
  174. returningPkmn.moves = computerBattlingPokemon.moves
  175. returningPkmn.typing = computerBattlingPokemon.typing
  176. returningPkmn.weakness = computerBattlingPokemon.weakness
  177. print "%s sends out %s!" % (computerPlayer.name, pokemon.Name)
  178. computerBattlingPokemon.maxHP = pokemon.maxHP
  179. computerBattlingPokemon.HP = pokemon.HP
  180. computerBattlingPokemon.Name = pokemon.Name
  181. computerBattlingPokemon.moves = pokemon.moves
  182. computerBattlingPokemon.typing = pokemon.typing
  183. computerBattlingPokemon.weakness = pokemon.weakness
  184. computerBattlingPokemon.AP = pokemon.AP
  185. computerBattlingPokemon.baseClass = pokemon
  186. elif actionNumber >= 4:
  187. move = random.choice(computerBattlingPokemon.moves)
  188. for typing in typelisting:
  189. if move in typing.moves:
  190. acc = typing.moves[move][1]
  191. power = typing.moves[move][0]
  192. if random.randint(1, 100) > acc:
  193. print "%s's %s missed!" % (computerBattlingPokemon.Name, move)
  194. else:
  195. damage = math.floor(random.randint(math.floor(power*0.3), power)*0.4)+math.floor(computerBattlingPokemon.AP*0.15)+random.randint(-15, 15)
  196. print "%s is attacking. %s used %s! It dealt %d damage!" % (computerPlayer.Name, computerBattlingPokemon.Name, move, damage)
  197. playerBattlingPokemon.HP -= power
  198. elif actionNumber == 5:
  199. print "%s heals their Pokemon!"
  200. computerBattlingPokemon.HP += 20
  201. if computerBattlingPokemon.HP > computerBattlingPokemon.maxHP:
  202. computerBattlingPokemon.HP = computerBattlingPokemon.maxHP
  203. else:
  204. returningPkmn = computerBattlingPokemon.baseClass
  205. while True:
  206. pokemon = random.choice(computerPokemon.availablePokemon)
  207. if pokemon.HP >=0:
  208. break
  209. returningPkmn = computerBattlingPokemon.baseClass
  210. returningPkmn.Name = computerBattlingPokemon.Name
  211. returningPkmn.maxHP = computerBattlingPokemon.maxHP
  212. returningPkmn.HP = computerBattlingPokemon.HP
  213. returningPkmn.AP = computerBattlingPokemon.AP
  214. returningPkmn.moves = computerBattlingPokemon.moves
  215. returningPkmn.typing = computerBattlingPokemon.typing
  216. returningPkmn.weakness = computerBattlingPokemon.weakness
  217. computerBattlingPokemon.maxHP = pokemon.maxHP
  218. computerBattlingPokemon.HP = pokemon.HP
  219. computerBattlingPokemon.Name = pokemon.Name
  220. computerBattlingPokemon.moves = pokemon.moves
  221. computerBattlingPokemon.typing = pokemon.typing
  222. computerBattlingPokemon.weakness = pokemon.weakness
  223. computerBattlingPokemon.AP = pokemon.AP
  224. computerBattlingPokemon.baseClass = pokemon
  225. #randomly picks the computer player's starting pokemon. A.B.
  226. def computerInitialization():
  227. battlingClass = random.choice(computerPokemon.availablePokemon)
  228. computerBattlingPokemon.Name = battlingClass.Name
  229. computerBattlingPokemon.maxHP = battlingClass.maxHP
  230. computerBattlingPokemon.HP = battlingClass.HP
  231. computerBattlingPokemon.AP = battlingClass.AP
  232. computerBattlingPokemon.moves = battlingClass.moves
  233. computerBattlingPokemon.typing = battlingClass.typing
  234. #list of types, for battle purposes
  235. typelisting = [fire, water, grass]
  236. #the core battle system. The basic mechanics were Josh, A.B. was responsible for refinining it and adding a few of the commands
  237. def encounter():
  238. computerInitialization()
  239. if computerPlayer.isTrainer == True:
  240. print "%s challenges you to a battle! They send out %s!" % (computerPlayer.Name, computerBattlingPokemon.Name)
  241. else:
  242. print 'A wild %s appears!' % computerBattlingPokemon.Name
  243. print "Which pokemon will you send out first?"
  244. for pokemon in playerPokemon.playerPokemonList:
  245. print "%s | HP: %d | AP: %d" % (pokemon.Name, pokemon.HP, pokemon.AP)
  246. position = int(raw_input("Enter 1 to switch to your first pokemon and so on"))
  247. pokemon = playerPokemon.playerPokemonList[position-1]
  248. if playerBattlingPokemon.Name == pokemon.Name and playerBattlingPokemon.AP == pokemon.AP:
  249. print "You are already using this pokemon"
  250. elif playerPokemon.playerPokemonList[position-1].HP <= 0:
  251. print "This pokemon is out of energy!"
  252. else:
  253. playerBattlingPokemon.maxHP = pokemon.maxHP
  254. playerBattlingPokemon.HP = pokemon.HP
  255. playerBattlingPokemon.Name = pokemon.Name
  256. playerBattlingPokemon.moves = pokemon.moves
  257. playerBattlingPokemon.typing = pokemon.typing
  258. playerBattlingPokemon.weakness = pokemon.weakness
  259. playerBattlingPokemon.AP = playerBattlingPokemon.AP
  260. playerBattlingPokemon.baseClass = pokemon
  261. while True:
  262. battle_choice = int(raw_input("""What will %s do?
  263.  
  264. 1. Fight
  265. 2. Heal
  266. 3. Pokemon
  267. 4. Run
  268. 5. Poke Ball
  269. """ % playerBattlingPokemon.Name))
  270. if battle_choice == 1:
  271. for attack in playerBattlingPokemon.moves:
  272. print attack
  273. move = raw_input("Enter an attack exactly as shown.")
  274. if move in playerBattlingPokemon.moves:
  275. for typing in typelisting:
  276. if move in typing.moves:
  277. acc = typing.moves[move][1]
  278. power = typing.moves[move][0]
  279. if random.randint(1, 100) > acc:
  280. print "%s's %s missed!" % (playerBattlingPokemon.Name, move)
  281. if computerAI() == "Wild pokemon ran away":
  282. return 'L'
  283. else:
  284. damage = math.floor(random.randint(math.floor(power*0.6), power))+math.floor(playerBattlingPokemon.AP*0.15)+random.randint(-15, 15)
  285. if typing.name in computerBattlingPokemon.weakness:
  286. damage = damage*1.5
  287. print "%s is attacking. %s used %s! It dealt %d damage!" % (player.name, playerBattlingPokemon.Name, move, damage)
  288. computerBattlingPokemon.HP -= power
  289. result = deathHandler()
  290. if result == 'L' or result == 'W':
  291. return result
  292. if computerAI() == "Wild pokemon ran away":
  293. return 'L'
  294. else:
  295. continue
  296. else:
  297. print "No moves!"
  298. elif battle_choice == 2:
  299. playerBattlingPokemon.HP += 20
  300. if playerBattlingPokemon.HP > playerBattlingPokemon.maxHP:
  301. playerBattlingPokemon.HP = playerBattlingPokemon.maxHP
  302. result = deathHandler()
  303. if result == 'L' or result == 'W':
  304. return result
  305. if computerAI() == "Wild pokemon ran away":
  306. return 'L'
  307. elif battle_choice == 3:
  308. for pokemon in playerPokemon.playerPokemonList:
  309. print "%s | HP: %d | AP: %d" % (pokemon.Name, pokemon.HP, pokemon.AP)
  310. position = int(raw_input("Enter 1 to switch to your first pokemon and so on"))
  311. pokemon = playerPokemon.playerPokemonList[position-1]
  312. if playerBattlingPokemon.Name == pokemon.Name and playerBattlingPokemon.AP == pokemon.AP:
  313. print "You are already using this pokemon"
  314. elif playerPokemon.playerPokemonList[position-1].HP <= 0:
  315. print "This pokemon is out of energy!"
  316. else:
  317. returningPkmn = playerBattlingPokemon.baseClass
  318. returningPkmn.Name = playerBattlingPokemon.Name
  319. returningPkmn.maxHP = playerBattlingPokemon.maxHP
  320. returningPkmn.HP = playerBattlingPokemon.HP
  321. returningPkmn.AP = playerBattlingPokemon.AP
  322. returningPkmn.moves = playerBattlingPokemon.moves
  323. returningPkmn.typing = playerBattlingPokemon.typing
  324. returningPkmn.weakness = playerBattlingPokemon.weakness
  325. playerBattlingPokemon.maxHP = pokemon.maxHP
  326. playerBattlingPokemon.HP = pokemon.HP
  327. playerBattlingPokemon.Name = pokemon.Name
  328. playerBattlingPokemon.moves = pokemon.moves
  329. playerBattlingPokemon.typing = pokemon.typing
  330. playerBattlingPokemon.weakness = pokemon.weakness
  331. playerBattlingPokemon.AP = playerBattlingPokemon.AP
  332. playerBattlingPokemon.baseClass = pokemon
  333. result = deathHandler()
  334. if result == 'L' or result == 'W':
  335. return result
  336. if computerAI() == "Wild pokemon ran away":
  337. return 'L'
  338. elif battle_choice == 4:
  339. run = random.randint(1, 100)
  340. if run >= 80:
  341. print "You got away!"
  342. return "R"
  343. else:
  344. print "You failed to run away!"
  345. if computerAI() == "Wild pokemon ran away":
  346. return 'L'
  347. elif battle_choice == 5 and computerPlayer.isTrainer == False:
  348. print "You throw a pokeball!"
  349. catch = random.randint(1, 100)
  350. if catch > 80:
  351. #catching stuff
  352. return "C"
  353. print "You fail to catch the pokemon!"
  354. result = deathHandler()
  355. if result == 'L' or result == 'W':
  356. return result
  357. if computerAI() == "Wild pokemon ran away":
  358. return 'L'
  359. else:
  360. print "invalid!"
  361. def generateTrainer(potentialPokemonDataContainers, pokemonNumber = 2, maxPkmnLevel = 6, potentialNameList = ["Mike", "Loogmin", "Jackson", "Fitzroy", "Mr. Softee"], isTrainer = False):
  362. pkmnHolders = [computerPlayer.pkmn1, computerPlayer.pkmn2, computerPlayer.pkmn3, computerPlayer.pkmn4, computerPlayer.pkmn5, computerPlayer.pkmn6]
  363. computerPokemon.availablePokemon = []
  364. for iteration in range(0, pokemonNumber):
  365. computerPlayer.Name = random.choice(potentialNameList)
  366. pokemon = random.choice(potentialPokemonDataContainers)
  367. targetClass = pkmnHolders[iteration]
  368. targetClass.maxHP = pokemon.maxHP + (random.randint(maxPkmnLevel*-3, maxPkmnLevel)*3)
  369. targetClass.HP = pokemon.HP + (random.randint(maxPkmnLevel*-3, maxPkmnLevel)*3)
  370. targetClass.AP = pokemon.AP + random.randint(maxPkmnLevel*-3, maxPkmnLevel)
  371. targetClass.moves = pokemon.moves
  372. targetClass.Name = pokemon.Name
  373. targetClass.typing = pokemon.typing
  374. targetClass.weakness = pokemon.weakness
  375. pkmnholder = pkmnHolders[iteration]
  376. computerPokemon.availablePokemon.append(pkmnholder)
  377. computerPlayer.isTrainer = isTrainer
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement