Hallo,
ich habe folgendes Problem: ich muss in vorgegebenem Quelltext ein paar Methoden ergänzen. Grundlage ist dieses Spiel Klickibunti.
Dazu habe ich folgenden unvollständigen Code:
Einige Dinge sind mir aber in der Klickifeld0-Klasse nicht so ganz klar.
Was genau geschieht in der zug-Methode in der zweiten else-Verzweigung? Bzw. was in der nachbarspalter-Methode?
Vielen Dank schon mal.
ich habe folgendes Problem: ich muss in vorgegebenem Quelltext ein paar Methoden ergänzen. Grundlage ist dieses Spiel Klickibunti.
Dazu habe ich folgenden unvollständigen Code:
Java:
package klickibunti;
public class Klicki0
{
public static void main(String[] args) {
// Nutzereingabe Feldgroesse und Farbanzahl hinzufügen
Klickifeld0 s = new Klickifeld0(20,15,3);
s.ausgabe();
while ( s.ende()==0) {
s.zug();
s.ausgabe();
}
}
}
Java:
package klickibunti;
import static Prog1Tools.IOTools.*;
public class Klickifeld0 {
private int[][] matrix;
private int s, z;
private int f; // Anzahl der Farben
Klickifeld0(int z, int s, int f) {
this.z = z;
this.s = s;
this.f = f;
// Randfelder loeschen
matrix = new int[z + 2][s + 2];
for (int i = 0; i < z + 2; i++)
for (int j = 0; j < s + 2; j++)
matrix[i][j] = -1;
// Zufallsbelegung
for (int i = 1; i <= z; i++)
for (int j = 1; j <= s; j++) {
matrix[i][j] = (int) (Math.random() * f + 1);
}
}
void ausgabe() {
// Ausgabe dynamisch gestalten
System.out.println(" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15");
System.out.println(" -------------------------------------------------------------");
for (int i = 1; i <= z; i++) {
if (i <= 9)
System.out.print((i) + " |");
else
System.out.print((i) + " |");
for (int j = 1; j <= s; j++) {
if (matrix[i][j] == -1)
System.out.print(" |");
else if (matrix[i][j] == 0)
System.out.print(" 0 |");
else if (matrix[i][j] == 1)
System.out.print(" A |");
else if (matrix[i][j] == 2)
System.out.print(" B |");
else if (matrix[i][j] == 3)
System.out.print(" C |");
else if (matrix[i][j] == 4)
System.out.print(" D |");
else
System.out.print(" E |");
}
System.out.println();
System.out.println(" -------------------------------------------------------------");
}
}
void zug() {
int zn = 0, sn = 0;
int w;
System.out.println(" Bitte Postion eingeben (z s)");
zn = readInteger();
sn = readInteger();
if ((zn < 1) | (zn > z) | (sn < 1) | (sn > s))
System.out.println(" Feldposition ist falsch - neuer Zug");
else {
w = matrix[zn][sn];
// Test ob zulaessige Feldposition
if (matrix[zn][sn] == -1)
System.out.println(" Feld ist leer - neuer Zug");
else if ((matrix[zn][sn - 1] != w) && (matrix[zn][sn + 1] != w)
&& (matrix[zn - 1][sn] != w) && (matrix[zn + 1][sn] != w))
System.out.println(" kein mehrfaches Feld - neuer Zug");
else {
// UNDO absichern
matrix[zn][sn] = 0;
// h=0;
spaltefrei(sn, w);
// linke Nachbarspalten
for (int i = sn; i > 0; i--) {
nachbarspaltel(i - 1, w);
spaltefrei(i - 1, w);
}
// rechte Nachbarspalten analog
// Steine runterfallen
spaltenrunter();
// Spalten nach rechts rutschen
spaltenrechts();
}
}
}
void spaltefrei(int sn, int w) {
int k;
for (int i = 1; i <= z; i++)
if (matrix[i][sn] == 0) {
k = i + 1;
if (k <= z)
while (matrix[k][sn] == w) {
matrix[k][sn] = 0;
if (k > z)
break;
}
k = i - 1;
if (k > 0)
while (matrix[k][sn] == w) {
matrix[k][sn] = 0;
// k--; h++;
if (k < 0)
break;
}
}
}
void nachbarspaltel(int sn, int w) {
for (int i = 1; i <= z; i++) {
if ((matrix[i][sn] == w) && (matrix[i][sn + 1] == 0)) {
matrix[i][sn] = 0;
}
}
}
void nachbarspalter(int sn, int w) {
for (int i = 1; i <= z; i++) {
if ((matrix[i][sn] == w) && (matrix[i][sn + 1] == 0)) {
matrix[i][sn] = 0;
}
}
}
void spaltenrunter() {
for (int j = 1; j <= s; j++)
for (int i = 1; i <= z; i++)
if (matrix[i][j] == 0) {
for (int k = i; k > 0; k--) {
matrix[k][j] = matrix[k - 1][j];
}
matrix[1][j] = -1;
}
}
void spaltenrechts() {
}
int ende() {
// Erfolg, wenn anz=0;
// Pruefen, ob noch doppelte Steine vorhanden
// Kein Erfolg, wenn anz>0 und keine doppelten Steine vorhanden
return 0;
}
}
Was genau geschieht in der zug-Methode in der zweiten else-Verzweigung? Bzw. was in der nachbarspalter-Methode?
Vielen Dank schon mal.