1 | package jpacman.controller; |
2 | |
3 | |
4 | import jpacman.model.Engine; |
5 | import jpacman.model.Monster; |
6 | |
7 | /** |
8 | * Example, simple monster mover that just moves monsters randomly. |
9 | * |
10 | * @author Arie van Deursen; Aug 18, 2003 |
11 | * @version $Id: RandomMonsterMover.java,v 1.9 2008/02/08 20:15:19 arie Exp $ |
12 | */ |
13 | public class RandomMonsterMover extends AbstractMonsterController { |
14 | |
15 | /** |
16 | * Start a new mover with the given engine. |
17 | * |
18 | * @param e |
19 | * Engine used. |
20 | */ |
21 | public RandomMonsterMover(Engine e) { |
22 | super(e); |
23 | } |
24 | |
25 | /** |
26 | * Local enum for directions. |
27 | */ |
28 | private enum Direction { UP, DOWN, LEFT, RIGHT }; |
29 | |
30 | /** |
31 | * Actually conduct a random move in the underlying engine. |
32 | * |
33 | * @see jpacman.controller.IMonsterController#doTick() |
34 | */ |
35 | public void doTick() { |
36 | Monster theMonster = getRandomMonster(); |
37 | |
38 | int dx = 0; |
39 | int dy = 0; |
40 | |
41 | int dir = getRandomizer().nextInt(Direction.values().length); |
42 | Direction d = Direction.values()[dir]; |
43 | switch(d) { |
44 | case UP: |
45 | dy = -1; |
46 | break; |
47 | case DOWN: |
48 | dy = 1; |
49 | break; |
50 | case LEFT: |
51 | dx = -1; |
52 | break; |
53 | case RIGHT: |
54 | dx = 1; |
55 | break; |
56 | default: |
57 | assert false; |
58 | } |
59 | |
60 | assert dy >= -1 && dy <= 1; |
61 | assert |
62 | Math.abs(dx) == 1 && dy == 0 |
63 | || |
64 | Math.abs(dy) == 1 && dx == 0; |
65 | |
66 | getEngine().moveMonster(theMonster, dx, dy); |
67 | } |
68 | } |