diff options
Diffstat (limited to 'game.py')
-rw-r--r-- | game.py | 104 |
1 files changed, 33 insertions, 71 deletions
@@ -18,11 +18,12 @@ _logger = logging.getLogger('memosono-activity.game') class ConnectGame(ExportedGObject): - def __init__(self, tube, grid, is_initiator, buddies_panel, info_panel, + def __init__(self, tube, playview, model, is_initiator, buddies_panel, info_panel, owner, get_buddy, activity): super(ConnectGame, self).__init__(tube, PATH) self.tube = tube - self.grid = grid + self.pv = playview + self.model = model self.is_initiator = is_initiator self.entered = False self.player_id = None @@ -37,8 +38,10 @@ class ConnectGame(ExportedGObject): # 2+ are the spectator queue, 2 is to play next self.ordered_bus_names = [] + for tile in self.pv.tiles: + tile.connect('button-press-event', self._button_press_cb, self.pv.tiles.index(tile)) + self.tube.watch_participants(self.participant_change_cb) - self.grid.connect('insert-requested', self.insert_requested_cb) def participant_change_cb(self, added, removed): # Initiator is player 0, other player is player 1. @@ -64,7 +67,7 @@ class ConnectGame(ExportedGObject): pass if not self.entered: - self.tube.add_signal_receiver(self.insert_cb, 'Insert', IFACE, + self.tube.add_signal_receiver(self.flip_cb, 'Flip', IFACE, path=PATH, sender_keyword='sender') if self.is_initiator: _logger.debug('I am the initiator, so making myself player 0') @@ -83,7 +86,7 @@ class ConnectGame(ExportedGObject): up to date with the game state. """ - @method(dbus_interface=IFACE, in_signature='aanas', out_signature='') + @method(dbus_interface=IFACE, in_signature='a(nn)', out_signature='') def Welcome(self, grid, bus_names): """To be called on the incoming player by the other players to inform them of the game state. @@ -96,8 +99,8 @@ class ConnectGame(ExportedGObject): if self.player_id is None: _logger.debug('Welcomed to the game. Player bus names are %r', bus_names) - self.grid.grid = grid - dump_grid(grid) + self.model.grid = grid + self.ordered_bus_names = bus_names self.player_id = bus_names.index(self.tube.get_unique_name()) # OK, now I'm synched with the game, I can welcome others @@ -111,8 +114,6 @@ class ConnectGame(ExportedGObject): if self.get_active_player() == self.player_id: _logger.debug("It's my turn already!") self.change_turn() - - redraw(self.grid) else: _logger.debug("I've already been welcomed, doing nothing") @@ -120,11 +121,9 @@ class ConnectGame(ExportedGObject): self.tube.add_signal_receiver(self.hello_cb, 'Hello', IFACE, path=PATH, sender_keyword='sender') - @signal(dbus_interface=IFACE, signature='n') - def Insert(self, column): - """Signal that the local player has placed a disc.""" - assert column >= 0 - assert column < 7 + @signal(dbus_interface=IFACE, signature='nsn') + def Flip(self, tilenum): + """Signal that the local player has flipped a tile.""" def hello_cb(self, sender=None): """Tell the newcomer what's going on.""" @@ -135,7 +134,7 @@ class ConnectGame(ExportedGObject): self.buddies_panel.add_player(buddy) _logger.debug('Bus names are now: %r', self.ordered_bus_names) _logger.debug('Welcoming newcomer and sending them the game state') - self.tube.get_object(sender, PATH).Welcome(self.grid.grid, + self.tube.get_object(sender, PATH).Welcome(self.model.grid, self.ordered_bus_names, dbus_interface=IFACE) if (self.player_id == 0 and len(self.ordered_bus_names) == 2): @@ -143,31 +142,22 @@ class ConnectGame(ExportedGObject): "I go first") self.change_turn() - def insert_cb(self, column, sender=None): - # Someone placed a disc + def flip_cb(self, tilenum, sender=None): handle = self.tube.bus_name_to_handle[sender] - _logger.debug('Insert(%d) from %s', column, sender) - - if self.tube.self_handle == handle: - _logger.debug('Ignoring Insert signal from myself: %d', column) - return - - try: - winner = self.grid.insert(column, self.get_active_player()) - except ValueError: - return - - dump_grid(self.grid.grid) + _logger.debug('Flipped tile(%d) from %s', tilenum, sender) + self.pv.flip(tilenum, obj, color) + if winner is not None: _logger.debug('Player with handle %d wins', handle) self.info_panel.show('The other player wins!') - redraw(self.grid) return self.change_turn() def change_turn(self): + pass +''' try: bus_name = self.ordered_bus_names[self.get_active_player()] buddy = self._get_buddy(self.tube.bus_name_to_handle[bus_name]) @@ -179,13 +169,10 @@ class ConnectGame(ExportedGObject): if self.get_active_player() == self.player_id: _logger.debug('It\'s my turn now') self.info_panel.show('Your turn') - self.grid.selected_column = 3 self.activity.grab_focus() else: _logger.debug('It\'s not my turn') - self.grid.selected_column = None - redraw(self.grid) def get_active_player(self): count = {} @@ -199,42 +186,17 @@ class ConnectGame(ExportedGObject): return 1 else: return 0 - - def key_press_event(self, widget, event): - if self.grid.selected_column is None: - _logger.debug('Ignoring keypress - not my turn') - return - - _logger.debug('Keypress: keyval %s', event.keyval) - - if event.keyval in (gtk.keysyms.Left,): - _logger.debug('<--') - if self.grid.selected_column > 0: - self.grid.selected_column -= 1 - redraw(self.grid) - elif event.keyval in (gtk.keysyms.Right,): - _logger.debug('-->') - if self.grid.selected_column < 6: - self.grid.selected_column += 1 - redraw(self.grid) - elif event.keyval in (gtk.keysyms.Down, gtk.keysyms.space): - _logger.debug('v') - self.insert_requested_cb(self.grid, self.grid.selected_column) - - def insert_requested_cb(self, grid, col): - winner = grid.insert(col, self.player_id) - if winner == -1: +''' + def _button_press_cb(self, tile, event, tilenum=None): + if self.turn is None: + _logger.debug('Ignoring flip - not my turn') return - - _logger.debug('Inserting at %d', col) - dump_grid(grid.grid) - redraw(grid) - self.Insert(col) - - self.change_turn() - - if winner is not None: - print "I win" - self.info_panel.show('You win!') - else: - self.info_panel.show('Other player\'s turn') + + _logger.debug('selected tile=%s'%str(tilenum)) + pairkey, moch = self.grid[tilenum] + obj = os.path.join(IMAGES_PATH, self.model.pairs[pairkey][moch]) + color = self.model.pairs[pairkey][2] + logger.debug('obj=%s color=%s'%(obj, color)) + + self.Flipp(tilenum, obj, color) + |