Added support for freemoves and undo (game logic missing for latter).
This commit is contained in:
@@ -16,6 +16,7 @@ public class FieldCanvas extends JPanel{
|
|||||||
static final int borderTop = 5;
|
static final int borderTop = 5;
|
||||||
static final int borderBottom = 5;
|
static final int borderBottom = 5;
|
||||||
|
|
||||||
|
|
||||||
public static final Color[] colors = {
|
public static final Color[] colors = {
|
||||||
new Color(0xD66436),
|
new Color(0xD66436),
|
||||||
new Color(0x486F70),
|
new Color(0x486F70),
|
||||||
@@ -29,6 +30,7 @@ public class FieldCanvas extends JPanel{
|
|||||||
private Point src;
|
private Point src;
|
||||||
private Point dst;
|
private Point dst;
|
||||||
private List<Point> path;
|
private List<Point> path;
|
||||||
|
private boolean freeMoveMode = false;
|
||||||
|
|
||||||
FieldCanvas(Game g){
|
FieldCanvas(Game g){
|
||||||
MouseAdapter ad = new MouseAdapter(){
|
MouseAdapter ad = new MouseAdapter(){
|
||||||
@@ -65,10 +67,15 @@ public class FieldCanvas extends JPanel{
|
|||||||
super.mouseReleased(e);
|
super.mouseReleased(e);
|
||||||
dst = FieldCanvas.this.getClickPoint(e.getPoint());
|
dst = FieldCanvas.this.getClickPoint(e.getPoint());
|
||||||
path = null;
|
path = null;
|
||||||
|
if(freeMoveMode && !game.canMove(src, dst)) {
|
||||||
|
game.doFreeMove(src, dst);
|
||||||
|
} else {
|
||||||
if(dst != null && src!=null && !src.equals(dst)) {
|
if(dst != null && src!=null && !src.equals(dst)) {
|
||||||
System.out.println("Moving from "+src.toString()+ " to "+dst.toString());
|
System.out.println("Moving from "+src.toString()+ " to "+dst.toString());
|
||||||
game.doMove(src, dst);
|
game.doMove(src, dst);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
freeMoveMode = false;
|
||||||
src = null;
|
src = null;
|
||||||
repaint();
|
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) {
|
private Point getClickPoint(Point globalPos) {
|
||||||
int total = Math.min(this.getHeight()-borderTop-borderBottom,FieldCanvas.this.getWidth()-borderLeft-borderRight);
|
int total = Math.min(this.getHeight()-borderTop-borderBottom,FieldCanvas.this.getWidth()-borderLeft-borderRight);
|
||||||
int space = total/game.getSize();
|
int space = total/game.getSize();
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ public class Game {
|
|||||||
*/
|
*/
|
||||||
public Game (int size) {
|
public Game (int size) {
|
||||||
rand = new Random(); // Initialize random object
|
rand = new Random(); // Initialize random object
|
||||||
|
this.updateListeners = new ArrayList<UpdateListener>();
|
||||||
this.reset(size);
|
this.reset(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,7 +226,6 @@ public class Game {
|
|||||||
public void reset(int size){
|
public void reset(int size){
|
||||||
this.size = size;
|
this.size = size;
|
||||||
this.freeBlocks = size * size;
|
this.freeBlocks = size * size;
|
||||||
this.updateListeners = new ArrayList<UpdateListener>();
|
|
||||||
|
|
||||||
// Initialize new blocks
|
// Initialize new blocks
|
||||||
nextBlocks = new ArrayList<Integer>();
|
nextBlocks = new ArrayList<Integer>();
|
||||||
|
|||||||
@@ -63,8 +63,12 @@ public class Window extends JFrame implements ActionListener{
|
|||||||
|
|
||||||
buttonFreeMove= new JButton("Free Move (0)");
|
buttonFreeMove= new JButton("Free Move (0)");
|
||||||
buttonFreeMove.setEnabled(false);
|
buttonFreeMove.setEnabled(false);
|
||||||
|
buttonFreeMove.addActionListener(this);
|
||||||
|
buttonFreeMove.setActionCommand("freemove");
|
||||||
buttonUndo = new JButton("Undo (0)");
|
buttonUndo = new JButton("Undo (0)");
|
||||||
buttonUndo.setEnabled(false);
|
buttonUndo.setEnabled(false);
|
||||||
|
buttonUndo.addActionListener(this);
|
||||||
|
buttonUndo.setActionCommand("undo");
|
||||||
labelScore= new JLabel("Score: 0");
|
labelScore= new JLabel("Score: 0");
|
||||||
labelLinesLeft = new JLabel("Lines Left: 40");
|
labelLinesLeft = new JLabel("Lines Left: 40");
|
||||||
labelLevel = new JLabel("Level: 1");
|
labelLevel = new JLabel("Level: 1");
|
||||||
@@ -125,9 +129,16 @@ public class Window extends JFrame implements ActionListener{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
int size = Integer.parseInt(e.getActionCommand());
|
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);
|
cardLayout.last(mainPanel);
|
||||||
game.reset(size);
|
game.reset(size);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user