Processing: Tic-Tac-Toe-Abfrage Möglichkeiten?
Ich muss für die Schule ein Tic-Tac-Toe-Spiel programmieren, nur finde ich nicht alle Möglichkeiten. Das habe ich bis jetzt:
if ((dist(Xx[1], Xy[1], Xx[2], Xy[2]) <= width / 3)
&& (dist(Xx[2], Xy[2], Xx[3], Xy[3]) <= width / 3)
&& (dist(Xx[1], Xy[1], Xx[3], Xy[3]) >= (width / 3) * 2 - 1)
|| (dist(Xx[2], Xy[2], Xx[3], Xy[3]) >= (width / 3) * 2 - 1)) {
z = 99;
}
if ((dist(Xx[0], Xy[0], Xx[2], Xy[2]) <= width / 3)
&& (dist(Xx[2], Xy[2], Xx[3], Xy[3]) <= width / 3)
&& (dist(Xx[0], Xy[0], Xx[3], Xy[3]) >= (width / 3) * 2 - 1)) {
z = 99;
}
if ((dist(Xx[0], Xy[0], Xx[1], Xy[1]) <= width / 3)
&& (dist(Xx[1], Xy[1], Xx[3], Xy[3]) <= width / 3)
&& (dist(Xx[0], Xy[0], Xx[3], Xy[3]) >= (width / 3) * 2 - 1)) {
z = 99;
}
if (((int)dist(Xx[1], Xy[1], Xx[2], Xy[2]) == 234)
&& ((int)dist(Xx[2], Xy[2], Xx[3], Xy[3]) == 234)
&& ((int)dist(Xx[1], Xy[1], Xx[3], Xy[3]) == 469)) {
z = 99;
}
if (((int)dist(Xx[0], Xy[0], Xx[2], Xy[2]) == 234)
&& ((int)dist(Xx[2], Xy[2], Xx[3], Xy[3]) == 234)
&& ((int)dist(Xx[0], Xy[0], Xx[3], Xy[3]) == 469)) {
z = 99;
}
if (((int)dist(Xx[0], Xy[0], Xx[1], Xy[1]) == 234)
&& ((int)dist(Xx[1], Xy[1], Xx[3], Xy[3]) == 234)
&& ((int)dist(Xx[0], Xy[0], Xx[3], Xy[3]) == 469)) {
z = 99;
}
trotzdem habe ich nicht alle Möglichkeiten. Kann ich das vielleicht einfacher machen?
An statt nur zu sagen das es kacke ist, was nicht nett ist, könnte man auch auf die frage antworten.
1 Antwort
Was soll das bedeuten: alle Möglichkeiten? Alle Möglichkeiten eines Sieges, einer Niederlage, eines Remis, aller noch verbleibenden Züge?
Das, was du da machst, kannst du auf jeden Fall einfacher machen.
- Ein Anfang wäre die Wahl anderer Bezeichner. Du hast da zwei verschiedene Arrays: Xx, Xy. Sollen das etwa die Koordinaten des X-Spielers darstellen? Wofür steht dist?
- Sich wiederholende Berechnungen wie width / 3 kannst du in ausdrucksstarken Variablen speichern, die später anstatt des Rechenausdrucks verwendet werden. Das Gleiche gilt für konstante Werte wie 234 oder 469.
Vorteilhaft wäre es, das Spielbrett möglichst einfach abzubilden. Zum Beispiel mit einem zweidimensionalen Array:
int[][] board = new int[3][3] {
{ 0, 0, 0 },
{ 0, 0, 0 },
{ 0, 0, 0 }
};
Oder man stellt das Spielbrett mit einer binären Zahl dar.
0b000000000
Dabei werden alle Reihen einfach aneinandergehängt. Daher die neun Nullen. Lies mehr dazu hier.
dist ist eine processing funktion die, die distance zwischen punkt 1 und 2 berechnet, alle möglickeiten eines Sieges, Xx und Xy sind die cordinaten des X vom tic tac toe feld