abstrakte Klassen, Konstanten und Konstruktor

jason

Mitglied
Hallo,

ich bin gerade dabei/ich habe vor, ein TicTacToe-Programm zu programmieren, das zur Laufzeit eine selbstgeschriebene KI laden kann.
Das Laden selbst ist kein Problem, allerdings bereitet mir die abstrakte Klasse, von der alle KIs erben müssen, einige Kopfschmerzen.
Bisher sieht es so aus:

TicTacToeAI.java
Java:
package controller;

import model.TicTacToeField;

public abstract class TicTacToeAI {

    protected final int PLAYER;

    protected final int ENEMY;
    
    protected final int EMPTY_FIELD;

    public TicTacToeAI(int playerField, int enemyField, int emptyField) {
        PLAYER = playerField;
        EMPTY_FIELD = emptyField;
        ENEMY = enemyField;
    }
    
    public abstract void compute(TicTacToeField field);

    public abstract String getDeveloper();

    public abstract String getAIName();
}
Die Konstanten dienen dazu, um zu erkennen, ob das Feld, auf das die KI setzen will, leer, vom Feind oder schon selbst besetzt wurde.

Eine einfache KI sieht so aus:
Java:
      import controller.TicTacToeAI;
      import model.TicTacToeField;
      
      import java.util.Random;
      
      public class MyTicTacToeAI extends TicTacToeAI {
          
          private Random r;
          
          public MyTicTacToeAI(int playerField, int enemyField, int emptyField) {
              super(playerField, enemyField, emptyField);
              r = new Random();
          }
          
          public String getAIName() {
              return "MyAI";
          }
          
          public String getDeveloperName() {
              return "jason";
          }
          
          public void compute(TicTacToeField field) {
              int randX, randY;
              
              do {
                  randX = r.nextInt() % 3;
                  randY = r.nextInt() % 3;
                  
                  if (randX < 0)
                      randX *= -1;
                      
                  if (randY < 0)
                      randY *= -1;
                  
              } while (field.get(randX, randY) != EMPTY_FIELD);
              
              field.set(randX, randY);
          }
      }

Meine Kopfschmerzen bereitet der Konstruktor:
Ich würde das gerne so machen, dass die Werte für die Konstanten nicht immer weitergereicht werden müssen. (Die Konstanten (außer EMPTY) sind unterschiedlich, weil KI Nr. 1
Code:
PLAYER = 1
und
Code:
ENEMY = 2
und KI Nr. 2 gerade umgedreht hat.)
Hat da jemand eine Idee?

MfG jason
 
G

Gast2

Gast
Also so ganz hab ich den sinn deiner Konstanten noch nicht verstanden.
Sollte nicht besser das spielfeld auskunft darüber geben welches Feld von wem besetzt ist?
 

jason

Mitglied
TicTacToeField hat die Funktion
Code:
get(int, int)
.
Dadurch bekommt man eine bestimmte Zahl zurück.
Ist
Code:
field.get(0, 0) == EMPTY_FIELD
, dann ist das Feld 0, 0 leer.
Ist
Code:
field.get(0, 0) == PLAYER
, dann hat die KI, die an der Reihe ist, schon an dieser Stelle gesetzt.
Ist
Code:
field.get(0, 0) == ENEMY
, dann hat die andere KI schon an dieser Stelle gesetzt.

Oder sollte ich eher Methoden wie:
Code:
field.isEmpty(int, int)
usw. machen?


MfG jason
 
G

Gast2

Gast
Ich denke es wäre besser wenn du in der Spielfeldklassen Konstanten EMPTY, PLAYER1 und PLAYER2 hast. Deine get Methode würde diese dann dementsprechend zurückgeben.
Deine KI Klasse müsste dann nur wissen ob sie Player1 oder Player2 ist (das könntest du im Konstruktor übergeben). Die Konstanten in der KI Klasse brauchste dann gar nichtmehr.
 
