diff options
author | Walter Bender <walter.bender@gmail.com> | 2013-01-03 01:56:17 (GMT) |
---|---|---|
committer | Walter Bender <walter.bender@gmail.com> | 2013-01-03 01:56:17 (GMT) |
commit | 50d18e924e681fd26f846909d3a572992e5fc9c4 (patch) | |
tree | 633e8ee062ecf711519db5c37b23a815dc766d16 | |
parent | 3ac9ed40552b9e167ab47c59e11755373bc87e9e (diff) |
debugging accelerometer code
-rw-r--r-- | game.py | 82 |
1 files changed, 62 insertions, 20 deletions
@@ -13,7 +13,7 @@ from gi.repository import Gtk, GdkPixbuf, GObject, Gdk import cairo - +import os from random import uniform from gettext import gettext as _ @@ -34,16 +34,24 @@ ACCELEROMETER_DEVICE = '/sys/devices/platform/lis3lv02d/position' def read_accelerometer(game): - fh = open(ACCELEROMETER_DEVICE) - string = fh.read() - xyz = string[1:-2].split(',') - try: - x = float(xyz[0]) / (64 * 18) - y = float(xyz[1]) / (64 * 18) + if not hasattr(read_accelerometer, 'device_path'): + if os.path.exists(ACCELEROMETER_DEVICE): + read_accelerometer.device_path = ACCELEROMETER_DEVICE + else: + read_accelerometer.device_path = None + if read_accelerometer.device_path is None: + x = int(uniform(-20, 20)) + y = int(uniform(-20, 20)) + z = int(uniform(-20, 20)) + else: + fh = open(ACCELEROMETER_DEVICE) + string = fh.read() + xyz = string[1:-2].split(',') + x = int(float(xyz[0]) / 18) + y = int(float(xyz[1]) / 18) + z = int(float(xyz[2]) / 18) fh.close() - game.motion_cb(x, y) - except: - pass + game.motion_cb(x, y, z) GObject.timeout_add(100, read_accelerometer, game) @@ -146,9 +154,11 @@ class Game(): def _yellow_dot_too(self): ''' Things to reinitialize when starting up a new game. ''' - self._targets.append( - (self._targets[0] + int(uniform(0, TEN * SIX - 1))) % TEN * SIX) - self._label.set_label('Well done! Click on another yellow dot.') + i = self._targets[0] + while i in self._targets: + i = int(uniform(0, TEN * SIX)) + self._targets.append(i) + self._label.set_label('Well done! Click on the other yellow dot.') self._next = self._yellow_dots_three self._dots[self._targets[1]].set_shape( self._new_dot(self._colors[YELLOW])) @@ -161,7 +171,7 @@ class Game(): while i in self._targets: i = int(uniform(0, TEN * SIX)) self._targets.append(i) - self._label.set_label('Great! Now rub on a yellow dot.') + self._label.set_label('Great! Now rub on one of the yellow dots.') self._next = self._red_dot self._dots[self._targets[2]].set_shape( self._new_dot(self._colors[YELLOW])) @@ -232,8 +242,8 @@ class Game(): self._count += 1 if self._count == 5: self._count = 0 - self._next = None - self._label.set_label('') + self._next = self._shake_it + self._label.set_label('OK. Shake it up!!') else: self._label.set_label('Keep tapping.') i = self._targets[0] @@ -243,14 +253,47 @@ class Game(): self._dots[i].set_shape(self._new_dot(self._colors[BLUE])) self._dots[i].type = BLUE + def _shake_it(self): + for dot in self._dots: + if dot.type in [RED, YELLOW, BLUE]: + dot.set_layer(200) + self._next = self._shake_it_more + self._shake = 'random' + self._pausing = True + GObject.timeout_add(10000, self._clear_pause) + GObject.timeout_add(100, read_accelerometer, self) + + def _shake_it_more(self): + self._label.set_label('Shake it harder!!') + self._next = None + self._shake = 'random' + self._pausing = True + GObject.timeout_add(10000, self._clear_pause) + def _set_label(self, string): ''' Set the label in the toolbar or the window frame. ''' self._activity.status.set_label(string) - def motion_cb(self, x, y): + def motion_cb(self, x, y, z): + if self._shake is None: + return + elif self._shake == 'random': + print x, y, z + for dot in self._dots: + if dot.type in [RED, YELLOW, BLUE]: + r = int(uniform(-10, 10)) + dot.move_relative((x + r, z + r)) + if self._pausing is not True: + if self._next is not None: + GObject.timeout_add(500, self._next) + else: + self._label.set_label('') + self._shake = None return def _button_press_cb(self, win, event): + if self._shake is not None: + return True win.grab_focus() x, y = map(int, event.get_coords()) self._press = True @@ -268,7 +311,8 @@ class Game(): return True def _button_release_cb(self, win, event): - print 'button release cb' + if self._shake is not None: + return True self._press = False self._release = None if not self._timer is None: @@ -280,11 +324,9 @@ class Game(): x, y = map(int, event.get_coords()) spr = self._sprites.find_sprite((x, y)) - print self._dots.index(spr), self._targets if spr.type is not None: if spr in self._dots: for target in self._targets: - print self._dots.index(spr), target if self._dots.index(spr) == target: self._release = target if self._next is not None: |