Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/game.py
diff options
context:
space:
mode:
Diffstat (limited to 'game.py')
-rw-r--r--game.py104
1 files changed, 33 insertions, 71 deletions
diff --git a/game.py b/game.py
index f151199..2f32652 100644
--- a/game.py
+++ b/game.py
@@ -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)
+