G

Gelöschtes Mitglied 5909

Gast
Dann kannst du daraus auch ein interface machen.

Und wenn dir dann noch langweilig ist, kannst du das ganze noch mit OSGi umsetzen, dann kann jeder ein KI Plugin-machen :)
 

jason

Mitglied
Wenn ich es doch aber als Interface mache, dann habe ich doch keinen vorgegebenen Konstruktor und kann es dann doch auch nicht dynamisch zur Laufzeit laden, oder nicht?

MfG jason
 
G

Gelöschtes Mitglied 5909

Gast
Wie lädst du es denn bisher? Über Reflection?

Das geht genauso :)

Und das mit dem Konstruktor: du hast ihn ja jetzt eh weg, von daher kannst du einen Standard-Konstruktor vorraussetzen.
Wenn du noch andere Sachen brauchst, dann kannst du das über setter regeln (im interface)

Aber warscheinlich hab ich dich jetzt eher verwirrt. Wenn das der Fall ist, dann mach es so wie du denkst :)
 

jason

Mitglied
Ja, Reflection.

Verwirrt hast du mich (noch) nicht, aber eine Bedingung, die nicht durch Code "erzwungen" wird, finde ich nicht so ... toll, wenn du verstehst, was ich meine. ;)

Mfg jason
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
S Klassen Abstrakte Klassen Allgemeine Java-Themen 5
Z Abstrakte Klassen /Interface Allgemeine Java-Themen 5
S Statische Methoden in abstrakte Klassen deklarieren? Allgemeine Java-Themen 17
S abstrakte klassen und packete Allgemeine Java-Themen 3
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
B Abstrakte Datentypen synchronisieren Allgemeine Java-Themen 11
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
I Abstrakte Datentypen - Liste Allgemeine Java-Themen 9
R Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben Allgemeine Java-Themen 2
F Abstrakte Klasse in "For each" Schleife Allgemeine Java-Themen 1
C Abstrakte Klasse soll Methode aus Unterklasse aufrufen Allgemeine Java-Themen 3
S Wieso stehen in der API immer wieder abstrakte Methoden ? Allgemeine Java-Themen 7
P Abstrakte Elternklasse als Listener Allgemeine Java-Themen 6
L interface abstrakte klasse Allgemeine Java-Themen 21
I Interfaces und abstrakte Methoden Allgemeine Java-Themen 5
G Interface oder abstrakte Klasse Allgemeine Java-Themen 4
G Abstrakte Fabrik für unterschiedliche Signaturen? Allgemeine Java-Themen 7
L Abstrakte Klasse: Member zwingend überschreibbar machen Allgemeine Java-Themen 2
MQue abstrakte Klasse Allgemeine Java-Themen 3
Q Schnittstelle/Abstrakte Klasse schreibt Annotation vor? Allgemeine Java-Themen 4
G Unterschied abstrakte Klasse und Interface? Allgemeine Java-Themen 3
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
Zrebna Wie ermittelt man alle testbaren (zu testenden) Klassen in seinem Maven-Projekt? Allgemeine Java-Themen 23
8u3631984 Jacoco Testcoverage bei Abstracten Klassen in verschachtelten Modulen Allgemeine Java-Themen 6
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
B Wie kann ich mein 8 Klassen Gebilde objektorientierter schreiben? Allgemeine Java-Themen 114
N abstracte klassen methoden Allgemeine Java-Themen 32
W Klassen Zugriff auf ein Textfile aus allen Klassen. Allgemeine Java-Themen 2
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
L Classpath Zur Laufzeit bestimmte Klassen in Classloader hinzufügen? Allgemeine Java-Themen 4
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
B Problem mit meinen Klassen Allgemeine Java-Themen 6
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
F Code in Klassen bringen Allgemeine Java-Themen 4
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
F Klassen Verwendung abstrakter Klassen Allgemeine Java-Themen 9
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
B Vererbung Interface und implementierende Klassen Allgemeine Java-Themen 8
D Klassen JLabels in anderen Klassen verwenden. Allgemeine Java-Themen 7
H Klassen LibGDX - Verschiedene Klassen als Value in einer Map Allgemeine Java-Themen 8
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
A Anonyme Klassen - Interface Allgemeine Java-Themen 5
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
J Tetris Probleme bei Klassen Allgemeine Java-Themen 14
cool_brivk24 Klassen Klassen Aufruf Fehlgeschlagen Allgemeine Java-Themen 14
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
T Log4J - Deaktivierung für einzelne Klassen Allgemeine Java-Themen 7
Tommy Nightmare Klassen Globale Klassen erstellen Allgemeine Java-Themen 7
X Klassen aus jar in jar Laden Allgemeine Java-Themen 1
S Klassen Klassen "virtuell" erstellen Allgemeine Java-Themen 5
J Aus mehreren Klassen ein Datei ausführbare machen Allgemeine Java-Themen 6
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
Sin137 Struktur der Klassen & Package Allgemeine Java-Themen 2
G Klassen und interne Klassen Allgemeine Java-Themen 1
S Klassen übergeben Allgemeine Java-Themen 13
C Klassen und Konstruktor Allgemeine Java-Themen 2
S Classpath Wie kann ich Java-Library Klassen "verstecken"..? Allgemeine Java-Themen 4
A Java speech - 2 Klassen Allgemeine Java-Themen 1
V Wie kann ich die Fragen mit den anderen Klassen verbinden? Allgemeine Java-Themen 1
T Schlüsselworte mehrere public-Klassen in einem Paket Allgemeine Java-Themen 7
V Klassenname von allen Klassen mit einer bestimmten Eigenschaft bekommen Allgemeine Java-Themen 2
B Classpath Eclipse findet importierte Klassen nicht Allgemeine Java-Themen 1
C DBConnection als Methode in mehreren Klassen Allgemeine Java-Themen 4
C Arten von Klassen Allgemeine Java-Themen 3
7 Verbinden von Mehreren Klassen Allgemeine Java-Themen 29
A Klassen ein Interface aufzwingen Allgemeine Java-Themen 4
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
A also definition von klassen und string methoden und algorithmik Allgemeine Java-Themen 13
D Problem bei Vererbung abstrakter Klassen Allgemeine Java-Themen 6
M Interface Generische Klassen mit mehreren Typen überschreiben Allgemeine Java-Themen 0
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
O Klassen Programm in Klassen unterteilt, werte werden nicht mehr übernommen Allgemeine Java-Themen 3
J C++ Projekt (QT) in Java mit Klassen (nicht imperativ) nutzen (BridJ? JavaCPP? SWIG? JNA? JNI?) Allgemeine Java-Themen 2
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
S .jar hat nicht alle Klassen ??? Allgemeine Java-Themen 10
S Polymorphie Polymorphismus bei Abstrakten Klassen Allgemeine Java-Themen 2
S Tool um mehrere Klassen in einer Klasse vereinen? Allgemeine Java-Themen 6
T Wie kann ich alle existierenden Java-Klassen anzeigen lassen? Allgemeine Java-Themen 10
Landei Welche Klassen fehlen im JDK? Allgemeine Java-Themen 18
S Kapselung Statische Helper Klassen Allgemeine Java-Themen 5
A Vererbung Klassen-Downcasting wirft ClassCastException Allgemeine Java-Themen 2
N Java Klassen mit ID Allgemeine Java-Themen 21
antonbracke Klassen Klassen gegenseitig laden Allgemeine Java-Themen 4
R SecurityManager für einzelne Klassen/Threads? Allgemeine Java-Themen 38
T Java Klassen aus externer .jar laden und ausführen Allgemeine Java-Themen 3
S JPA und Entity-Klassen: Wert ungültig Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben