Ich programmiere zZ ein 4 Gewinnt Spiel (zur Übung mit Graphics2D). An welcher Stelle sich welcher Stein befindet speichere ich mittels 2D-Array. Jetzt bin ich gerade am Auswerten, ob 4 Steine in einer Reihe sind. horizontal - kein Thema, vertikal - kein Thema aber bei diagonal steh ich ein bisschen auf dem Schlauch. Jemand ne Idee, wie ich das am dümmsten angehe?
Code:
void check(int sp) {
for (int a = 0, b = 0; a < 7; a++) {
b = 0;
for (int c = 0; c < 9; c++) {
if (status[a][c] == sp) {
b++;
if (b == 4) {
System.out.println("horizontal");
}
}
else {
b = 0;
}
}
}
for (int a = 0, b = 0; a < 9; a++) {
b = 0;
for (int c = 0; c < 7; c++) {
if (status[c][a] == sp) {
b++;
if (b == 4) {
System.out.println("vertikal");
}
}
else {
b = 0;
}
}
}
}
Habs jetzt so versucht, dass ich mir nur die Angrenzenten an das neue Anschaue, nur klappt das bei Diagonal mal wieder net wirklich! Was mach ich falsch?
Code:
void check(int sp, int x, int y) {
for (int b = -3, c = 0; b < 4; b++) {
if (y + b >= 0 && y + b < 7) {
if (status[y + b][x] == sp) {
c++;
if (c == 4) {
System.out.println("Vertikal");
}
}
else {
c = 0;
}
}
}
for (int b = -3, c = 0; b < 4; b++) {
if (x + b >= 0 && x + b < 9) {
if (status[y][x + b] == sp) {
c++;
if (c == 4) {
System.out.println("Horizontal");
}
}
else {
c = 0;
}
}
}
for (int a = -3, b = 0, c = 0; b < 4; b++) {
if (x + b >= 0 && x + b < 7 && y + b >= 0 && y + b < 9) {
if (status[y + b][x + b] == sp) {
a++;
if (a == 4) {
System.out.println("Diagonal");
}
}
else {
c = 0;
}
}
if (x + b >= 0 && x + b < 7 && y - b >= 0 && y - b < 9) {
if (status[y - b][x + b] == sp) {
c++;
if (c == 4) {
System.out.println("Diagonal");
}
}
else {
a = 0;
}
}
}
richtig erkannt! Hab mir Wildcards Link angeschaut, aber da es ja nur ein Übungsprogramm ist, hab ich zwar die Idee benutzt, aber versucht es auf meine eigene Art zu proggen.
Hat sich erledigt, bin einfach ein bisschen in meinem Buchstaben wirrwarr durcheinander gekommen :bae:
Code:
void check(int sp, int x, int y) {
for (int b = -3, c = 0; b < 4; b++) {
if (y + b >= 0 && y + b < 7) {
if (status[y + b][x] == sp) {
c++;
if (c == 4) {
System.out.println("Vertikal");
}
}
else {
c = 0;
}
}
}
for (int b = -3, c = 0; b < 4; b++) {
if (x + b >= 0 && x + b < 9) {
if (status[y][x + b] == sp) {
c++;
if (c == 4) {
System.out.println("Horizontal");
}
}
else {
c = 0;
}
}
}
for (int a = 0, b = -3, c = 0; b < 4; b++) {
if (x + b >= 0 && x + b < 7 && y + b >= 0 && y + b < 9) {
if (status[y + b][x + b] == sp) {
a++;
if (a == 4) {
System.out.println("Diagonal");
}
}
else {
a = 0;
}
}
if (y + b >= 0 && y + b < 7 && x - b >= 0 && x - b < 9) {
if (status[y + b][x - b] == sp) {
c++;
if (c == 4) {
System.out.println("Diagonal");
}
}
else {
c = 0;
}
}
}
}