From 13c391775fef06acf1249b57a7fde5042af737e3 Mon Sep 17 00:00:00 2001 From: t-moe Date: Mon, 20 Jun 2016 01:11:02 +0200 Subject: [PATCH] Added support for freemoves and undo (game logic missing for latter). --- src/ch/bfh/sevennotseven/FieldCanvas.java | 25 ++++++++++++++++++++--- src/ch/bfh/sevennotseven/Game.java | 2 +- src/ch/bfh/sevennotseven/Window.java | 17 ++++++++++++--- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/ch/bfh/sevennotseven/FieldCanvas.java b/src/ch/bfh/sevennotseven/FieldCanvas.java index 9132d53..fe55ac7 100644 --- a/src/ch/bfh/sevennotseven/FieldCanvas.java +++ b/src/ch/bfh/sevennotseven/FieldCanvas.java @@ -16,6 +16,7 @@ public class FieldCanvas extends JPanel{ static final int borderTop = 5; static final int borderBottom = 5; + public static final Color[] colors = { new Color(0xD66436), new Color(0x486F70), @@ -29,6 +30,7 @@ public class FieldCanvas extends JPanel{ private Point src; private Point dst; private List path; + private boolean freeMoveMode = false; FieldCanvas(Game g){ MouseAdapter ad = new MouseAdapter(){ @@ -65,10 +67,15 @@ public class FieldCanvas extends JPanel{ super.mouseReleased(e); dst = FieldCanvas.this.getClickPoint(e.getPoint()); path = null; - if(dst != null && src!=null && !src.equals(dst)) { - System.out.println("Moving from "+src.toString()+ " to "+dst.toString()); - game.doMove(src, dst); + if(freeMoveMode && !game.canMove(src, dst)) { + game.doFreeMove(src, dst); + } else { + if(dst != null && src!=null && !src.equals(dst)) { + System.out.println("Moving from "+src.toString()+ " to "+dst.toString()); + game.doMove(src, dst); + } } + freeMoveMode = false; src = null; repaint(); } @@ -80,6 +87,18 @@ public class FieldCanvas extends JPanel{ } + public void doFreeMove() { + if(game.getAvailFreeMoves()>0) { + freeMoveMode = true; + } + } + + public void doUndo() { + if(game.getAvailUndo()>0) { + game.doUndo(); + } + } + private Point getClickPoint(Point globalPos) { int total = Math.min(this.getHeight()-borderTop-borderBottom,FieldCanvas.this.getWidth()-borderLeft-borderRight); int space = total/game.getSize(); diff --git a/src/ch/bfh/sevennotseven/Game.java b/src/ch/bfh/sevennotseven/Game.java index e1a1213..7ca1c98 100644 --- a/src/ch/bfh/sevennotseven/Game.java +++ b/src/ch/bfh/sevennotseven/Game.java @@ -41,6 +41,7 @@ public class Game { */ public Game (int size) { rand = new Random(); // Initialize random object + this.updateListeners = new ArrayList(); this.reset(size); } @@ -225,7 +226,6 @@ public class Game { public void reset(int size){ this.size = size; this.freeBlocks = size * size; - this.updateListeners = new ArrayList(); // Initialize new blocks nextBlocks = new ArrayList(); diff --git a/src/ch/bfh/sevennotseven/Window.java b/src/ch/bfh/sevennotseven/Window.java index c031588..c2615a2 100644 --- a/src/ch/bfh/sevennotseven/Window.java +++ b/src/ch/bfh/sevennotseven/Window.java @@ -63,8 +63,12 @@ public class Window extends JFrame implements ActionListener{ buttonFreeMove= new JButton("Free Move (0)"); buttonFreeMove.setEnabled(false); + buttonFreeMove.addActionListener(this); + buttonFreeMove.setActionCommand("freemove"); buttonUndo = new JButton("Undo (0)"); buttonUndo.setEnabled(false); + buttonUndo.addActionListener(this); + buttonUndo.setActionCommand("undo"); labelScore= new JLabel("Score: 0"); labelLinesLeft = new JLabel("Lines Left: 40"); labelLevel = new JLabel("Level: 1"); @@ -125,9 +129,16 @@ public class Window extends JFrame implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { - int size = Integer.parseInt(e.getActionCommand()); - cardLayout.last(mainPanel); - game.reset(size); + String command = e.getActionCommand(); + if(command.equals("undo")) { + field.doUndo(); + } else if (command.equals("freemove")) { + field.doFreeMove(); + } else { + int size = Integer.parseInt(command); + cardLayout.last(mainPanel); + game.reset(size); + } }