-
Notifications
You must be signed in to change notification settings - Fork 10
/
player.py
168 lines (139 loc) · 7.09 KB
/
player.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
from random import random, randint
from time import sleep
def pprint(*args, **kwargs):
print('\t\t', *args, **kwargs)
class PokemonTrainer(object):
def __init__(self, name, currentLocation='Pallet Town', kind='player', startingPokemons=[], pokemonLimit=7, pokeballs=2, money=300, *args, **kwargs):
self.name = name
self.kind = kind
self.pokemonInHand = startingPokemons
self.pokemonLimit = pokemonLimit
self.archivePokemons = []
self.currentPokemon = None
self.pokeballs = pokeballs
self.currentLocation = currentLocation
self.items = {}
self.badges = []
self.money = money
def archiveExchange(self):
sleep(0.2)
if len(self.archivePokemons) == 0:
pprint("You don't have any pokemon in archive..."); sleep(0)
return
pprint("Pokemons in archive: ")
sleep(0.2)
for index, pokemon in enumerate(self.archivePokemons):
pprint(index+1, end=') ')
pokemon.printPokemon()
if pokemon.health > 0: nonzerohp+=1
sleep(0.3)
pprint()
pprint("Pokemon in Hand: ")
for index, pokemon in enumerate(self.pokemonInHand):
pprint(index+1, end=') ')
pokemon.printPokemon()
sleep(0.3)
pprint()
pprint("Select index of pokemon from archive: ", end=''); sleep(0.4)
archiveIndex = int(input())-1
pprint()
pprint("Select index of pokemon from hand: ", end=''); sleep(0.2)
handIndex = int(input())-1
if not (0 <= archiveIndex < len(self.archivePokemons)):
pprint("You don't have pokemon at that index in archive..."); sleep(0.2)
return
if not (0 <= handIndex < len(self.pokemonInHand)):
pprint("You don't have pokemon at that index in hand..."); sleep(0.2)
return
pprint("Pokemon Changed Succesfully..."); sleep(0.2)
self.pokemonInHand[handIndex], self.archivePokemons[archiveIndex] = self.archivePokemons[archiveIndex], self.pokemonInHand[handIndex]
self.switchPokemon()
return
def switchPokemon(self):
if self.kind == 'player':
pprint("Your Pokemons: ")
sleep(0.2)
nonzerohp = 0
for index, pokemon in enumerate(self.pokemonInHand):
pprint(index+1, end=') ')
pokemon.printPokemon()
if pokemon.health > 0: nonzerohp+=1
sleep(0.2)
pprint(f"Current Pokemon:"); sleep(0.2)
self.currentPokemon.printPokemon()
sleep(1)
if nonzerohp == 0: return False
chosen = False
while not chosen:
newCurrentPoke = int(input("\t\tWhich pokemon would you like to choose as current Pokemon? "))-1
if 0 <= newCurrentPoke < len(self.pokemonInHand):
if self.pokemonInHand[newCurrentPoke].health > 0:
self.currentPokemon = self.pokemonInHand[newCurrentPoke]
pprint(f"You chose {self.currentPokemon.name}"); sleep(0.2)
chosen = True
else:
pprint(f"{self.pokemonInHand[newCurrentPoke].name}'s health is zero. You can't chose it"); sleep(0.2)
else:
pprint(f"That is not a valid number. Please choose between 1 and {len(self.pokemonInHand)}"); sleep(0.2)
return True
else:
indexOfCurrent = self.pokemonInHand.index(self.currentPokemon)
if indexOfCurrent == self.pokemonLimit - 1: return False
self.currentPokemon = self.pokemonInHand[(indexOfCurrent+1)%len(self.pokemonInHand)]
if self.currentPokemon.health <= 0: return False
pprint(f"{self.name} Chose {self.currentPokemon.name}"); sleep(0.1)
return True
def catchPokemon(self, pokemonToCatch):
if self.pokeballs > 0:
pokemonHealth = pokemonToCatch.health
pokemonMaxHealth = pokemonToCatch.maxHealth
probabilityToCatch = 1 - (pokemonHealth/pokemonMaxHealth)
requiredCut = 0.6 + 0.2*random()
if probabilityToCatch >= requiredCut and pokemonHealth <= 40 + pokemonToCatch.level:
pprint(f"{pokemonToCatch.name} was caught!\n"); sleep(0.3)
self.pokeballs -= 1
if len(self.pokemonInHand) < self.pokemonLimit:
self.pokemonInHand.append(pokemonToCatch)
else:
self.archivePokemons.append(pokemonToCatch)
pprint(); pprint("Press Enter to Continue", end=' '); input()
return True
else:
pprint(f"{pokemonToCatch.name} wasn't caught..."); sleep(0.3)
self.pokeballs -= 1
pprint(); pprint("Press Enter to Continue", end=' '); input()
return False
else:
pprint("You don't have pokeballs !!\n"); sleep(0.3)
pprint(); pprint("Press Enter to Continue", end=' '); input()
return False
def printTrainer(self, showAllpoke=False):
if self.kind == 'player':
pprint("+--------------------------------------------------------------------------+"); sleep(0.2)
pprint()
pprint(f"Name: {self.name}"); sleep(0.2)
pprint(f"Current Pokemon: {self.currentPokemon.name}"); sleep(0.2)
pprint(f"Pokeballs left: {self.pokeballs}"); sleep(0.2)
pprint(f"Items: {self.items}"); sleep(0.2)
pprint(f"Gym Badges: {self.badges}"); sleep(0.2)
pprint(f"Money: {self.money}"); sleep(0.2)
pprint()
if showAllpoke:
for pokemon in self.pokemonInHand:
pokemon.displayStats(detailed=True); sleep(0)
pprint()
pprint("+--------------------------------------------------------------------------+")
else:
pprint("+-----------------------------------------------------+"); sleep(0.2)
pprint()
pprint(f"Name: {self.name}"); sleep(0.2)
pprint(f"Number of pokemons: {len(self.pokemonInHand)}"); sleep(0.2)
pprint(f"Money: $ {self.money}"); sleep(0.2)
pprint()
pprint("+-----------------------------------------------------+")
def healAllpoke(self):
sleep(0.2)
if self.kind == 'player':
pprint("All your pokemons have been healed..."); sleep(1.2)
for pokemon in self.pokemonInHand:
pokemon.visitPokemonCentre()