Refactored main gui

This commit is contained in:
t-moe
2016-06-17 13:18:13 +02:00
parent 89d7ffdd29
commit bef640b122
4 changed files with 120 additions and 26 deletions

View File

@@ -13,10 +13,10 @@ public class FieldCanvas extends JPanel{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
static final int borderLeft = 5; static final int borderLeft = 5;
static final int borderRight = 5; static final int borderRight = 5;
static final int borderTop = 100; static final int borderTop = 5;
static final int borderBottom = 5; static final int borderBottom = 5;
static final Color[] colors = { public static final Color[] colors = {
new Color(0xD66436), new Color(0xD66436),
new Color(0x486F70), new Color(0x486F70),
new Color(0xCBD840), new Color(0xCBD840),
@@ -25,14 +25,13 @@ public class FieldCanvas extends JPanel{
}; };
private int size; private int size;
private Game game; private Game game;
private Point src; private Point src;
private Point dst; private Point dst;
private List<Point> path; private List<Point> path;
FieldCanvas(){ FieldCanvas(Game g){
MouseAdapter ad = new MouseAdapter(){ MouseAdapter ad = new MouseAdapter(){
@Override @Override
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
@@ -78,6 +77,8 @@ public class FieldCanvas extends JPanel{
addMouseListener(ad); addMouseListener(ad);
addMouseMotionListener(ad); addMouseMotionListener(ad);
this.game=g;
this.size = game.getSize();
} }
@@ -90,28 +91,12 @@ public class FieldCanvas extends JPanel{
return new Point(globalPos.x/space,globalPos.y/space); return new Point(globalPos.x/space,globalPos.y/space);
} }
public void setGame(Game game) {
this.game=game;
}
public void setSize(int s) {
this.size = s;
}
public void paintComponent(Graphics g) { public void paintComponent(Graphics g) {
super.paintComponent(g); super.paintComponent(g);
g.setColor(Color.lightGray);
List<Integer> nextBlocks = game.getNextBlocks();
for(int i=0; i< nextBlocks.size(); i++) {
g.setColor(colors[nextBlocks.get(i)-1]);
g.fillRect(borderLeft + borderTop/2 *i, borderTop/4, borderTop/2, borderTop/2);
g.setColor(Color.white);
g.drawRect(borderLeft + borderTop/2 *i, borderTop/4, borderTop/2, borderTop/2);
}
g.setColor(Color.lightGray); g.setColor(Color.lightGray);

View File

@@ -7,6 +7,11 @@ import java.util.Random;
public class Game { public class Game {
interface UpdateListener {
public void gameUpdate();
}
// Constants // Constants
static final int numberOfColors = 5; static final int numberOfColors = 5;
@@ -20,6 +25,7 @@ public class Game {
private int freeMoves; private int freeMoves;
private int numUndos; private int numUndos;
private Random rand; private Random rand;
private ArrayList<UpdateListener> updateListeners;
public Game(){ public Game(){
this(7); this(7);
@@ -31,16 +37,33 @@ public class Game {
this.level = 1; this.level = 1;
this.score = 0; this.score = 0;
this.freeBlocks = size * size; this.freeBlocks = size * size;
this.updateListeners = new ArrayList<UpdateListener>();
rand = new Random(); // Initialize random object rand = new Random(); // Initialize random object
this.reset(); this.reset();
} }
public void addUpdateListener(UpdateListener listener) {
updateListeners.add(listener);
}
public void removeUpdateListener(UpdateListener listener) {
updateListeners.remove(listener);
}
private void emitUpdateEvent() {
for(UpdateListener e: updateListeners) {
e.gameUpdate();
}
}
public boolean isGameOver(){ public boolean isGameOver(){
return false; return false;
} }
public int getSize() {
return size;
}
public int getScore(){ public int getScore(){
return score; return score;
@@ -251,6 +274,7 @@ public class Game {
if(!checkRemoveBlocks(lastPoint)){ if(!checkRemoveBlocks(lastPoint)){
populateField(); //add new blocks populateField(); //add new blocks
} }
emitUpdateEvent();
} }
/** /**

View File

@@ -0,0 +1,44 @@
package ch.bfh.sevennotseven;
import java.awt.Color;
import java.awt.Graphics;
import java.util.List;
import javax.swing.JPanel;
public class NextMovesCanvas extends JPanel {
private Game game;
static final int borderLeft = 1;
static final int borderRight = 1;
static final int borderTop = 1;
static final int borderBottom = 1;
public NextMovesCanvas(Game g) {
this.game = g;
g.addUpdateListener(new Game.UpdateListener() {
@Override
public void gameUpdate() {
NextMovesCanvas.this.repaint();
}
});
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.lightGray);
int height = getHeight() - borderTop-borderBottom;
List<Integer> nextBlocks = game.getNextBlocks();
for(int i=0; i< nextBlocks.size(); i++) {
g.setColor(FieldCanvas.colors[nextBlocks.get(i)-1]);
g.fillRect(borderLeft + height *i, borderTop, height,height);
g.setColor(Color.white);
g.drawRect(borderLeft + height *i, borderTop, height,height);
}
}
}

View File

@@ -3,22 +3,37 @@
*/ */
package ch.bfh.sevennotseven; package ch.bfh.sevennotseven;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame; import java.awt.Frame;
import java.awt.HeadlessException; import java.awt.HeadlessException;
import java.awt.Panel;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/** /**
* @author aaron * @author aaron
* *
*/ */
public class Window extends Frame { public class Window extends JFrame {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private Game game; private Game game;
private FieldCanvas field; private FieldCanvas field;
private NextMovesCanvas moves;
private JButton buttonUndo;
private JButton buttonFreeMove;
private JLabel labelScore;
public Window(String title) throws HeadlessException { public Window(String title) throws HeadlessException {
@@ -31,16 +46,42 @@ public class Window extends Frame {
} }
}); });
field = new FieldCanvas();
field.setSize(7);
game = new Game(); game = new Game();
field.setGame(game); moves = new NextMovesCanvas(game);
field = new FieldCanvas(game);
moves.setPreferredSize(new Dimension(200, 40));
buttonFreeMove= new JButton("FreeMove");
buttonUndo = new JButton("Undo");
labelScore= new JLabel("Score: 0");
JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
topPanel.add(buttonFreeMove);
topPanel.add(buttonUndo);
topPanel.add(labelScore);
topPanel.add(moves);
game.addUpdateListener(new Game.UpdateListener() {
@Override
public void gameUpdate() {
labelScore.setText("Score: "+game.getScore());
}
});
this.add(topPanel, BorderLayout.NORTH);
this.add(field); this.add(field);
this.setSize(400,400); this.setSize(470,460);
this.setVisible(true); this.setVisible(true);
} }