-
Notifications
You must be signed in to change notification settings - Fork 0
/
card.py
398 lines (279 loc) · 9.4 KB
/
card.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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
from Constants import *
import MySQLdb
from networkx.algorithms.flow.mincost import cost_of_flow
from battlecries import *
# Card Template. Currently based on an obeslete template, will improve when
# spells, weapons and secrets are implemented.
class Card:
def __init__(self, name, classType, cost, img) :
self.name = name;
self.classType = classType;
self.cost = cost;
self.img = img
self.player = None
def __str__(self) :
return self.name
def getName(self):
return self.name
def getClassType(self):
return self.classType
def getClass(self):
return self.classType
def getCost(self):
return self.cost
def getImg(self):
return self.img
def getFilename(self):
return self.img
def getPlayer(self):
return self.player
def setImg(self, img):
self.img = img
def setName(self, name):
self.name = name
def setClassType(self, classType):
self.classType = classType
def setCost(self, cost):
self.cost = cost
def setPlayer(self, playa):
self.player = playa
#On Null creatures this function will be overwritten
def isNull(self):
return False
#The Creature class represents a specific minion.
# name: string of the card's full name
# power/toughness: the current and starting power and toughness of the card
# state: A marker to show if the card is on the board, hand or deck
# creatureType: Either None, or a string for the creaturetype
# owner: The player who owns it
# tired: True if it can attack, False otherwise
# buffs: List of the current buffs effecting the card
# effects: list of effects the card causes
# screen: a reference to the screen
# img: a string of the filename for this card
# player: The player who selected ths card for his deck
# maxHealth: This maximum health this minion can heal too
class Creature(Card):
def __init__(self, name, cost, power, toughness, owner, tired, buffs, effects, img, keywords, creaturetype, classType) :
Card.__init__(self, name, classType, cost, img)
self.power = power;
self.toughness = toughness;
self.state = None
self.creatureType = creaturetype
self.owner = owner
self.tired = tired
self.buffs = buffs
self.effects = effects
self.screen = getScreen()
self.player = None
self.keywords = keywords
self.maxHealth = toughness
self.ID = 0
self.minion_id = -1
self.classType = "neutral"
self.battlecry = ''
######################
# Get Statements #
######################
def getMinionID (self):
return self.minion_id
def getMaxHealth (self):
return self.maxHealth
def getPlayer(self):
return self.player
def getFilename(self):
return self.img
def getCreatureType(self):
return self.creatureType
def getScreen(self):
return self.screen
def getOwner(self):
return self.owner
def getPower(self) :
return self.power
def getToughness(self) :
return self.toughness
def getTired(self):
return self.tired
def getBuffs(self):
return self.buffs
def getID(self):
return self.ID
def getKeywords(self):
return self.keywords
######################
# Set Statements #
######################
def setMinionID (self, id):
self.minion_id = id
def setScreen(self, screen):
self.screen = screen
def setTired(self, tire):
self.tired = tire
def setOwner(self, owner):
self.owner = owner
def setState(self, state):
self.state = state
def setPower(self, newT):
self.power = newT
def setToughness(self, newT):
self.toughness = newT
def setMaxHealth(self, maxh):
self.maxHealth = maxh
def setPlayer(self, player):
self.player = player
def setID(self, ID):
self.ID = ID
def setKeyword(self, key, ind):
self.keywords[ind] = key
#By default these methods return False, but are overwritten on cards that
#have battlecries, effects or deathrattles
def hasBattleCry(self):
print "RESULT EQUALS: "+self.battlecry != ''
return self.battlecry != ''
def hasDeathRattle(self):
return False
def hasEffect(self):
return False
def getType(self):
return "Creature"
def doEffect(self):
pass
def hasTaunt(self):
return self.keywords[0]
def battleCry(self):
print "/n/nmmm/n/n"
getBCs()[int(self.battlecry)]()
#A function that should be removed
def ping(self, val=1):
self.toughness = self.toughness - val
#Add buff to the card
def addBuff(self, buff):
self.buffs.append(buff)
#Remove all Buffs from the card
def clearBuffs(self):
for buff in self.buffs:
buff.removeBuff()
self.buffs = []
if self.keywords[0]:
board = getBoard()
if self in board.getCurrentPlayer().getTaunts():
board.getCurrentPlayer().removeTaunt(self)
if self in board.getEnemyPlayer().getTaunts():
board.getEnemyPlayer().removeTaunt(self)
self.keywords = [False, False, False, False]
def removeBuff(self, buff):
self.buffs.remove(buff)
#Buff power by a set amount
def incPower(self, inc):
self.power = self.power + inc
# Deals damage to the creature
def takeDamage(self, damage):
if self.keywords[2]:
self.keywords[2] = False
else:
self.toughness = self.toughness - damage
def copy(self):
print self.name + " Break"
return makeCreature(str(self.getMinionID()))
def get_class_type(self):
return self.__classType
def set_class_type(self, value):
self.__classType = value
def setBattleCry(self, bat):
self.battlecry = bat
class SQLcreature():
def __init__(self, row) :
self.id = row[0]
self.name = row[1]
self.attack = row[2]
self.health = row[3]
self.cost = row[4]
self.class_type = row[5]
self.battlecry = row[6]
self.deathrattle = row[7]
self.effect = row[8]
self.img = row[10].strip("\"")
self.keywords = [bool(row[11]), bool(row[12]), bool(row[13]), bool(row[14])]
self.battleCry = row[15]
self.reference = row
def getID (self):
return self.id
def get_reference(self):
return self.reference
def get_name(self):
return self.name
def get_attack(self):
return self.attack
def get_health(self):
return self.health
def get_cost(self):
return self.cost
def get_class_type(self):
return self.class_type
def get_battlecry(self):
return self.battlecry
def get_deathrattle(self):
return self.deathrattle
def get_effect(self):
return self.effect
def get_img(self):
return self.img
def getKeywords(self):
return self.keyword
def setKeywords(self, keyword):
self.keywords = keyword
def setID (self, id):
self.id = id
def set_name(self, value):
self.name = value
def set_attack(self, value):
self.attack = value
def set_health(self, value):
self.health = value
def set_cost(self, value):
self.cost = value
def set_class_type(self, value):
self.class_type = value
def set_battlecry(self, value):
self.battlecry = value
def set_deathrattle(self, value):
self.deathrattle = value
def set_effect(self, value):
self.effect = value
def set_img(self, value):
self.img = value
def generate_creature(self):
tired = not self.keywords[1]
newCreature = Creature(self.name, self.cost, self.attack, self.health, 0, tired,
[], None, self.img, self.keywords , None, self.class_type)
newCreature.setMinionID(self.getID())
newCreature.setBattleCry('1')
return newCreature
def makeCreature(minion_id):
db = MySQLdb.connect("localhost","root","root","sys" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# execute SQL query using execute() method.
print "SELECT * FROM sys.minion WHERE minion_id = "+str(minion_id)
cursor.execute("SELECT * FROM sys.minion WHERE minion_id = "+str(minion_id))
# Fetch a single row using fetchone() method.
data = cursor.fetchone()
print data
newCreature = SQLcreature(data)
# disconnect from server
db.close()
print "Success"
return newCreature.generate_creature()
class Spell(Card):
def __init__(self, name, classType, cost, img):
Card.__init__(self, name, classType, cost, img)
def chooseOne(self):
pass
def overload(self):
pass
def doSpell(self, pos):
pass
def getType(self):
return "Spell"
makeCreature("1")