Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/bounce.py
diff options
context:
space:
mode:
authorWalter Bender <walter.bender@gmail.com>2011-10-05 20:52:35 (GMT)
committer Walter Bender <walter.bender@gmail.com>2011-10-05 20:52:35 (GMT)
commitfdbe3830eb2d3d7f37c7b29906578a5739f7d963 (patch)
tree458a3ac2aa0380da23577d0775a1f7b48ffb8551 /bounce.py
parentd0ef4b772ef0e2adb289470b2d85599f1ec7d0d0 (diff)
more code consolidation
Diffstat (limited to 'bounce.py')
-rw-r--r--bounce.py52
1 files changed, 25 insertions, 27 deletions
diff --git a/bounce.py b/bounce.py
index 223cc19..b8bcc4a 100644
--- a/bounce.py
+++ b/bounce.py
@@ -198,24 +198,11 @@ class Bounce():
self.mark.set_layer(2)
self.bars = {}
- # divide into two segments
self.bars[2] = Sprite(self.sprites, 0, 0,
_svg_str_to_pixbuf(self._gen_bar(2)))
- # divide into twelve segments
- self.bars[12] = Sprite(self.sprites, 0, 0,
- _svg_str_to_pixbuf(self._gen_bar(12)))
- # divide into ten segments
- self.bars[10] = Sprite(self.sprites, 0, 0,
- _svg_str_to_pixbuf(self._gen_bar(10)))
- # divide into four segments
- self.bars[4] = Sprite(self.sprites, 0, 0,
- _svg_str_to_pixbuf(self._gen_bar(4)))
-
- hoffset = int((self.ball.rect[3] + self.bars[2].rect[3]) / 2)
-
- for bar in self.bars:
- self.bars[bar].move((int(self.ball.rect[2] / 2),
- self.height - hoffset))
+ self.bars[2].move((int(self.ball.rect[2] / 2),
+ self.height - int((self.ball.rect[3] + \
+ self.bars[2].rect[3]) / 2)))
num = _svg_header(BAR_HEIGHT * self.scale, BAR_HEIGHT * self.scale,
1.0) + \
@@ -224,11 +211,11 @@ class Bounce():
'none', 'none') + \
_svg_footer()
self.left = Sprite(self.sprites, int(self.ball.rect[2] / 4),
- self.height - hoffset, _svg_str_to_pixbuf(num))
+ self.bars[2].rect[1], _svg_str_to_pixbuf(num))
self.left.set_label('0')
self.right = Sprite(self.sprites,
self.width - int(self.ball.rect[2] / 2),
- self.height - hoffset, _svg_str_to_pixbuf(num))
+ self.bars[2].rect[1], _svg_str_to_pixbuf(num))
self.right.set_label('1')
self.ball_y_max = self.bars[2].rect[1] - self.ball.rect[3]
@@ -256,11 +243,14 @@ class Bounce():
''' Return a bar with n segments '''
svg = _svg_header(self.width - self.ball.rect[2], BAR_HEIGHT, 1.0)
dx = (self.width - self.ball.rect[2]) / float(nsegments)
- for i in range(nsegments / 2):
+ for i in range(int(nsegments) / 2):
svg += _svg_rect(dx, BAR_HEIGHT * self.scale, 0, 0,
i * 2 * dx, 0, '#FFFFFF', '#FFFFFF')
svg += _svg_rect(dx, BAR_HEIGHT * self.scale, 0, 0,
(i * 2 + 1) * dx, 0, '#AAAAAA', '#AAAAAA')
+ if int(nsegments) % 2 == 1: # odd
+ svg += _svg_rect(dx, BAR_HEIGHT * self.scale, 0, 0,
+ i * 2 * dx, 0, '#FFFFFF', '#FFFFFF')
svg += _svg_footer()
return svg
@@ -367,12 +357,12 @@ class Bounce():
''' Select a new fraction challenge from the table '''
n = int(uniform(0, len(self.challenges)))
fstr = self.challenges[n][0]
- if '/' in fstr:
+ if '/' in fstr: # fraction
numden = fstr.split('/', 2)
self.fraction = float(numden[0].strip()) / float(numden[1].strip())
- elif '%' in fstr:
+ elif '%' in fstr: # percentage
self.fraction = float(fstr.strip().strip('%').strip()) / 100.
- else:
+ else: # To do: add support for decimals (using locale)
_logger.debug('Could not parse challenge (%s)', fstr)
self.fraction = 0.5
@@ -383,14 +373,21 @@ class Bounce():
self.bars[bar].set_layer(-1)
if self.correct > EXPERT: # Show two-segment bar in expert mode
self.bars[2].set_layer(0)
- else: # To do: generate new bar on demand if needed
- self.bars[self.challenges[n][1]].set_layer(-1)
+ else:
+ # generate new bar on demand if needed
+ nseg = self.challenges[n][1]
+ if not nseg in self.bars:
+ self.bars[nseg] = Sprite(self.sprites, 0, 0,
+ _svg_str_to_pixbuf(self._gen_bar(nseg)))
+ self.bars[nseg].move((self.bars[2].rect[0],
+ self.bars[2].rect[1]))
+ self.bars[nseg].set_layer(0)
def _easter_egg_test(self):
''' Test to see if we show the Easter Egg '''
delta = self.ball.rect[2] / 8
x = self.ball.get_xy()[0] + self.ball.rect[2] / 2
- f = self.bar.rect[2] * self.easter_egg / 100.
+ f = self.bars[2].rect[2] * self.easter_egg / 100.
if x > f - delta and x < f + delta:
return True
else:
@@ -400,8 +397,9 @@ class Bounce():
''' Test to see if we estimated correctly '''
delta = self.ball.rect[2] / 4
x = self.ball.get_xy()[0] + self.ball.rect[2] / 2
- f = self.ball.rect[2] / 2 + int(self.fraction * self.bar.rect[2])
- self.mark.move((int(f - self.mark.rect[2] / 2), self.bar.rect[1] - 2))
+ f = self.ball.rect[2] / 2 + int(self.fraction * self.bars[2].rect[2])
+ self.mark.move((int(f - self.mark.rect[2] / 2),
+ self.bars[2].rect[1] - 2))
if x > f - delta and x < f + delta:
if not easter_egg:
smiley = Sprite(self.sprites, 0, 0, self.smiley_graphic)