Fixed flickering. Fixed rendering.
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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)){
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user