· 10 years ago · Aug 28, 2016, 04:16 AM
1from collections import OrderedDict as OD
2import re
3import sys
4import random
5
6# Opens table; assigns cursor name
7import sqlite3
8conn = sqlite3.connect('pw')
9c = conn.cursor()
10##################################
11
12'''
13 ##############For copy/paste###############
14 ID,
15 name,
16 primary_type,
17 secondary_type,
18 min_hp,
19 max_hp,
20 min_attack,
21 max_attack,
22 min_defense,
23 max_defense,
24 min_sp_attack,
25 max_sp_attack,
26 min_sp_defense,
27 max_sp_defense,
28 min_speed,
29 max_speed
30 ##############For copy/paste###############
31'''
32
33c.execute('''CREATE TABLE IF NOT EXISTS pokemon_index(ID INTEGER PRIMARY KEY NOT NULL, name TEXT NOT NULL,
34primary_type TEXT NOT NULL, secondary_type TEXT NOT NULl, min_hp INT NOT NULL, max_hp INT NOT NULL, min_attack
35INT NOT NULL, max_attack INT NOT NULL, min_defense INT NOT NULL, max_defense INT NOT NULL, min_sp_attack INT
36NOT NULL, max_sp_attack INT NOT NULL, min_sp_defense INT NOT NULL, max_sp_defense INT NOT NULL, min_speed INT
37NOT NULL, max_speed INT NOT NULL, moves TEXT)''') # Create pokemon_index table if one does not already exist
38
39c.execute('''CREATE TABLE IF NOT EXISTS move_index(ID INT PRIMARY KEY, name TEXT NOT NULL,
40move_type TEXT NOT NULL, category TEXT NOT NULL,
41pp INT NOT NULL, power INT NOT NULL, accuracy INT NOT NULL)''') # Create pokemon_index table if one does not already exist
42
43run = True # Runs by default
44while(run == True): # Program loop
45
46
47 def pull_moves(x,l):
48
49 ID = x
50 level = l
51 bracket_check = False
52 level_check = False
53 final_check = False
54 final_pass = False
55 move_list = []
56
57 print("Level: %d" % level)
58
59 cursor_hold = c.execute('SELECT moves FROM pokemon_index WHERE ID = ?',(ID,)).fetchone()[0]
60 move_array = str(cursor_hold)
61
62 for values in move_array: # Sorts through list of values in move_array
63
64 if final_check == True:
65 final_pass = True
66 if values == "[": # Is it a bracket?
67 bracket_check = True
68 if bracket_check == True and values.isdigit() and level_check == False: # Defines move level
69 move_level = int(values)
70 print("Move level: %d" % move_level)
71 if move_level > level:
72 break
73 if values == ",":
74 final_check = True
75 if final_pass == True and move_level <= level: # Pulls integers from ingredient_index; finds values in ingredients table; stores name from ingredients
76 cursor_hold = c.execute('SELECT name FROM move_index WHERE ID = ?',(values,)).fetchone()[0]
77 temp_string = str(cursor_hold)
78 move_list.append(values)
79 move_level = 0
80 final_pass = False
81 final_check = False
82 level_check = False
83 bracket_check = False
84
85 return move_list
86
87 for x in range(0,len(move_list)):
88 print("- " + str(move_list[x]))
89
90 def pull_move(x):
91 xx = int(x)
92 if xx == 000:
93 move_list = ["---","---","---","---","---","---","---"]
94 else:
95 pulled_move = c.execute("SELECT * FROM move_index WHERE ID = ?",(x,)).fetchone()
96 move_list = list(pulled_move)
97 return move_list
98
99 def level_adjustment(x,y,l): # x = low, y = high, l = level
100 level_adjustment = float(y - x) / 99
101 level_stats = round(x + (level_adjustment * l) - (level_adjustment))
102 return level_stats
103
104 def pull_stats(n,l): # Searches for Pokemon name; pulls row and passes it to new_list (appends level)
105
106 name = n
107 level = l
108 cursor_hold = c.execute('SELECT * FROM pokemon_index WHERE name = ?',(name,)).fetchone()
109 new_list = list(cursor_hold)
110 new_list.insert(0,level)
111 return new_list
112
113
114 def test_move(n,i):
115
116 ID = i
117 name = n
118 move_type = "Normal"
119 category = "Physical"
120 pp = 35
121 power = 40
122 accuracy = 100
123
124 moves_list = [
125 ID,
126 name,
127 move_type,
128 category,
129 pp,
130 power,
131 accuracy
132 ]
133
134 return moves_list
135
136 def test_stats(): # Set of test values for adding Pokemon to database; returns values as list
137
138 level = 4
139 ID = 1
140 name = "Bulbasaur"
141 primary_type = "Grass"
142 secondary_type = "Poision"
143 min_hp = 45
144 max_hp = 200
145 min_attack = 49
146 max_attack = 92
147 min_defense = 49
148 max_defense = 92
149 min_sp_attack = 65
150 max_sp_attack = 121
151 min_sp_defense = 65
152 max_sp_defense = 121
153 min_speed = 45
154 max_speed = 80
155
156 stats_list = [
157 level,
158 ID,
159 name,
160 primary_type,
161 secondary_type,
162 min_hp,
163 max_hp,
164 min_attack,
165 max_attack,
166 min_defense,
167 max_defense,
168 min_sp_attack,
169 max_sp_attack,
170 min_sp_defense,
171 max_sp_defense,
172 min_speed,
173 max_speed
174 ]
175 return stats_list
176
177 def return_move_id(m):
178 c.execute("SELECT ID FROM move_index WHERE name = (?)",(m,))
179 cursor_hold = c.fetchone()
180 ID = cursor_hold[0]
181 return ID
182
183 def move_check(m):
184 c.execute("SELECT name FROM move_index WHERE name = ?",(m,))
185 data = c.fetchone()
186
187 print data
188
189 if data is None:
190 move_id = input("Move ID: ")
191 move_type = raw_input("Move type: ")
192 category = raw_input("Category: ")
193 pp = input("PowerPoints (PP): ")
194 power = input("Power: ")
195 accuracy = input("Accuracy: ")
196
197 c.execute("INSERT INTO move_index VALUES(?,?,?,?,?,?,?)",(move_id,m,move_type,category,pp,power,accuracy))
198 conn.commit()
199
200
201 def new_stats(): # Function for gathering new Pokemon stats; returns results as list
202
203 gather_moves = 1
204 packed_move_list = []
205
206 level = input("Pokemon level: ")
207 ID = input("Pokemon ID: ")
208 name = raw_input("Pokemon name: ")
209 primary_type = raw_input("Pokemon primary type: ")
210 secondary_type = raw_input("Pokemon secondary type: ")
211 min_hp = input("Pokemon minimum hitpoints: ")
212 max_hp = input("Pokemon maximum hitpoints: ")
213 min_attack = input("Pokemon minimum attack: ")
214 max_attack = input("Pokemon maximum attack: ")
215 min_defense = input("Pokemon minimum defense: ")
216 max_defense = input("Pokemon maximum defense: ")
217 min_sp_attack = input("Pokemon minimum special attack: ")
218 max_sp_attack = input("Pokemon maximum special attack: ")
219 min_sp_defense = input("Pokemon minimum special defense: ")
220 max_sp_defense = input("Pokemon maximum special defense: ")
221 min_speed = input("Pokemon minimum speed: ")
222 max_speed = input("Pokemon maximum speed: ")
223
224 while(gather_moves == 1):
225 packed_move_list = []
226 move_name = raw_input("Enter name of move: ")
227 move_level = input("Enter level move is learned: ")
228 packed_move_list.append(move_level)
229 move_check(move_name)
230 packed_move_list.append(return_move_id(move_name))
231 gather_moves = input("Would you like to enter another move?\n1. Yes 2. No")
232
233 string_array = str(packed_move_list)
234
235 stats_list = [
236 ID,
237 name,
238 primary_type,
239 secondary_type,
240 min_hp,
241 max_hp,
242 min_attack,
243 max_attack,
244 min_defense,
245 max_defense,
246 min_sp_attack,
247 max_sp_attack,
248 min_sp_defense,
249 max_sp_defense,
250 min_speed,
251 max_speed,
252 string_array
253 ]
254
255 return stats_list
256
257 class pokemon_object(object): # Pokemon object and attributes; primarily battling functions
258
259 def __init__(self,level,ID,name,primary_type,secondary_type,min_hp,max_hp,min_attack,max_attack,min_defense,max_defense,min_sp_attack,max_sp_attack,min_sp_defense,max_sp_defense,min_speed,max_speed):
260
261 self.level = level
262 self.ID = ID
263 self.name = name
264 self.primary_type = primary_type
265 self.secondary_type = secondary_type
266 self.min_hp = min_hp
267 self.max_hp = max_hp
268 self.min_attack = min_attack
269 self.max_attack = max_attack
270 self.min_defense = min_defense
271 self.max_defense = max_defense
272 self.min_sp_attack = min_sp_attack
273 self.max_sp_attack = max_sp_attack
274 self.min_sp_defense = min_sp_defense
275 self.max_sp_defense = max_sp_defense
276 self.min_speed = min_speed
277 self.max_speed =max_speed
278
279 self.hp = level_adjustment(self.min_hp,self.max_hp,self.level)
280 self.attack = level_adjustment(self.min_attack,self.max_attack,self.level)
281 self.defense = level_adjustment(self.min_defense,self.max_defense,self.level)
282 self.sp_attack = level_adjustment(self.min_sp_attack,self.max_sp_attack,self.level)
283 self.sp_defense = level_adjustment(self.min_sp_defense,self.max_sp_defense,self.level)
284 self.speed = level_adjustment(self.min_speed,self.max_speed,self.level)
285
286 self.move_1 = []
287 self.move_2 = []
288 self.move_3 = []
289 self.move_4 = []
290
291 def print_stats(self):
292
293 print self.hp
294 print self.attack
295 print self.defense
296 print self.sp_attack
297 print self.sp_defense
298 print self.speed
299
300
301 def define_moves(self):
302
303 move_list = pull_moves(self.ID,self.level)
304 known_moves = []
305 pulled_value = ""
306
307 if(len(move_list) > 4):
308 while(len(known_moves) < 4):
309 pulled_value = move_list[(random.randrange(0,len(move_list)))]
310 if pulled_value not in known_moves:
311 known_moves.append(pulled_value)
312 else:
313 for values in move_list:
314 known_moves.append(values)
315
316
317
318 self.move_1 = pull_move(known_moves[0])
319 self.move_2 = pull_move(known_moves[1])
320 self.move_3 = pull_move(known_moves[2])
321 self.move_4 = pull_move(known_moves[3])
322
323 def print_move(self):
324
325 print self.move_1
326 print self.move_2
327 print self.move_3
328 print self.move_4
329
330 def add_pokemon(ID,name,primary_type,secondary_type,min_hp,max_hp,min_attack,max_attack,min_defense,max_defense,min_sp_attack,max_sp_attack,min_sp_defense,max_sp_defense,min_speed,max_speed,moves):
331 c.execute("INSERT INTO pokemon_index VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
332 (ID,name,primary_type,secondary_type,min_hp,max_hp,min_attack,max_attack,min_defense,
333 max_defense,min_sp_attack,max_sp_attack,min_sp_defense,max_sp_defense,min_speed,
334 max_speed,moves))
335 conn.commit() # Passes values to database
336
337 def add_move(ID,name,move_type,category,pp,power,accuracy):
338 print name,move_type,category,pp,power,accuracy
339 c.execute("INSERT INTO move_index(ID,name,move_type,category,pp,power,accuracy) values (?,?,?,?,?,?,?)",(ID,name,move_type,category,pp,power,accuracy))
340 conn.commit()
341
342 pokemon_object_1 = pokemon_object(*test_stats())
343 pokemon_object_1.define_moves()
344 pokemon_object_1.print_move()
345
346 run = False # End of program
347 c.close() # Closes index cursor
348
349print("End of program")