Fixed flickering. Fixed rendering.

This commit is contained in:
t-moe
2016-06-16 08:36:58 +02:00
parent 01be52e123
commit d4ae7264ff
3 changed files with 77 additions and 42 deletions

View File

@@ -1,52 +1,73 @@
package ch.bfh.sevennotseven; package ch.bfh.sevennotseven;
import java.awt.Canvas;
import java.awt.Color; import java.awt.Color;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class FieldCanvas extends Canvas{ import javax.swing.JPanel;
public class FieldCanvas extends JPanel{
private static final long serialVersionUID = 1L;
private int size; private int size;
private int[][] field; private Game game;
static final Color[] colors = {Color.red,Color.green, Color.blue, Color.yellow,Color.magenta}; static final Color[] colors = {Color.red,Color.green, Color.blue, Color.yellow,Color.magenta};
FieldCanvas(){ FieldCanvas(){
addMouseListener(new MouseAdapter(){
@Override
public void mousePressed(MouseEvent e) {
super.mousePressed(e);
Point point = e.getPoint();
int total = Math.min(FieldCanvas.this.getHeight(),FieldCanvas.this.getWidth())-10;
int space = total/size;
repaint();
}
});
} }
public void setGame(Game game) {
this.game=game;
}
public void setSize(int s) { public void setSize(int s) {
this.size = s; this.size = s;
} }
public void setField(int[][] field){
this.field = field;
} public void paintComponent(Graphics g) {
super.paintComponent(g);
public void paint(Graphics g) {
g.setColor(Color.lightGray); g.setColor(Color.lightGray);
int total = this.getHeight(); g.translate(5, 5);
int total = Math.min(this.getHeight(),this.getWidth())-10;
int space = total/size; int space = total/size;
g.setClip(0, 0, total,total); g.setClip(0, 0, total-1,total-1);
g.fillRect(0, 0, total,total); g.fillRect(0, 0, total-1,total-1);
g.setColor(Color.white); g.setColor(Color.white);
for(int i=0; i<=size; i++) { for(int i=0; i<=size; i++) {
g.drawLine(0,i*space,total,i*space); g.drawLine(0,i*space,total-2,i*space);
g.drawLine(i*space,0,i*space,total); g.drawLine(i*space,0,i*space,total-2);
} }
if(field==null) return; if(game==null) return;
for(int x=0; x<size; x++) { for(int x=0; x<size; x++) {
for(int y=0; y<size; y++) { for(int y=0; y<size; y++) {
int colorCode = field[x][y]; int colorCode = game.getField()[x][y];
if(colorCode!=0) { if(colorCode!=0) {
g.setColor(colors[colorCode-1]); g.setColor(colors[colorCode-1]);
g.fillRect(x*space+2, y*space+2, space -3, space -3); g.fillRect(x*space+2, y*space+2, space -3, space -3);

View File

@@ -40,7 +40,7 @@ public class Game {
} }
public int getScore(){ public int getScore(){
return 0; return score;
} }
@@ -58,11 +58,16 @@ public class Game {
} }
public boolean canMove(Point src, Point dst){ public boolean canMove(Point src, Point dst){
return false; return getPath(src, dst)!=null;
} }
public boolean doMove(Point src, Point dst){ public boolean doMove(Point src, Point dst){
return false; if(!canMove(src, dst)) return false; //checking if there is a path from src to dest
if(field[src.x][src.y]==0) return false;
field[dst.x][dst.y] = field[src.x][src.y];
field[src.x][src.y] = 0;
nextStep(dst); //cleanup rows or add new blocks
return true;
} }
public List<Point> getPath(Point src, Point dst){ public List<Point> getPath(Point src, Point dst){
@@ -74,7 +79,15 @@ public class Game {
} }
public boolean doFreeMove(Point src, Point dst){ public boolean doFreeMove(Point src, Point dst){
return false; //move without path checking
if(getAvailFreeMoves() <= 0 ) return false;
if(field[src.x][src.y]==0) return false;
field[dst.x][dst.y] = field[src.x][src.y];
field[src.x][src.y] = 0;
nextStep(dst); //cleanup rows or add new blocks
return true;
} }
public int getAvailFreeMoves(){ public int getAvailFreeMoves(){
@@ -101,12 +114,24 @@ public class Game {
this.populateField(); this.populateField();
} }
/**
* Calculates the next game step. This method will either call populateField, or it will cleanup blocks
*/
private void nextStep(Point lastPoint) {
//TODO: Check if there are any new rows (with at least 4 elements horizontally, vertically, or diagonal) near lastpoint
//TODO: if so: remove the row, add some points or extras and quit
//TODO: if not:
populateField(); //add new blocks
}
/* /*
* Calculates the next game step.
* Add n new blocks to random positions on the field, * Adds n new blocks to random positions on the field,
* according to the level number. * according to the level number.
*/ */
public void populateField(){ private void populateField(){
// while there are blocks left in nextBlocks // while there are blocks left in nextBlocks
while((nextBlocks.size() > 0) && (freeBlocks > 0)){ while((nextBlocks.size() > 0) && (freeBlocks > 0)){

View File

@@ -5,8 +5,6 @@ package ch.bfh.sevennotseven;
import java.awt.Frame; import java.awt.Frame;
import java.awt.HeadlessException; import java.awt.HeadlessException;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
@@ -18,13 +16,11 @@ import java.awt.event.WindowEvent;
*/ */
public class Window extends Frame { public class Window extends Frame {
private static final long serialVersionUID = 1L;
private Game game; private Game game;
private FieldCanvas field; private FieldCanvas field;
/**
* @param title
* @throws HeadlessException
*/
public Window(String title) throws HeadlessException { public Window(String title) throws HeadlessException {
super(title); super(title);
@@ -38,28 +34,21 @@ public class Window extends Frame {
field = new FieldCanvas(); field = new FieldCanvas();
field.setSize(7); field.setSize(7);
game = new Game(); game = new Game();
field.setGame(game);
field.addMouseListener(new MouseAdapter(){
@Override
public void mousePressed(MouseEvent e) {
super.mousePressed(e);
game.populateField();
field.repaint();
}
});
this.add(field); this.add(field);
this.setSize(400,400); this.setSize(400,400);
this.setVisible(true); this.setVisible(true);
field.setField(game.getField());
} }
/** /**
* @param args * @param args
*/ */
public static void main(String[] args) { public static void main(String[] args) {
new Window("Test"); new Window("7 not 7");
} }