import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
public class PlaygroundPanel extends JPanel {
private int[][] playground;
private PlaygroundColors myColors=new PlaygroundColors();
private ModelObservable model;
private int xBoxWidth;
private int yBoxWidth;
private int xOffset;
private int yOffset;
public PlaygroundPanel(ModelObservable model, GenerationScheduler sched){
this.model=model;
playground=new int[30][30];
playground= model.getPlayground();
this.setPreferredSize(new Dimension(700,700));
this.setBackground(Color.YELLOW);
this.addMouseListener(new PlaygroundMouseAdapter(this, sched));
}
public void display( int[][] playground){
if (playground.length == 0 || playground[0].length == 0) {
throw new IllegalArgumentException("leerer Playground");
}
this.playground=playground;
this.repaint();
}
public void paint( Graphics g){
super.paint(g);
xBoxWidth=(this.getWidth() / playground.length);
yBoxWidth=(this.getHeight() / playground[0].length);
xOffset=(this.getWidth() - playground.length * xBoxWidth) / 2;
yOffset=(this.getHeight() - playground[0].length * yBoxWidth) / 2;
for (int x=0; x < playground.length; x++) {
for (int y=0; y < playground[x].length; y++) {
g.setColor(Color.BLACK);
g.fillRect(xOffset + (x + 1) * xBoxWidth - 2,yOffset + (y) * yBoxWidth,2,yBoxWidth);
g.fillRect(xOffset + (x) * xBoxWidth,yOffset + (y + 1) * yBoxWidth - 2,xBoxWidth,2);
g.setColor(myColors.getColor(playground[x][y]));
g.fillRect(xOffset + x * xBoxWidth,yOffset + y * yBoxWidth,xBoxWidth - 2,yBoxWidth - 2);
}
}
}
public int getXCoordinate( int pixel){
return (pixel - xOffset) / xBoxWidth;
}
public int getYCoordinate( int pixel){
return (pixel - yOffset) / yBoxWidth;
}
public int getXOffset() {
return xOffset;
}
public int getYOffset() {
return yOffset;
}
public int getXBoxWidth() {
return xBoxWidth;
}
public int getYBoxWidth() {
return yBoxWidth;
}
public ModelObservable getModel() {
return model;
}
public void setFieldOnPlayground(int x, int y, int value) {
playground[x][y] = value;
model.setLifeform(x,y,value);
}
public int getFieldOnPlayground(int x, int y) {
return playground[x][y];
}
static class PlaygroundColors1 {
public static Color getColor( int i){
switch (i) {
case (0):
return Color.BLUE;
case (1):
return Color.RED;
case (2):
return Color.CYAN;
case (3):
return Color.GREEN;
case (4):
return Color.ORANGE;
default :
return Color.BLACK;
}
}
}
class PlaygroundColors {
Color[] colors;
public PlaygroundColors(){
colors=new Color[5];
colors[0]=new Color(255,240,165);
colors[1]=new Color(70,137,102);
colors[2]=new Color(255,176,59);
colors[3]=new Color(182,73,38);
colors[4]=new Color(66,71,142);
}
/**
* Default color (dead) is i = 0.
*
* @param i
* @return
*/
public Color getColor(int i){
return colors[i];
}
}
}