From 8a2defe196f4f1d1edd7845ca871d58a57c717e1 Mon Sep 17 00:00:00 2001 From: Simon Schampijer Date: Thu, 12 Jul 2007 20:45:24 +0000 Subject: Started to merge the memosono game and the meorize game into one activity. --- (limited to 'model.py') diff --git a/model.py b/model.py index bb7870a..d85f603 100644 --- a/model.py +++ b/model.py @@ -5,7 +5,8 @@ import random import gobject IMAGES_PATH = 'games/drumgit/images' -GAME_PATH = 'games/drumgit' +SOUNDS_PATH = 'games/drumgit/sounds' +GAME_PATH = '' _logger = logging.getLogger('model') @@ -14,8 +15,10 @@ class Pair(gobject.GObject): __gproperties__ = { 'aimg' : (str, None, None, None, gobject.PARAM_READWRITE), 'asnd' : (str, None, None, None, gobject.PARAM_READWRITE), + 'achar' : (str, None, None, None, gobject.PARAM_READWRITE), 'bimg' : (str, None, None, None, gobject.PARAM_READWRITE), 'bsnd' : (str, None, None, None, gobject.PARAM_READWRITE), + 'bchar' : (str, None, None, None, gobject.PARAM_READWRITE), 'color': (gobject.TYPE_INT, 'Base', 'Base', 0, 10, 0, gobject.PARAM_READWRITE) } @@ -30,10 +33,14 @@ class Pair(gobject.GObject): return self._properties["aimg"] elif pspec.name == "asnd": return self._properties["asnd"] + elif pspec.name == "achar": + return self._properties["achar"] elif pspec.name == "bimg": return self._properties["bimg"] elif pspec.name == "bsnd": return self._properties["bsnd"] + elif pspec.name == "bchar": + return self._properties["bchar"] elif pspec.name == "color": return self._properties["color"] @@ -42,10 +49,14 @@ class Pair(gobject.GObject): self._properties['aimg'] = value elif name == "asnd": self._properties["asnd"] = value + elif name == "achar": + self._properties["achar"] = value elif name == "bimg": self._properties["bimg"] = value elif name == "bsnd": self._properties["bsnd"] = value + elif name == "bchar": + self._properties["bchar"] = value elif name == "color": self._properties["color"] = int(value) ''' @@ -60,19 +71,20 @@ class Model(object): information. ''' def __init__(self, gamepath, dtdpath, name='noname'): - self.name = name + self.data = {} self.gamepath = gamepath self.dtdpath = dtdpath + try: - self.dtd = libxml2.parseDTD(None, os.path.join(self.dtdpath, 'memosono.dtd')) + self.dtd = libxml2.parseDTD(None, os.path.join(self.dtdpath, 'memorize.dtd')) except libxml2.parserError, e: - _logger.error('No memosono.dtd found ' +str(e)) + _logger.error('No memorize.dtd found ' +str(e)) self.dtd = None self.ctxt = libxml2.newValidCtxt() self.pairs = {} self.grid = [] - + # used by the leader of the game to keep track of the game state self.players = {} self.player_active = 0 @@ -81,7 +93,6 @@ class Model(object): self.started = 0 self.count = 0 - def read(self, filename): ''' reades the configuration from an xml file ''' try: @@ -97,18 +108,34 @@ class Model(object): for elem in res: attributes = elem.get_properties() pair = Pair() - for attribute in attributes: - if(attribute.name == 'text'): - pass - else: - pass - pair.set_property(attribute.name, attribute.content) if( elem.name == 'pair' ): + for attribute in attributes: + if(attribute.name == 'text'): + pass + else: + pair.set_property(attribute.name, attribute.content) self.pairs[self.idpair] = pair - self.idpair+=1 - elif( elem.name == 'memosono' ): - self.name = attribute.content - + self.idpair+=1 + elif( elem.name == 'memorize' ): + for attribute in attributes: + if(attribute.name == 'text'): + pass + elif(attribute.name == 'name'): + self.data['game_name'] = attribute.content + elif(attribute.name == 'scoresnd'): + self.data['scoresnd'] = attribute.content + elif(attribute.name == 'winsnd'): + self.data['winsnd'] = attribute.content + elif(attribute.name == 'divided'): + self.data['divided'] = attribute.content + elif(attribute.name == 'divided'): + self.data['divided'] = attribute.content + elif(attribute.name == 'face'): + self.data['face'] = attribute.content + elif(attribute.name == 'face1'): + self.data['face1'] = attribute.content + elif(attribute.name == 'face2'): + self.data['face2'] = attribute.content xpa.xpathFreeContext() else: _logger.error('Error in validation of the file') @@ -120,8 +147,9 @@ class Model(object): def save(self, filename): ''' saves the configuration to an xml file ''' doc = libxml2.newDoc("1.0") - root = doc.newChild(None, "memosono", None) - root.setProp("name", self.name) + root = doc.newChild(None, "memorize", None) + root.setProp("name", self.data['game_name']) + ### Fixme: add other attributes here for key in self.pairs: elem = root.newChild(None, "pair", None) @@ -129,10 +157,14 @@ class Model(object): elem.setProp("aimg", self.pairs[key].props.aimg) if self.pairs[key].props.asnd != None: elem.setProp("asnd", self.pairs[key].props.asnd) + if self.pairs[key].props.achar != None: + elem.setProp("achar", self.pairs[key].props.achar) if self.pairs[key].props.bimg != None: elem.setProp("bimg", self.pairs[key].props.bimg) if self.pairs[key].props.bsnd != None: elem.setProp("bsnd", self.pairs[key].props.bsnd) + if self.pairs[key].props.bchar != None: + elem.setProp("bchar", self.pairs[key].props.bchar) elem.setProp("color", str(self.pairs[key].props.color)) if doc.validateDtd(self.ctxt, self.dtd): @@ -140,15 +172,27 @@ class Model(object): doc.freeDoc() - def def_grid(self): + def def_grid(self, size): ''' create the grid for the play from the pairs information and shuffles the grid so they always appear in a different - place + place + grid [pair_key, a_or_b, flipstatus] ''' _logger.debug(' pairs: %s', self.pairs) + i=0 for key in self.pairs.iterkeys(): - self.grid.append([key, 0, 0]) - self.grid.append([key, 1, 0]) + if i < size: + self.grid.append([key, 0, 0]) + self.grid.append([key, 1, 0]) + i+=1 + else: + break + + numpairs = len(self.pairs) + if numpairs < size: + _logger.debug('We did not have enough pairs. requested=%s had=%s' %(numpairs, size)) + + self.data['size'] = numpairs random.shuffle(self.grid) _logger.debug(' grid: %s', self.grid) @@ -156,10 +200,24 @@ class Model(object): def gettile(self, tilenum): ''' gets the information of an object associated with a tile number ''' - pairkey, moch, state = self.grid[tilenum] - obj = os.path.join(IMAGES_PATH, self.pairs[pairkey][moch]) - color = self.pairs[pairkey][2] - return (obj, color) + img = None + snd = None + char = None + pairkey, moch, state = self.grid[tilenum] + if moch == 0: + if self.pairs[pairkey].props.aimg != None: + img = os.path.join(IMAGES_PATH, self.pairs[pairkey].props.aimg) + if self.pairs[pairkey].props.asnd != None: + snd = os.path.join(SOUNDS_PATH, self.pairs[pairkey].props.asnd) + char = self.pairs[pairkey].props.achar + if moch == 1: + if self.pairs[pairkey].props.bimg != None: + img = os.path.join(IMAGES_PATH, self.pairs[pairkey].props.bimg) + if self.pairs[pairkey].props.bsnd != None: + snd = os.path.join(SOUNDS_PATH, self.pairs[pairkey].props.bsnd) + char = self.pairs[pairkey].props.bchar + color = self.pairs[pairkey].props.color + return (img, snd, char, color) def same(self, a, b): @@ -173,11 +231,41 @@ class Model(object): if __name__ == '__main__': model = Model(GAME_PATH, os.path.dirname(__file__)) - model.read('drumgit.mson') - print '%s' %model.pairs[0].props.color - print '%s' %model.pairs[1]._properties - print '%s' %model.pairs[2]._properties + model.read('drumgit.mem') + print '%s' %model.pairs[0]._properties + print 'name=%s' %model.data['game_name'] + print 'scoresnd=%s' %model.data['scoresnd'] + print 'winsnd=%s' %model.data['winsnd'] + print 'div=%s' %model.data['divided'] + model.def_grid(8) + print 'grid size=%d'%model.data['size'] + print model.grid + + i=0 + while i < model.data['size']: + pairkey, moch, state = model.grid[i] + if moch == 0: + if model.pairs[pairkey].props.aimg != None: + print model.pairs[pairkey].props.aimg + if moch == 1: + if model.pairs[pairkey].props.bimg != None: + print model.pairs[pairkey].props.bimg + i+=1 - model.def_grid() + + ''' + print '\n_______________________________\n' + + model.read('addition.mem') + print '%s' %model.pairs[0]._properties + print 'name=%s' %model.data['game_name'] + print 'scoresnd=%s' %model.data['scoresnd'] + print 'winsnd=%s' %model.data['winsnd'] + print 'div=%s' %model.data['divided'] + + model.def_grid(12) print model.grid - #model.save('/tmp/mod.txt') + print model.gettile(0) + print model.gettile(1) + model.save('/tmp/mod.txt') + ''' -- cgit v0.9.1