Ich habe Probleme mit der Programmstruktur eines Othello-Programmes.
Es existiert eine Applikation, ein Board und ein Frame.
Dies sind einzelne Dateien bzw. getrennte Klassen.
Nun muß das Board das Frame, das Frame das Board und die Applikation beide kennen. Eventuell benötige ich noch Klassen für die Spieler. Wie verwalte ich die Kommunikation der Klassen untereinander ?
Soll ich die Instanzen der einzelnen Klassen zentral in der Applikation verwalten ?
Ich habe bereits versucht die einzelnen Instanzen jeweils als Parameter zu übergeben. Hier ergaben sich aber Probleme mit paint() bzw. repaint().
Ich kann das Board, das Frame usw. in der Applikation verwalten wenn ich die entsprechenden Instanzen als static deklariere (Siehe unten).
Nachfolgend ein kleiner Aussschnitt aus dem Programm.
Alles anzeigen
Alles anzeigen
BoardPanel gibt den Mouseklick an das Frame weiter, das Frame an das Board.
Dieses setzt den Spielstein und ruft das Neuzeichnens des Frames bzw. des Panels auf.
Es existiert eine Applikation, ein Board und ein Frame.
Dies sind einzelne Dateien bzw. getrennte Klassen.
Nun muß das Board das Frame, das Frame das Board und die Applikation beide kennen. Eventuell benötige ich noch Klassen für die Spieler. Wie verwalte ich die Kommunikation der Klassen untereinander ?
Soll ich die Instanzen der einzelnen Klassen zentral in der Applikation verwalten ?
Ich habe bereits versucht die einzelnen Instanzen jeweils als Parameter zu übergeben. Hier ergaben sich aber Probleme mit paint() bzw. repaint().
Ich kann das Board, das Frame usw. in der Applikation verwalten wenn ich die entsprechenden Instanzen als static deklariere (Siehe unten).
Nachfolgend ein kleiner Aussschnitt aus dem Programm.
Quellcode
- package classes;
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import info.clearthought.layout.TableLayout;
- import classes.OthelloFrame;
- import classes.OthelloBoard;
- import classes.OthelloPlayer;
- public class OthelloApplication
- {
- static public OthelloFrame OthelloFrame;
- static public OthelloBoard OthelloBoard;
- static public OthelloPlayer firstPlayer, secondPlayer;
- public OthelloApplication ()
- {
- initComponents();
- }
- // -----------------------------------------------------
- public static void main(String[] args)
- {
- new OthelloApplication();
- } // main
- private void initComponents ()
- {
- OthelloBoard = new OthelloBoard(8);
- OthelloFrame = new OthelloFrame("Othello");
- // The Board as a Parameter ???
- firstPlayer = new OthelloPlayer (OthelloBoard);
- secondPlayer = new OthelloPlayer (OthelloBoard);
- }
- }
Quellcode
- package classes;
- import java.awt.*;
- import java.awt.event.*;
- import java.awt.image.*;
- import java.awt.geom.*;
- import java.awt.Window.*;
- import java.awt.Component.*;
- import java.applet.*;
- import java.net.*;
- import java.io.*;
- import javax.imageio.*;
- import java.lang.String;
- import java.lang.Enum;
- import java.net.URL;
- import javax.swing.*;
- import java.lang.Object;
- import java.lang.reflect.*;
- import java.util.Observable;
- import java.util.Observer;
- import java.util.ArrayList;
- import classes.OthelloFrame;
- import classes.OthelloPlayer;
- import interfaces.ConstInterface;
- import classes.GameBoard;
- public class OthelloBoard implements ConstInterface
- {
- private GameBoard Board;
- private OthelloFrame thisFrame;
- private void initComponents (int Size)
- {
- // The Board must know the Frame to call it for repaint()
- // This works only if OthelloFrame is declared as static
- thisFrame = OthelloApplication.OthelloFrame;
- Board = new GameBoard (Size);
- // Initialize the Board
- Board.setColor(Size/2-1,Size/2-1,EnumColor.WHITE);
- Board.setColor(Size/2,Size/2-1,EnumColor.BLACK);
- Board.setColor(Size/2-1,Size/2,EnumColor.BLACK);
- Board.setColor(Size/2,Size/2,EnumColor.WHITE);
- } // initComponents
- // Is called by the MouseAdapter in BoardPanel
- public void XYmousePressed (int row, int column)
- {
- System.out.println("mousePressed at OthelloBoard");
- // This is a test
- Board.setColor(row,column,EnumColor.WHITE);
- System.out.println("setColor at OthelloBoard");
- // Repaint the Frame
- thisFrame.repaint();
- }
- // Konstruktor 1
- public OthelloBoard (int Size)
- {
- initComponents (Size);
- }
- /* To transmit the Frame as a Parameter does not work
- public OthelloBoard (int Size, OthelloFrame OthelloFrame)
- {
- thisFrame = OthelloFrame;
- initComponents (Size);
- }
- */
- // ------------------ Get und Set-Methoden -----------------
- // getColor() wird von BoardPanel zum Neuzeichnen des Boards
- // abgefragt und ruft seinerseita getColor() in GameBoard auf
- public EnumColor getColor (int row, int column)
- {
- return (Board.getColor(row,column));
- }
- public void setColor (int row, int column, EnumColor color)
- {
- Board.setColor (row,column,color);
- }
- public void changeColor (int row, int column)
- {
- Board.changeColor (row,column);
- }
- }
BoardPanel gibt den Mouseklick an das Frame weiter, das Frame an das Board.
Dieses setzt den Spielstein und ruft das Neuzeichnens des Frames bzw. des Panels auf.