:applaus:
Toll dass DU vorbeischaust.
Ja, so sollte mein Spiel aussehen.
Das Model dazu ist zunächst:
MosaikModel hat aber auch switch() benötigt, welche sich in MosaikCanvas befindet.
Dort wird auch MosaikIF implementiert.
Also MosaikCanvas:
Also hier in MosaikCanvas geht es um die graphische Umsetzung.
Um meine Mausklicks registrieren zu können habe ich eine Controller-Klasse geschrieben:
MosaikEventHandler:
Bei mosaikEventHandler hab ich versucht alle Kästchen auf einer Hashtable zu speichern und zwar mit ModelIF-Objekten. Der Zugriff auf die Kästchen wird über action() gemach welch in der ModelIF steckt. Diese ist auch im MosaikModel implementiert.
Bis HIER gabs KEINE PROBLEME!
:autsch:
Jetzt kommts:
FarbMosaik ist das Problem:
Fehlermeldung:C:\eclipse_workspace\MoSp3>javac FarbMosaik.java
FarbMosaik.java:23: cannot resolve symbol
symbol : method setLayout (java.awt.GridLayout)
location: class FarbMosaik
this.setLayout(new GridLayout(raster,raster,1,1));
^
FarbMosaik.java:29: addMouseListener(java.awt.event.MouseListener) in java.awt.C
omponent cannot be applied to (MosaikEventHandler)
mc.addMouseListener(eventHandler) ;
^
FarbMosaik.java:30: cannot resolve symbol
symbol : variable mosaikModel
location: class FarbMosaik
mosaikModel.putObj(i, j, mc);
^
FarbMosaik.java:32: cannot resolve symbol
symbol : method add (MosaikCanvas3)
location: class FarbMosaik
this.add(mc);
^
4 errors
:noe:
Toll dass DU vorbeischaust.
Ja, so sollte mein Spiel aussehen.
Das Model dazu ist zunächst:
Java:
public class MosaikModel implements ModelIF {
private MosaikIF [] [] mObjects;
private int zeilen, spalten;
public MosaikModel(int zeilen, int spalten) {
this.zeilen=zeilen;
this.spalten=spalten;
mObjects = new MosaikIF[zeilen][spalten];
/*MosaikIF statt MosaikCanvas2*/
}
public void switchNachbarn(int zeile, int spalte) {
//Mitte ,Links ,Rechts
if(zeile-1>=0) {
invert(zeile-1,spalte);
if(spalte-1>=0) {
invert(zeile-1,spalte-1);
}
if(spalte+1<spalten) {
invert(zeile-1,spalte+1);
}
}
if(spalte-1>=0) {
invert(zeile,spalte-1);
}
if(spalte+1<spalten) {
invert(zeile,spalte+1);
}
if(zeile+1<zeilen) {
invert(zeile+1,spalte);
if(spalte-1>=0) {
invert(zeile+1,spalte-1);
}
if(spalte+1<spalten) {
invert(zeile+1,spalte+1);
}
}
}
private void invert(int zeile,int spalte) {
mObjects [zeile][spalte].switchSeite();
}
public void putObj (int zeile,int spalte ,MosaikIF mObj) {
mObjects [zeile][spalte ]= mObj;
}
public void action(int zeile, int spalte) {
this.switchNachbarn(zeile,spalte);
}
}
[/Java]
Wie DU erkennen kannst steuert MosaikModel welche Kästchen gefärbt werden.(switchNachbarn.)
Sämtliche Kästchen werden in einem MosaikIF Array abgelegt.
MosaikIF:
[code=Java]
public interface MosaikIF {
boolean isVorderseite();
int getZeile();
int getSpalte();
void switchSeite();
}
MosaikModel hat aber auch switch() benötigt, welche sich in MosaikCanvas befindet.
Dort wird auch MosaikIF implementiert.
Also MosaikCanvas:
Java:
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
public class MosaikCanvas3 extends Canvas implements MosaikIF {
/**
*
*/
private static final long serialVersionUID = 1L;
private Color farbe, farbeRueckseite, farbeVorderseite;
public Color getFarbe() {
return farbe;
}
public void setFarbe(Color inValue) {
farbe=inValue;
}
private boolean vorderseite = false;
public boolean isVorderseite() {
return vorderseite;
}
private int zeile, spalte;
public int getZeile() {
return zeile;
}
public int getSpalte() {
return spalte;
}
public MosaikCanvas3(int zeile,int spalte, Color farbeRueckseite, Color farbeVorderseite) {
this.zeile=zeile;
this.spalte=spalte;
this.farbeRueckseite=farbeRueckseite;
this.farbeVorderseite=farbeVorderseite;
this.setFarbe(farbeRueckseite);
}
public void switchSeite() {
vorderseite=!vorderseite;
farbe=(farbe==farbeRueckseite)? farbeVorderseite : farbeRueckseite;
repaint();
}
public void paint(Graphics g) {
g.setColor(getFarbe());
g.fillRect(0, 0, this.getSize().width-1 ,this.getSize().height-1 );
}
}
Also hier in MosaikCanvas geht es um die graphische Umsetzung.
Um meine Mausklicks registrieren zu können habe ich eine Controller-Klasse geschrieben:
MosaikEventHandler:
Java:
import java.awt.event.MouseEvent;
import java.util.Enumeration;
import java.util.Hashtable;
public class MosaikEventHandler {
Hashtable modelTable;
Object key;
public MosaikEventHandler(ModelIF model) {
modelTable = new Hashtable();
addModel(model);
}
public void addModel(ModelIF model) {
key=new Integer(model.hashCode());
modelTable.put(key, model);// TODO Auto-generated method stub
}
public ModelIF removeModel(ModelIF model) {
key=new Integer(model.hashCode() );
return (ModelIF)modelTable.remove(key);
}
private int zeile, spalte;
/* MosaikIF statt MosaikCansas2*/
public void mouseReleased(MouseEvent me) {
zeile=((MosaikIF)me.getSource()).getZeile();
spalte=((MosaikIF)me.getSource()).getSpalte();
Enumeration enum = modelTable.keys();
while(enum.hasMoreElements()) {
key=enum.nextElement();
((ModelIF)modelTable.get(key)).action(zeile, spalte);
}
}
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
Bis HIER gabs KEINE PROBLEME!
:autsch:
Jetzt kommts:
FarbMosaik ist das Problem:
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseListener;
public class FarbMosaik {
private ModelIF model;
private MosaikEventHandler eventHandler;
public FarbMosaik(int raster, int breite, Color farbeRueckseite, Color farbeVorderseite) {
model= new MosaikModel(raster,raster);
eventHandler=new MosaikEventHandler(model);
this.setLayout(new GridLayout(raster,raster,1,1));
int canvasBreite=breite/raster;
for(int i=0;i<raster;i++) {
for (int j=0;j<raster;j++) {
MosaikCanvas3 mc3 = new MosaikCanvas3(i,j,farbeRueckseite,farbeVorderseite);
mc3.addMouseListener((eventHandler) ) ;
model.putObj(i, j, mc3);
mc3.setSize(canvasBreite,canvasBreite);
this.add(mc3);
}
}
}
}
Fehlermeldung:C:\eclipse_workspace\MoSp3>javac FarbMosaik.java
FarbMosaik.java:23: cannot resolve symbol
symbol : method setLayout (java.awt.GridLayout)
location: class FarbMosaik
this.setLayout(new GridLayout(raster,raster,1,1));
^
FarbMosaik.java:29: addMouseListener(java.awt.event.MouseListener) in java.awt.C
omponent cannot be applied to (MosaikEventHandler)
mc.addMouseListener(eventHandler) ;
^
FarbMosaik.java:30: cannot resolve symbol
symbol : variable mosaikModel
location: class FarbMosaik
mosaikModel.putObj(i, j, mc);
^
FarbMosaik.java:32: cannot resolve symbol
symbol : method add (MosaikCanvas3)
location: class FarbMosaik
this.add(mc);
^
4 errors
:noe:
Zuletzt bearbeitet: