TicTacToe-geeignete Klassenhierarchie

Status
Nicht offen für weitere Antworten.

Han

Bekanntes Mitglied
Hallo....gegeben sei folgende Aufgabe:

Tic Tac Toe
Entwerfen und implementieren Sie das Spiel „Tic Tac Toe“ (auch bekannt als „Dodelschach“).
Spielregeln (von http://de.wikipedia.org/wiki/Tic_Tac_Toe): Auf einem 3×3 Felder großen
Spielfeld machen die beiden Spieler abwechselnd ihre Zeichen (Kreuze und Kreise). Der Spieler,
der als erstes drei seiner Zeichen in einer Reihe, Spalte oder einer der beiden Hauptdiagonalen
setzen kann, gewinnt.
Modellieren Sie das Spielfeld, dessen 3×3 Felder entweder Kreuze oder Kreise enthalten können,
und finden Sie einen Algorithmus, der den Gewinn eines Spielers erkennt. Die Ausgabe des
Spielfeldes soll textuell auf der Konsole erfolgen.
Es gibt verschiedene Arten von Spielern, die beliebig kombiniert werden können: Eine Person gibt
den nächsten Zug auf der Konsole ein, während der Computer automatisch seinen nächsten Zug
durchführt. Dabei kann der Computer nach unterschiedlichen Regeln setzen. Implementieren Sie
zumindest zwei verschiedene Algorithmen: Beim ersten soll der Computer rein zufällig setzen,
beim zweiten die aktuelle Stellung berücksichtigen (er muss nicht perfekt spielen, soll aber keine
Trivialfehler machen).
Hinweise:
• Das Hauptaugenmerk dieser Übung ist, eine gute Klassenhierarchie und
Methodenschnittstelle zu erstellen. Sie müssen ihre Datenstrukturen und den Weg, wie sie
dazu gekommen sind, in Ihrer Abgabe argumentieren.
• Achten Sie auf die Erweiterbarkeit Ihrer Lösung. Es soll z.B. einfach möglich sein, neue
Arten von Spielern und neue Benutzeroberflächen (z.B. eine graphische Oberfläche)
hinzuzufügen.
• Für die Speicherung der Daten, z.B. des Spielfeldes, steht Ihnen die Datenstruktur frei.
Begründen Sie, warum Sie Ihre Lösung gewählt haben.

Zuerst muss ich ja mal die Klassenhierarchie entwerfen sonst kann ich ja nicht mal anfangen....und die ist nicht gerade einfach finde ich....vielleicht könnt ihr mir ein paar Tipps geben:

Ich hab mir mal gedacht dass ich eine Hauptklasse TicTacToe implementiere:

Code:
public class TicTacToe {
//Konstruktor der das Board initialisiert    
//Methode um ein X am Board zu setzen
//Methode zum Auswählen der jeweiligen Computerspielerstrategie
//Methode welche bei jedem Zug prüft ob der Spieler oder Computerspieler gewonnen hat
}

...dann eine Klasse Computer

public class Computer {

}

...dazu jeweilige Algorithmen....
public class Algo1 extends Computer{

}

public class Algo2 extends Computer{

}

...und dann eine Klasse Board welche das Spielfeld implementieren soll....

public class Board{
}

public class textualBoard extends Board{
}

public class graphicalBoard extends Board{
//für später
}


Passt das so mal oder habt ihr da noch bessere Ideen...vor allem das mit der graphischen Implementierung für
später bzw. ob ich wirklich für jeden Algo in der Klasse Computer eine eigene Klasse machen soll bereitet mir Kopfzerbrechen.....

mfg,
Han
 

mattulla

Bekanntes Mitglied
Schaut meiner Ansicht nach recht gut aus. Wuerde das ganze Prinzip vll nach dem MVC-Prinzip umsetzen und auf Observable/Observer zurueckgreifen. Also deine Klasse TicTacToe erbt von Observable, Board und Algo implementieren dann das Interface Observer. Dadurch kannst du vor allem die leichte Entwicklung einer weiteren Benutzeroberflaeche oder eines weiteren Algorithmus sicherstellen.

Gruesse
mattulla
 

Han

Bekanntes Mitglied
Hallo...hab mir deinen Vorschlag mal zu Herzen genommen und bin auf folgende Aufteilung gekommen....allerdings kapier ich das mit dem Observer bzw. observable noch nicht so ganz....ich hab mir den Artikel auf JavaForum durchgelesen zu Observer/Observable aber wie soll ich das konkret implementieren bzw. was bringt mir das? (Ich weiß man kann mit der anderen Klasse kommunitizieren ohne sie zu kennen.....aber wie schaut das konkret in meinem Fall aus.....ein Ansatz wäre wieder eine gute Hilfe).....zudem bin ich mir nicht sicher ob ich die Benutzerschnittstelle sauber in getrennte Klassen gebracht habe....

Code:
package View;
import java.util.Observable; 
import java.util.Observer;

public class TextualInterface implements Observer{
	public String getStringForData(int d) { 
	.......
         } 
		    
	public void displayBoard(int[][] board) { 
	.......zeichnet mir das Board mit den aktuellen Daten auf die Konsole.....
	}
	
	public void update(Observable o, Object arg){
		..was soll da z.b rein?
	}
}

package Data;
public class Board {
	public int[][] board = ....3x3 Matrix
	
	public int[][] getBoard(){
		return board;
	}
	
	public void setDataAt(int x, int y, int data){
		board[x][y] = data;
	}
	
	public int getDataAt(int x,int y){
		return board[x][y];
	}
}

package Data;

public class Rules {

	public GameState boardState;
	
	public Rules(){
		this.boardState = GameState.inProgress;
	}
	
	public GameState getBoardState(){
		return boardState;
	}
	
	public boolean boardIsFull(int[][] board){
		...prüft ob eine Patsituation eintritt.....
	}
	
	public void checkGameState(int[][] board){
//		Der Spieler, der als erstes drei seiner Zeichen in einer Reihe,
//		Spalte oder einer der beiden Hauptdiagonalen setzen kann, 
//		gewinnt. Wenn allerdings beide Spieler das Spiel perfekt 
//		beherrschen, kann keiner gewinnen und es ist unentschieden.
		...Implementierung für meine Frage unwichtig....
 }

package Data;

public enum GameState {
	 inProgress,
	 Pendant,
	 ComputerWins,
	 HumanWins,
}

package Data;

public class ComputerKI {
}

package Data;

public class ComputerKI1 extends ComputerKI{
.....leichte PC KI.....
}

package Data;

public class ComputerKI2 {
.....schwierige PC KI...
}

package Controller;

public class TTTController {

	private Board board = new Board();
	private Rules rules = new Rules();
	private TextualInterface textInt = new TextualInterface();
	
	public void commandLoop() {
		Out.println("Welcome to the TicTacToe game\n");

		// display the command menu
		displayMenu();

		while (true) {
			............
		}
	}
	
	public void twoplayers(){
		............
		displayResult();
	
	}
	
	public void displayResult(){
		.....
	}
	public void displayMenu() {
		..........
	}
	
	public static void main(String[] args) {
		TTTController app = new TTTController();
		app.commandLoop();
	}	
}

...meine Frage richtet sich wie gesagt nicht der Implementierung sondern der Klassenaufteilung....vor allem beim User Interface hab ich noch nicht recht geschickt aufgeteilt....könntet ihr mir ein paar Tipps zur Verbesserung geben....das Spiel läuft jetzt einmal....aber halt noch nicht gschickt aufgeteilt vermute ich....

mfg,
Han
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
enesss tictactoe spiel Java Basics - Anfänger-Themen 5
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
TicTacToe Java Basics - Anfänger-Themen 6
C TicTacToe Java Basics - Anfänger-Themen 2
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
A Überprüfung für unentschieden in TicTacToe Java Basics - Anfänger-Themen 10
A Überprüfung in TicTacToe Java Basics - Anfänger-Themen 5
A TicTacToe Java Basics - Anfänger-Themen 8
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
K Fehler beim Programmieren von TicTacToe Java Basics - Anfänger-Themen 12
J TicTacToe Java Basics - Anfänger-Themen 2
A TicTacToe funktioniert bis auf "schiefer" Sieg Java Basics - Anfänger-Themen 6
shiroX Input/Output TicTacToe-Savegame Java Basics - Anfänger-Themen 1
shiroX Methoden Mögliche Spielstände bei TicTacToe Java Basics - Anfänger-Themen 14
M Array und Objektorientierung? - TicTacToe Spiel Java Basics - Anfänger-Themen 43
P TicTacToe Problem mit Win Methode Java Basics - Anfänger-Themen 4
Z TicTacToe mit Array Java Basics - Anfänger-Themen 6
T TicTacToe Spielfeld Java Basics - Anfänger-Themen 7
B TicTacToe Java Basics - Anfänger-Themen 2
S TicTacToe Java Basics - Anfänger-Themen 4
I TicTacToe blöde KI Java Basics - Anfänger-Themen 2
I Fehler bei TicTacToe Java Basics - Anfänger-Themen 108
G TicTacToe KI Java Basics - Anfänger-Themen 15
C Problem TicTacToe Java Basics - Anfänger-Themen 6
P 3D TicTacToe - Unentschieden Java Basics - Anfänger-Themen 5
G Tictactoe Java Basics - Anfänger-Themen 9
B TicTacToe Programmieren Java Basics - Anfänger-Themen 2
M Einfaches TicTacToe Programm Java Basics - Anfänger-Themen 19
H TicTacToe Fehler beim Compilieren Java Basics - Anfänger-Themen 7
cizzo TicTacToe Java Basics - Anfänger-Themen 6
W TicTacToe - Porblem mit dem Code.. Java Basics - Anfänger-Themen 5
H Hilfe bei TicTacToe mit jEdit Java Basics - Anfänger-Themen 7
0 TicTacToe, Problem mit den Checkbox-Aktionen Java Basics - Anfänger-Themen 6
N brauche hilfe zu tictactoe Java Basics - Anfänger-Themen 2
kulturfenster Problem bei TicTacToe Java Basics - Anfänger-Themen 11
P Ein einfaches Spiel: TicTacToe. Fehler und Vorschläge Java Basics - Anfänger-Themen 3
H TicTacToe: Zeit zwischen Zügen lassen Java Basics - Anfänger-Themen 9
M TicTacToe Java Basics - Anfänger-Themen 7
G Hilfe bei TicTacToe Java Basics - Anfänger-Themen 2
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
Antegra Tekkrebell geeignete IDE Java Basics - Anfänger-Themen 13
A geeignete Java-Projekte für Schüler (Einsteiger) Java Basics - Anfänger-Themen 28
Luk10 Geeignete Datenstruktur Java Basics - Anfänger-Themen 4
K Suche geeignete Code-Beispiele Java Basics - Anfänger-Themen 4
P geeignete Datenstruktur für dreidimensionale Raumbelegung Java Basics - Anfänger-Themen 5
G Suche geeignete Datenstruktur Java Basics - Anfänger-Themen 8
G Geeignete Datenstruktur ? Java Basics - Anfänger-Themen 8
M kleine Verständisfrage zur Klassenhierarchie, speziel JMenuItem Java Basics - Anfänger-Themen 8
G Protected Variablen außerhalb der eigenen Klassenhierarchie sichtbar Java Basics - Anfänger-Themen 5
G Klassenhierarchie in BlueJ. Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben