annotate gamelib/misc.py @ 246:592bfad67488

Add 'You left' game over mode
author Neil Muller <drnlmuller@gmail.com>
date Sat, 05 Sep 2009 12:27:08 +0000
parents 1a7000c8211c
children 82a18615a0ab
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
69
18db99fda6bd Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
1 # Holder for misc useful classes
18db99fda6bd Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
2
241
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
3 import random
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
4
69
18db99fda6bd Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
5 class Position(object):
100
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
6 """2D position / vector"""
69
18db99fda6bd Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
7
100
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
8 def __init__(self, x, y):
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
9 self.x = x
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
10 self.y = y
69
18db99fda6bd Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
11
100
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
12 def to_tuple(self):
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
13 return self.x, self.y
69
18db99fda6bd Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
14
100
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
15 def dist(self, b):
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
16 """Gives the distance to another position"""
69
18db99fda6bd Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
17
107
672cc5598e77 Fix dist metric
Neil Muller <drnlmuller@gmail.com>
parents: 100
diff changeset
18 return max(abs(self.x - b.x), abs(self.y - b.y))
69
18db99fda6bd Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
19
100
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
20 def __sub__(self, b):
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
21 return Position(self.x - b.x, self.y - b.y)
69
18db99fda6bd Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
22
100
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
23 def __add__(self, b):
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
24 return Position(self.x + b.x, self.y + b.y)
69
18db99fda6bd Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
25
100
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
26 def left_of(self, b):
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
27 return self.x < b.x
69
18db99fda6bd Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
28
100
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
29 def right_of(self, b):
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
30 return self.x > b.x
69
18db99fda6bd Move spawing code from engine to gameboard - seems more natural.
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
31
100
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
32 def __eq__(self, b):
e90068d1f374 Re-indent to four spaces.
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
33 return self.x == b.x and self.y == b.y
241
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
34
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
35 class WeightedSelection(object):
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
36 def __init__(self, weightings=None):
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
37 self.weightings = []
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
38 self.total = 0
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
39 if weightings:
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
40 for item, weight in weightings:
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
41 self.weightings.append((item, weight))
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
42 self.total += weight
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
43
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
44 def choose(self):
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
45 roll = random.uniform(0, self.total)
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
46 for item, weight in self.weightings:
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
47 if roll < weight:
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
48 return item
1a7000c8211c Demolition foxes, including better fox selection.
Jeremy Thurgood <firxen@gmail.com>
parents: 107
diff changeset
49 roll -= weight