Skip to content
Snippets Groups Projects
Commit 3c45ec63 authored by l13f04751's avatar l13f04751
Browse files

Praktikum TicTacToe JUnitTests Raw

parent f071308d
No related branches found
No related tags found
No related merge requests found
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="output" path="bin"/>
</classpath>
/bin/
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>VINF_TicTacToe</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8
package tictactoePraktikum;
/**TicTacToe Spiel
*
* @author Prof. Dr. Christian Weidauer (Hochschule Bochum)
* @author Volker Schrmann (Hochschule Bochum)
* Vertiefung Informatik
*
*/
public class TicTacToe {
private TicTacToeUI ui;
final static int ENTSCHIEDEN = 1;
final static int UNENTSCHIEDEN = 2;
final static int LAEUFT = 3;
final static int ABGEBROCHEN = 4;
private char[] spielerZeichen = new char[2];
private char[][] spielbrett = new char [3][3];
public TicTacToe(TicTacToeUI ui){
this.ui = ui;
spielerZeichen[0] = 'X';
spielerZeichen[1] = 'O';
resetSpiel();
}
/**
* Setzt das Spielfeld wieder in den Ursprungszustand.
*/
void resetSpiel(){
for(char zeile[]: spielbrett )
{
for (int i = 0; i < zeile.length; i++) {
zeile[i] = ' ';
}
}
}
/**
* Zufllige Ermittlung wer das Spiel beginnt.
* @return Array-Index des Spielers, der beginnt
*/
static int getStartSpieler(){
return (int) Math.round( Math.random());
}
/**
* Bestimmt den Spieler, der als nchstes am Zug ist.
* @param aktuellerSpieler Spieler, der aktuell am Zug ist
* @return Array-Index des nchsten Spielers
*/
int getNaechstenSpieler(int aktuellerSpieler){
return (aktuellerSpieler + 1) % 2;
}
/**
* Testet, ob das adressierte Feld im Array vorkommt und ob es frei ist.
* @param zeile Zeile des Zuges
* @param spalte Spalte des Zuges
* @return true, falls es vorkommt und frei ist - falls es nicht vorkommt oder belegt ist
*/
boolean isGueltig(int zeile, int spalte){
if(spalte>2||spalte<0
||zeile>2||zeile<0
||spielbrett[zeile] [spalte] != ' '){
return false;
}
else{
return true;
}
}
/**
* Ist das Spiel unentschieden?
* @return true, falls unentschieden
*/
boolean isUnentschieden(){
boolean unentschieden = true;
for (char[] zeile:spielbrett) {
for(char spielfeld:zeile){
if(spielfeld == ' ')
unentschieden = false;
}
}
return unentschieden;
}
/**
* Bestimmt den aktuellen Spielzustand
* @return
* LAEUFT: Weitere Spielzge mglich
* UNENTSCHIEDEN: Spiel ohne Sieger beendet
* ENTSCHIEDEN: Es gibt einen Gewinner
*/
int getSpielzustand(){
int status = LAEUFT;
if (getGewinner() != ' '){
return ENTSCHIEDEN;
}
if (isUnentschieden()){
return UNENTSCHIEDEN;
}
return status;
}
/**
* Fhrt fr den bergebenen Spieler einen Spielzug durch.
* @param aktuellerSpieler Spieler, der aktuell am Zug ist
* @return Spielzustand
*/
int spielzug(int aktuellerSpieler){
int aktuelleZeile = 0;
int aktuelleSpalte= 0;
do {
String zugEingabe = ui.getZugeingabe(spielbrett, spielerZeichen[aktuellerSpieler]);
if (zugEingabe.equalsIgnoreCase("a")){
return ABGEBROCHEN;
}
try{
aktuelleZeile = Integer.parseInt(zugEingabe)/10;
aktuelleSpalte= Integer.parseInt(zugEingabe)%10;
}
catch (NumberFormatException nfe){}
} while (!isGueltig(aktuelleZeile, aktuelleSpalte));
spielbrett[aktuelleZeile][aktuelleSpalte] = spielerZeichen[aktuellerSpieler];
return getSpielzustand();
}
/**
* Fhrt ein komplettes Spiel durch.
* @return Spielzustand
*/
public int spiel(int startSpieler) {
resetSpiel();
int spielzustand = LAEUFT;
int aktuellerSpieler = startSpieler;
do {
spielzustand = spielzug(aktuellerSpieler);
aktuellerSpieler = getNaechstenSpieler(aktuellerSpieler);
} while (spielzustand == LAEUFT);
return spielzustand;
}
/**
* Prft ob es einen Gewinner gibt und wer es ist.
* @return Zeichen des Gewinners oder Leerzeichen
*/
public char getGewinner(){
char gewinner = ' ';
for(char spieler: spielerZeichen ){
for(int i=0; i<3; i++){
if ((spielbrett[i][0] + spielbrett[i][1] +
spielbrett[i][0] == 3*spieler) ||
(spielbrett[0][i] + spielbrett[1] [i] +
spielbrett[i][2] == 3*spieler)||
(spielbrett[0][0] + spielbrett[1][1] + spielbrett[2][2] ==
3*spieler)
||(spielbrett[2][0] + spielbrett[1][1] + spielbrett[0][2] ==
3*spieler)
) {
gewinner = spieler;
break;
}
}
}
return gewinner;
}
/**
* Gibt das Spielbrett zurck
* @return Spielbrett
*/
public char[][] getSpielbrett() {
return spielbrett;
}
/**
* Setzt das Spielbrett auf die bergebenen Werte.
* @param spielbrett
*/
public void setSpielbrett(char[][] spielbrett) {
this.spielbrett = spielbrett;
}
}
package tictactoePraktikum;
import java.awt.Font;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
/**Applikation und Benutzerschnittstelle von TicTacToe
*
* @author Prof. Dr. Christian Weidauer (Hochschule Bochum)
* @author Volker Schrmann (Hochschule Bochum)
* Vertiefung Informatik
*
*/
public class TicTacToeApp implements TicTacToeUI{
/**
* Start und Auswertung des Spiels
* @param args
*/
public static void main(String[] args) {
UIManager.put("OptionPane.messageFont", new Font(Font.MONOSPACED, Font.PLAIN, 15));
Spielserie:
do {
TicTacToe ttt = new TicTacToe(new TicTacToeApp());
switch (ttt.spiel(TicTacToe.getStartSpieler())) {
case TicTacToe.UNENTSCHIEDEN:
JOptionPane.showMessageDialog(null, "Gratulation!\n"
+"Sie haben unentschieden gespielt!");
break;
case TicTacToe.ENTSCHIEDEN:
JOptionPane.showMessageDialog(null, "Herzlichen Glckwunsch!\n" +
ttt.getGewinner()+", Sie haben gewonnen!");
break;
case TicTacToe.ABGEBROCHEN:
JOptionPane.showMessageDialog(null, "Abbruch!");
break Spielserie;
}
} while (true);
}
/**
* Grafische Benutzereingabe
*/
@Override
public String getZugeingabe(char[][] spielbrett, char aktuellerSpieler) {
String ausgabe = "+-+-+-+\n";
for (char[] zeile:spielbrett){
for (char spielfeld:zeile) {
ausgabe += "|" + spielfeld;
}
ausgabe += "|\n+-+-+-+\n";
}
ausgabe += aktuellerSpieler + ", bitte Zug eingeben!"
+ "\n(Zug: <Zeile><Spalte>)";
String zugEingabe = JOptionPane.showInputDialog(ausgabe);
return zugEingabe;
}
}
package tictactoePraktikum;
/**Schnittstelle fr das User Interface von TicTacToe
*
* @author Prof. Dr. Christian Weidauer (Hochschule Bochum)
* @author Volker Schrmann (Hochschule Bochum)
* Vertiefung Informatik
*
*/
public interface TicTacToeUI {
/**
* Benutzerschnittstelle
* @param aktuelles Spielbrett
* @param aktueller Spieler
* @return Eingabe des aktuellen Spielers
*/
public String getZugeingabe(char[][] spielbrett, char aktuellerSpieler);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment