Die folgende einfache Implementierung des Gomoku-Controls liegt in der Datei Control.java vor. Sie ist - technisch bedingt - abhängig von View, zumal sie Mausklicke auf der Darstellung auffängt und interpretiert.
package control; import java.awt.Component; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent;
import view.IView; import view.View; // technisch bedingt: addMouseListener ist nicht in der Schnittstelle
import model.BesetztException; import model.IModel; import model.Spieler;
/** Control mit Maussteuerung für Gomoku mit MVC * @author Prof. Dr. Andreas Solymosi, Beuth-Hochschule für Technik, (c) 2012, solymosi@tfh-berlin.de * @version 5/1/12 */ public class Control { final private IModel model; final private View view;
public Control(final IModel m, final IView v) { this.model = m; this.view = (View)v; final int höhe = view.brettgröße().height, breite = view.brettgröße().width;
view.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent mausereignis) { if (model.sieger() != Spieler.LEER) { // Spiel ist zu Ende model.start(); // Neuanfang } else { Component komponente = mausereignis.getComponent(); try { // Koordinaten des Felds aus dem Mausklick berechnen: model.steinSetzen(mausereignis.getX() / (komponente.getWidth() / breite), mausereignis.getY() / (komponente.getHeight() / höhe)); } catch (BesetztException e) { return; // keine Veränderung } } view.neuZeichnen(); // Veränderung } }); } }
Eine fortschrittlichere Control-Implementierung könnte z.B.
die Züge des Gegners aus dem Internet oder über Bluetooth empfangen. Ein Gomoku-Spielengine würde ohne View arbeiten; Control kann dann und alle Züge per
Email empfangen und an Model weiterleiten. Viele weitere
Control-Implementierungen sind denkbar.
Version: 5. Februar 2012
© Prof. Solymosi, 20102 Beuth-Hochschule für Technik Berlin, Fachbereich VI (Informatik und Medien)
solymosibht-berlin.de