Hallo Leute,
ich habe ein Mosaikspiel (Applet), welches beim Klick auf ein Kärtchen (Canvas-Objekt) die umliegenden Karten "umdreht".
Das Spiel verfügt über ein Protokolfenster, welches das selbe Raster anzeigt wie das Applet. Soweit so gut.
In diesem Protokollfenster soll genau das Kärtchen "umgedreht" werden, welches im Applet angeklickt wurde.
So soll man einen Überblick haben, welche Kärtchen schon im Applet angeklickt wurden.
Ich weiß absolut nicht, wie ich den eventHandler dazu bewegt bekomme, die angeklickte Karte des Applets im Protokollfenster umzudrehen.
Ich wäre euch für eine Hilfestellung sehr dankbar. Ich liste mal die Klassen auf.
Ich weiss, dass es recht viel Code ist, ich bin aber wirklich schon ein wenig verzweifelt, da ich absolut ein Brett vor dem Kopf habe.
Wichtig sind die Klassen, ProtokollFrame, ProtokollModel, MosaikEventHandler für das Protokollfenster.
Danke schon mal!
Gruß
Aphex
ich habe ein Mosaikspiel (Applet), welches beim Klick auf ein Kärtchen (Canvas-Objekt) die umliegenden Karten "umdreht".
Das Spiel verfügt über ein Protokolfenster, welches das selbe Raster anzeigt wie das Applet. Soweit so gut.
In diesem Protokollfenster soll genau das Kärtchen "umgedreht" werden, welches im Applet angeklickt wurde.
So soll man einen Überblick haben, welche Kärtchen schon im Applet angeklickt wurden.
Ich weiß absolut nicht, wie ich den eventHandler dazu bewegt bekomme, die angeklickte Karte des Applets im Protokollfenster umzudrehen.
Ich wäre euch für eine Hilfestellung sehr dankbar. Ich liste mal die Klassen auf.
Ich weiss, dass es recht viel Code ist, ich bin aber wirklich schon ein wenig verzweifelt, da ich absolut ein Brett vor dem Kopf habe.
Wichtig sind die Klassen, ProtokollFrame, ProtokollModel, MosaikEventHandler für das Protokollfenster.
Danke schon mal!
Gruß
Aphex
Code:
<html>
<body>
<applet code=einsendeaufgabeJAV05.Mosaik.class width="300" height="300" >
<param name="raster" value="4" />
<param name="frame" value="on" />
</applet>
</body>
</html>
Code:
package einsendeaufgabeJAV05;
import java.awt.*;
import kapitel4.MosaikCanvas;
import kapitel4.MosaikEventHandler;
import kapitel4.MosaikModel;
public class FarbMosaik extends Panel {
protected MosaikModel mm;
protected MosaikEventHandler eventHandler;
public FarbMosaik (int raster, int breite, Color farbeRueck, Color farbeVor) {
mm = new MosaikModel(raster, raster);
eventHandler = new MosaikEventHandler(mm);
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++) {
MosaikCanvas mc = new MosaikCanvas (i, j, farbeRueck, farbeVor);
mc.addMouseListener(eventHandler);
mm.putMObj(i, j, mc);
mc.setSize(canvasBreite, canvasBreite);
add(mc);
}
}
}
}
Code:
package einsendeaufgabeJAV05;
public interface ModelIF {
public void action(int zeile, int spalte);
public void putMObj(int zeile, int spalte, MosaikIF mOBj);
public MosaikIF getMObj(int zeile, int spalte);
}
Code:
package einsendeaufgabeJAV05;
import java.awt.*;
import java.applet.Applet;
public class Mosaik extends java.applet.Applet {
private int raster;
private Color farbeRueck, farbeVor;
public void init() {
resize(250, 280);
String temp=getParameter("raster");
raster=Integer.parseInt(temp);
farbeRueck=new Color(230,30,50);
farbeVor=new Color(50,210,30);
//Objekterzeugung vom Typ FarbMosaik
FarbMosaik fm=new FarbMosaik(raster, getSize().width, farbeRueck, farbeVor);
add(fm);
//Spiel mit oder ohne ProtokollFenster
String sFrame = getParameter("frame");
if (sFrame.equals("on")){
ProtokollFrame pf =new ProtokollFrame(raster, getSize().width, farbeRueck, farbeVor);
}
}
}
Code:
package einsendeaufgabeJAV05;
import java.awt.*;
public class MosaikCanvas extends Canvas implements MosaikIF {
//Instanzvariablen
private Color farbe, farbeRueck, farbeVor;
private boolean seite;
private int zeile, spalte;
public Color getFarbe() {
return farbe;
}
public void setFarbe(Color inValue) {
this.farbe = inValue;
}
public boolean getSeite() {
return seite;
}
public void setSeite(boolean inValue) {
this.seite = inValue;
}
public int getSpalte() {
return spalte;
}
public void setSpalte(int inValue) {
this.spalte = inValue;
}
public int getZeile() {
return zeile;
}
public void setZeile(int inValue) {
this.zeile = inValue;
}
//Konstruktormethode
public MosaikCanvas(int zeile, int spalte, Color farbeRueck, Color farbeVor) {
this.zeile=zeile;
this.spalte=spalte;
this.farbeRueck=farbeRueck;
this.farbeVor=farbeVor;
setSeite(false);
setFarbe(farbeRueck);
}
//Methode zum Drehen der Karten
public void switchSeite() {
seite=!seite;
farbe=(farbe==farbeRueck) ? farbeVor : farbeRueck;
repaint();
}
public void paint(Graphics g) {
g.setColor(getFarbe());
g.fillRect(0, 0, getSize().width-1, getSize().height-1);
}
}
Code:
package einsendeaufgabeJAV05;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.util.*;
import javax.swing.*;
import java.awt.Frame;
public class MosaikEventHandler implements MouseListener {
ModelIF mm;
ModelIF pmm;
Hashtable modelTable;
Frame fenster;
Object key;
Object keypf;
private int zeile;
private int spalte;
public MosaikEventHandler(ModelIF mm) {
this.mm=mm;
modelTable=new Hashtable();
key=new Integer(mm.hashCode());
modelTable.put(key, mm);
}
public void addModel (ModelIF model) {
key=new Integer(model.hashCode());
//keypf=new Integer(model.hashCode());
modelTable.put(key, mm);
modelTable.put(key, pmm);
//JOptionPane.showMessageDialog(null, fenster, "Test Titel", JOptionPane.OK_CANCEL_OPTION);
}
public ModelIF removeModel (ModelIF model) {
key=new Integer(model.hashCode());
return (ModelIF)modelTable.remove(key);
}
public void mouseClicked(MouseEvent me) {
}
public void mouseEntered(MouseEvent me) {
}
public void mouseExited(MouseEvent me) {
}
public void mousePressed(MouseEvent me) {
}
public void mouseReleased(MouseEvent me) {
zeile=((MosaikIF)me.getSource()).getZeile();
spalte=((MosaikIF)me.getSource()).getSpalte();
Enumeration enumk=modelTable.keys();
while(enumk.hasMoreElements()) {
key=enumk.nextElement();
((ModelIF)modelTable.get(key)).action(zeile, spalte);
((MosaikIF)me.getSource()).switchSeite();
}
}
}
Code:
package einsendeaufgabeJAV05;
public interface MosaikIF {
public boolean getSeite();
public int getSpalte();
public int getZeile();
public void switchSeite();
}
Code:
package einsendeaufgabeJAV05;
import java.awt.*;
//Programmlogik
public class MosaikModel implements ModelIF {
MosaikIF [][] mObjects;
int zeilen, spalten;
//Konstruktor
public MosaikModel (int zeilen, int spalten) {
this.zeilen=zeilen;
this.spalten=spalten;
//zweidimensionales Array zur Verwaltung der "Karten"
mObjects=new MosaikIF[zeilen][spalten];
}
public void switchNachbarn(int zeile, int spalte) {
//erste Zeile: 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);
}
//zweite Zeile:links, rechts
if(spalte-1>=0)
invert(zeile,spalte-1);
if(spalte+1<spalten)
invert(zeile,spalte+1);
//dritte Zeile:Mitte,links,rechts
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);
}
}
//Umdrehen der "Karten"
private void invert(int zeile, int spalte) {
getMObj(zeile, spalte).switchSeite();
}
public void putMObj(int zeile, int spalte, MosaikIF mObj) {
mObjects[zeile][spalte]=mObj;
}
public MosaikIF getMObj(int zeile, int spalte) {
return mObjects[zeile][spalte];
}
public void action(int zeile, int spalte) {
switchNachbarn(zeile, spalte);
}
}
Code:
package einsendeaufgabeJAV05;
import java.awt.*;
import javax.swing.JOptionPane;
public class ProtokollFrame extends java.awt.Frame {
protected ModelIF pmm;
protected MosaikEventHandler eventHandler;
public ProtokollFrame (int raster, int breite, Color farbeRueck, Color farbeVor) {
Frame fenster=new Frame();
fenster.setTitle("Protokollfenster");
fenster.setBackground(Color.WHITE);
fenster.setSize(300, 300);
//Methode zum Platzieren des Frames
fenster.setLocation(300, 10);
pmm = new ProtokollModel(raster, raster);
eventHandler = new MosaikEventHandler(pmm);
fenster.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++) {
MosaikCanvas mc = new MosaikCanvas (i, j, farbeRueck, farbeVor);
//mc.addMouseListener(eventHandler);
pmm.putMObj(j, j, mc);
mc.setSize(canvasBreite, canvasBreite);
fenster.add(mc);
}
}
fenster.setVisible(true);
}
}
Code:
package einsendeaufgabeJAV05;
public class ProtokollModel implements ModelIF {
MosaikIF [][] mObjects;
int zeilen, spalten;
//Konstruktor
public ProtokollModel (int zeilen, int spalten) {
this.zeilen=zeilen;
this.spalten=spalten;
//zweidimensionales Array zur Verwaltung der "Karten"
mObjects=new MosaikIF[zeilen][spalten];
}
//Umdrehen der "Karten"
private void invert(int zeile, int spalte) {
getMObj(zeile, spalte).switchSeite();
}
public void putMObj(int zeile, int spalte, MosaikIF mObj) {
mObjects[zeile][spalte]=mObj;
}
public MosaikIF getMObj(int zeile, int spalte) {
return mObjects[zeile][spalte];
}
public void action(int zeile, int spalte) {
}
}