1 package de.jos.game.objects.screen;
2
3 import java.awt.Graphics2D;
4
5 import org.springframework.beans.factory.xml.XmlBeanFactory;
6
7 import com.golden.gamedev.GameEngine;
8
9 import de.jos.game.Constants;
10 import de.jos.game.actions.ActionContainer;
11 import de.jos.game.aspect.DebugConsoleAware;
12 import de.jos.game.logic.AbstractGameBoard;
13 import de.jos.game.logic.AbstractGameLogic;
14 import de.jos.game.logic.InfiniteGameBoard;
15 import de.jos.game.logic.InfiniteGameLogic;
16 import de.jos.game.logic.PuzzleGameBoard;
17 import de.jos.game.logic.PuzzleGameLogic;
18 import de.jos.game.objects.ResourceContainer;
19 import de.jos.game.objects.buttons.RestartButton;
20 import de.jos.game.objects.buttons.UndoButton;
21 import de.jos.game.objects.state.PuzzleLevelState;
22 import de.jos.game.xml.Level;
23
24 public class TheGame extends AbstractGameObject implements Constants {
25
26 private AbstractGameBoard board = null;
27
28 private AbstractGameLogic gameLogic = null;
29
30 private Integer mode = null;
31
32 private PuzzleLevelState puzzleLevelState = null;
33
34 private static final int INFINITE_MODE_START_LEVEL = 1;
35
36 public TheGame(GameEngine parent, ResourceContainer resourceContainer, XmlBeanFactory xmlBeanFactory) {
37 super(parent, resourceContainer, xmlBeanFactory);
38 }
39
40 public void initResources() {
41 ResourceContainer resourceContainer = getResourceContainer();
42
43 Level level = null;
44 if (mode.equals(Constants.MODE_PUZZLE)) {
45 board = new PuzzleGameBoard();
46 board.setActionContainer(new ActionContainer(resourceContainer, board, true));
47 gameLogic = new PuzzleGameLogic();
48 level = resourceContainer.getPuzzleLevels().get(puzzleLevelState.getCurrentlySelectedLevel() - 1);
49 level.initBullets(getResourceContainer());
50 } else if (mode.equals(Constants.MODE_INFINITE)) {
51 board = new InfiniteGameBoard();
52 board.setActionContainer(new ActionContainer(resourceContainer, board, false));
53 gameLogic = new InfiniteGameLogic();
54 level = resourceContainer.getInfiniteLevels().get(INFINITE_MODE_START_LEVEL - 1);
55 level.getAccumulatedCombinations().clear();
56 level.getAccumulatedCombinations().addAll(level.getCombinations());
57 }
58
59 gameLogic.setResourceContainer(resourceContainer);
60 gameLogic.setBoard(board);
61 gameLogic.setLevel(level);
62 gameLogic.init();
63
64 board.setResourceContainer(resourceContainer);
65 board.setGameLogic(gameLogic);
66
67 board.initLevel(level);
68
69
70
71
72
73
74
75
76
77 addButtonToScreen(new UndoButton(this, 500, 330));
78 addButtonToScreen(new RestartButton(this, 500, 250));
79
80
81 setFPS(60);
82 }
83
84 @DebugConsoleAware
85 public void update(long elapsedTime) {
86 gameLogic.update(elapsedTime, this);
87
88 getResourceContainer().getCursorSprite().setX(getMouseX());
89 getResourceContainer().getCursorSprite().setY(getMouseY());
90
91 if (gameLogic.isGameFinished() == true) {
92 if (getMode().equals(Constants.MODE_PUZZLE)) {
93
94 puzzleLevelState.setLevelSolved(puzzleLevelState.getCurrentlySelectedLevel(), gameLogic.isGameSolved());
95 setNextScreen(Screen.LEVEL);
96 } else if (getMode().equals(Constants.MODE_INFINITE)) {
97 setNextScreen(Screen.START);
98 }
99 finish();
100 }
101
102 super.update(elapsedTime);
103 }
104
105 @DebugConsoleAware
106 public void render(Graphics2D graphics) {
107
108 gameLogic.render(graphics, this);
109
110
111 if (mode.equals(Constants.MODE_PUZZLE)) {
112 getFramework().render(graphics);
113 }
114
115 getResourceContainer().getCursorSprite().render(graphics);
116 }
117
118 public Integer getMode() {
119 return mode;
120 }
121
122 public void setMode(Integer mode) {
123 this.mode = mode;
124 }
125
126 public AbstractGameLogic getGameLogic() {
127 return gameLogic;
128 }
129
130 public AbstractGameBoard getBoard() {
131 return board;
132 }
133
134 public void setPuzzleLevelState(PuzzleLevelState puzzleLevelState) {
135 this.puzzleLevelState = puzzleLevelState;
136 }
137
138 }