1 package de.jos.game.logic; 2 3 import java.util.Stack; 4 5 import de.jos.game.objects.Bullet; 6 import de.jos.game.objects.SimplifiedBullet; 7 import de.jos.game.xml.Level; 8 9 public class PuzzleGameBoard extends AbstractGameBoard { 10 11 private boolean renderPuzzleSolved = false; 12 13 private Stack<SimplifiedBullet[][]> moveHistory = new Stack<SimplifiedBullet[][]>(); 14 15 public void initLevel(Level level) { 16 super.initLevel(level); 17 this.updateBoard(); 18 } 19 20 public boolean isRenderPuzzleSolved() { 21 return renderPuzzleSolved; 22 } 23 24 public void setRenderPuzzleSolved(boolean renderPuzzleSolved) { 25 this.renderPuzzleSolved = renderPuzzleSolved; 26 } 27 28 /*** 29 * Create a snapshot for the undo function with simplified bullets. Bullets 30 * only contain the minimum information required to perform an undo. 31 * 32 * @return Returns a SimplifiedBullet 2-dimensional Array 33 */ 34 private SimplifiedBullet[][] getBoardSnapshot() { 35 SimplifiedBullet[][] board = new SimplifiedBullet[BOARD_WIDTH_X][BOARD_WIDTH_Y]; 36 37 for (int x = 0; x < BOARD_WIDTH_X; x++) { 38 for (int y = 0; y < BOARD_WIDTH_Y; y++) { 39 Bullet tmpBullet = getBullet(x, y); 40 if (tmpBullet != null) { 41 board[x][y] = new SimplifiedBullet(tmpBullet.getColor(), tmpBullet.getStatus()); 42 } 43 } 44 } 45 46 return board; 47 } 48 49 public void updateBoardHistory() { 50 moveHistory.push(getBoardSnapshot()); 51 } 52 53 public void undoBoardHistory() { 54 SimplifiedBullet[][] bullets = moveHistory.pop(); 55 56 for (int x = 0; x < BOARD_WIDTH_X; x++) { 57 for (int y = 0; y < BOARD_WIDTH_Y; y++) { 58 SimplifiedBullet simpleBullet = bullets[x][y]; 59 if (simpleBullet != null) { 60 Bullet bullet = new Bullet(simpleBullet.getColor(), simpleBullet.getStatus()); 61 62 bullet.setBoardX(x); 63 bullet.setBoardY(y); 64 bullet.setResourceContainer(getResourceContainer()); 65 bullet.init(); 66 67 setBullet(x, y, bullet); 68 } else { 69 setBullet(x, y, null); 70 } 71 } 72 } 73 74 } 75 76 }