diff --git a/src/ch/bfh/sevennotseven/FieldCanvas.java b/src/ch/bfh/sevennotseven/FieldCanvas.java index 3021a05..9132d53 100644 --- a/src/ch/bfh/sevennotseven/FieldCanvas.java +++ b/src/ch/bfh/sevennotseven/FieldCanvas.java @@ -25,7 +25,6 @@ public class FieldCanvas extends JPanel{ }; - private int size; private Game game; private Point src; private Point dst; @@ -78,13 +77,12 @@ public class FieldCanvas extends JPanel{ addMouseListener(ad); addMouseMotionListener(ad); this.game=g; - this.size = game.getSize(); } private Point getClickPoint(Point globalPos) { int total = Math.min(this.getHeight()-borderTop-borderBottom,FieldCanvas.this.getWidth()-borderLeft-borderRight); - int space = total/size; + int space = total/game.getSize(); globalPos.translate(-borderLeft, -borderTop); if(globalPos.x<0 || globalPos.x >total || globalPos.y < 0 || globalPos.y > total) return null; @@ -102,22 +100,22 @@ public class FieldCanvas extends JPanel{ g.translate(borderLeft, borderTop); int total = Math.min(this.getHeight()-borderTop-borderBottom,FieldCanvas.this.getWidth()-borderLeft-borderRight); - int space = total/size; + int space = total/game.getSize(); g.setClip(0, 0, total-4,total-4); g.fillRect(0, 0, total-4,total-4); g.setColor(Color.white); - for(int i=0; i<=size; i++) { + for(int i=0; i<=game.getSize(); i++) { g.drawLine(0,i*space,total-2,i*space); g.drawLine(i*space,0,i*space,total-2); } if(game==null) return; - for(int x=0; x updateListeners; @@ -37,16 +39,9 @@ public class Game { * @author aaron * @param size */ - public Game (int size) { - /* Initialize variables */ - this.size = size; - this.level = 1; - this.score = 0; - this.freeBlocks = size * size; - this.updateListeners = new ArrayList(); - + public Game (int size) { rand = new Random(); // Initialize random object - this.reset(); + this.reset(size); } public void addUpdateListener(UpdateListener listener) { @@ -75,6 +70,10 @@ public class Game { } + public int getLinesLeft() { + return linesLeft; + } + public int getLevel(){ return level; } @@ -223,7 +222,11 @@ public class Game { * * @author aaron */ - public void reset(){ + public void reset(int size){ + this.size = size; + this.freeBlocks = size * size; + this.updateListeners = new ArrayList(); + // Initialize new blocks nextBlocks = new ArrayList(); nextBlocks.add(1); @@ -236,6 +239,7 @@ public class Game { score = 0; numUndos = 0; freeMoves = 0; + linesLeft=linesPerLevel; // Populate game field this.populateField(); @@ -328,6 +332,13 @@ public class Game { private void nextStep(final Point lastPoint) { if(!checkRemoveBlocks(lastPoint)){ populateField(); //add new blocks + } else { + linesLeft--; + if(linesLeft==0) { + level++; + linesLeft=linesPerLevel; + + } } emitUpdateEvent(); } diff --git a/src/ch/bfh/sevennotseven/Window.java b/src/ch/bfh/sevennotseven/Window.java index ca348d4..c031588 100644 --- a/src/ch/bfh/sevennotseven/Window.java +++ b/src/ch/bfh/sevennotseven/Window.java @@ -5,11 +5,14 @@ package ch.bfh.sevennotseven; import java.awt.BorderLayout; import java.awt.Button; +import java.awt.CardLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.HeadlessException; import java.awt.Panel; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; @@ -24,7 +27,7 @@ import javax.swing.JPanel; * @author aaron * */ -public class Window extends JFrame { +public class Window extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private Game game; @@ -34,6 +37,10 @@ public class Window extends JFrame { private JButton buttonUndo; private JButton buttonFreeMove; private JLabel labelScore; + private JLabel labelLinesLeft; + private JLabel labelLevel; + private JPanel mainPanel; + private CardLayout cardLayout; public Window(String title) throws HeadlessException { @@ -59,12 +66,16 @@ public class Window extends JFrame { buttonUndo = new JButton("Undo (0)"); buttonUndo.setEnabled(false); labelScore= new JLabel("Score: 0"); + labelLinesLeft = new JLabel("Lines Left: 40"); + labelLevel = new JLabel("Level: 1"); JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); topPanel.add(buttonFreeMove); topPanel.add(buttonUndo); topPanel.add(labelScore); + topPanel.add(labelLinesLeft); + topPanel.add(labelLevel); topPanel.add(moves); game.addUpdateListener(new Game.UpdateListener() { @@ -76,19 +87,48 @@ public class Window extends JFrame { buttonUndo.setEnabled(game.getAvailUndo()>0); buttonFreeMove.setText("Free Move ("+game.getAvailFreeMoves()+")"); buttonUndo.setText("Undo ("+game.getAvailUndo()+")"); + labelLinesLeft.setText("Lines Left: "+game.getLinesLeft()); + labelLevel.setText("Level: "+game.getLevel()); } }); - + JPanel welcomePanel = new JPanel(); + int sizes [] = {7,8,9,10}; + for(int i=0; i