1+ import time
2+ import numpy as np
3+ import sys
4+
5+ # Delay printing
6+
7+ def delay_print (s ):
8+ # print one character at a time
9+ # https://stackoverflow.com/questions/9246076/how-to-print-one-character-at-a-time-on-one-line
10+ for c in s :
11+ sys .stdout .write (c )
12+ sys .stdout .flush ()
13+ time .sleep (0.05 )
14+
15+ # Create the class
16+ class Pokemon :
17+ def __init__ (self , name , types , moves , EVs , health = '===================' ):
18+ # save variables as attributes
19+ self .name = name
20+ self .types = types
21+ self .moves = moves
22+ self .attack = EVs ['ATTACK' ]
23+ self .defense = EVs ['DEFENSE' ]
24+ self .health = health
25+ self .bars = 20 # Amount of health bars
26+
27+
28+ def fight (self , Pokemon2 ):
29+ # Allow two pokemon to fight each other
30+
31+ # Print fight information
32+ print ("-----POKEMONE BATTLE-----" )
33+ print (f"\n { self .name } " )
34+ print ("TYPE/" , self .types )
35+ print ("ATTACK/" , self .attack )
36+ print ("DEFENSE/" , self .defense )
37+ print ("LVL/" , 3 * (1 + np .mean ([self .attack ,self .defense ])))
38+ print ("\n VS" )
39+ print (f"\n { Pokemon2 .name } " )
40+ print ("TYPE/" , Pokemon2 .types )
41+ print ("ATTACK/" , Pokemon2 .attack )
42+ print ("DEFENSE/" , Pokemon2 .defense )
43+ print ("LVL/" , 3 * (1 + np .mean ([Pokemon2 .attack ,Pokemon2 .defense ])))
44+
45+ time .sleep (2 )
46+
47+ # Consider type advantages
48+ version = ['Fire' , 'Water' , 'Grass' ]
49+ for i ,k in enumerate (version ):
50+ if self .types == k :
51+ # Both are same type
52+ if Pokemon2 .types == k :
53+ string_1_attack = '\n Its not very effective...'
54+ string_2_attack = '\n Its not very effective...'
55+
56+ # Pokemon2 is STRONG
57+ if Pokemon2 .types == version [(i + 1 )% 3 ]:
58+ Pokemon2 .attack *= 2
59+ Pokemon2 .defense *= 2
60+ self .attack /= 2
61+ self .defense /= 2
62+ string_1_attack = '\n Its not very effective...'
63+ string_2_attack = '\n Its super effective!'
64+
65+ # Pokemon2 is WEAK
66+ if Pokemon2 .types == version [(i + 2 )% 3 ]:
67+ self .attack *= 2
68+ self .defense *= 2
69+ Pokemon2 .attack /= 2
70+ Pokemon2 .defense /= 2
71+ string_1_attack = '\n Its super effective!'
72+ string_2_attack = '\n Its not very effective...'
73+
74+
75+ # Now for the actual fighting...
76+ # Continue while pokemon still have health
77+ while (self .bars > 0 ) and (Pokemon2 .bars > 0 ):
78+ # Print the health of each pokemon
79+ print (f"\n { self .name } \t \t HLTH\t { self .health } " )
80+ print (f"{ Pokemon2 .name } \t \t HLTH\t { Pokemon2 .health } \n " )
81+
82+ print (f"Go { self .name } !" )
83+ for i , x in enumerate (self .moves ):
84+ print (f"{ i + 1 } ." , x )
85+ index = int (input ('Pick a move: ' ))
86+ delay_print (f"\n { self .name } used { self .moves [index - 1 ]} !" )
87+ time .sleep (1 )
88+ delay_print (string_1_attack )
89+
90+ # Determine damage
91+ Pokemon2 .bars -= self .attack
92+ Pokemon2 .health = ""
93+
94+ # Add back bars plus defense boost
95+ for j in range (int (Pokemon2 .bars + .1 * Pokemon2 .defense )):
96+ Pokemon2 .health += "="
97+
98+ time .sleep (1 )
99+ print (f"\n { self .name } \t \t HLTH\t { self .health } " )
100+ print (f"{ Pokemon2 .name } \t \t HLTH\t { Pokemon2 .health } \n " )
101+ time .sleep (.5 )
102+
103+ # Check to see if Pokemon fainted
104+ if Pokemon2 .bars <= 0 :
105+ delay_print ("\n ..." + Pokemon2 .name + ' fainted.' )
106+ break
107+
108+ # Pokemon2s turn
109+
110+ print (f"Go { Pokemon2 .name } !" )
111+ for i , x in enumerate (Pokemon2 .moves ):
112+ print (f"{ i + 1 } ." , x )
113+ index = int (input ('Pick a move: ' ))
114+ delay_print (f"\n { Pokemon2 .name } used { Pokemon2 .moves [index - 1 ]} !" )
115+ time .sleep (1 )
116+ delay_print (string_2_attack )
117+
118+ # Determine damage
119+ self .bars -= Pokemon2 .attack
120+ self .health = ""
121+
122+ # Add back bars plus defense boost
123+ for j in range (int (self .bars + .1 * self .defense )):
124+ self .health += "="
125+
126+ time .sleep (1 )
127+ print (f"{ self .name } \t \t HLTH\t { self .health } " )
128+ print (f"{ Pokemon2 .name } \t \t HLTH\t { Pokemon2 .health } \n " )
129+ time .sleep (.5 )
130+
131+ # Check to see if Pokemon fainted
132+ if self .bars <= 0 :
133+ delay_print ("\n ..." + self .name + ' fainted.' )
134+ break
135+
136+ money = np .random .choice (5000 )
137+ delay_print (f"\n Opponent paid you ${ money } .\n " )
138+
139+
140+
141+
142+
143+
144+ if __name__ == '__main__' :
145+ #Create Pokemon
146+ Charizard = Pokemon ('Charizard' , 'Fire' , ['Flamethrower' , 'Fly' , 'Blast Burn' , 'Fire Punch' ], {'ATTACK' :12 , 'DEFENSE' : 8 })
147+ Blastoise = Pokemon ('Blastoise' , 'Water' , ['Water Gun' , 'Bubblebeam' , 'Hydro Pump' , 'Surf' ],{'ATTACK' : 10 , 'DEFENSE' :10 })
148+ Venusaur = Pokemon ('Venusaur' , 'Grass' , ['Vine Wip' , 'Razor Leaf' , 'Earthquake' , 'Frenzy Plant' ],{'ATTACK' :8 , 'DEFENSE' :12 })
149+
150+ Charmander = Pokemon ('Charmander' , 'Fire' , ['Ember' , 'Scratch' , 'Tackle' , 'Fire Punch' ],{'ATTACK' :4 , 'DEFENSE' :2 })
151+ Squirtle = Pokemon ('Squirtle' , 'Water' , ['Bubblebeam' , 'Tackle' , 'Headbutt' , 'Surf' ],{'ATTACK' : 3 , 'DEFENSE' :3 })
152+ Bulbasaur = Pokemon ('Bulbasaur' , 'Grass' , ['Vine Wip' , 'Razor Leaf' , 'Tackle' , 'Leech Seed' ],{'ATTACK' :2 , 'DEFENSE' :4 })
153+
154+ Charmeleon = Pokemon ('Charmeleon' , 'Fire' , ['Ember' , 'Scratch' , 'Flamethrower' , 'Fire Punch' ],{'ATTACK' :6 , 'DEFENSE' :5 })
155+ Wartortle = Pokemon ('Wartortle' , 'Water' , ['Bubblebeam' , 'Water Gun' , 'Headbutt' , 'Surf' ],{'ATTACK' : 5 , 'DEFENSE' :5 })
156+ Ivysaur = Pokemon ('Ivysaur\t ' , 'Grass' , ['Vine Wip' , 'Razor Leaf' , 'Bullet Seed' , 'Leech Seed' ],{'ATTACK' :4 , 'DEFENSE' :6 })
157+
158+
159+ Charizard .fight (Squirtle ) # Get them to fight
0 commit comments