Überprüfen, ob 5 Zahlen nebeneinander liegen

Salvatore

Mitglied
Guten Abend Java Community! :)

seit heute morgen rätsel ich darüber, wie man möglichst effizient überprüft, ob fünf Punkte in einem 15x15 Koordinatensystem nebeneinander liegen.
Stellt es euch wie Tic Tac Toe vor, nur dass das Feld 15x15 Felder groß ist und 5 in einer Reihe sein müssen, um zu gewinnen (vertikal, horizontal oder diagonal). Das Koordinatensystem sieht so aus, was ich mit einem zweidimensionalen Array gelöst habe:
0,0 0,1 0,2 ... 0,15
1,0 ...
2,0 ...
...
15,0... 15,15

Man wählt einen Punkt, der dann ensprechend mit "1" für Spieler 1 und mit "2" für Spieler 2 markiert wird.
Während des Grübelns kam mir dann die ArrayList in den Kopf.. jedoch komme ich auch da nicht weiter.

Hat jemand einen Ansatz? :)

Mit freundlichen Grüßen,
Salvatore
 

Robat

Top Contributor
Eine Möglichkeit wäre es nicht immer das gesamte Feld zu durchsuchen sondern nur die Zeilen/Spalten/Diagonalen zu betrachten die vom Punkt, wo der Stein gesetzt wurde, betroffen sind.
So kannst du von vorne herein schon relativ viele Möglichkeiten ausschließen.
Kleines Beispiel:
Code:
Gegeben sei folgendes Feld
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
Der Stein wird jetzt bei (0,0) platziert
 ' . . . .
 . . . . .
 . . . . .
 . . . . .
 . . . . .

Die einzigen Reihen/Spalten/Diagonalen wo sich etwas geändert haben kann sind:
Reihe: 0
Spalte: 0
Diagonale von links oben nach rechts unten [ (0,0) zu (4,4) ]
Demnach musst du auch nur diese Reihen/Spalten/Diagonalen beachten, da sich bspw Spalte 2 ja nicht verändert haben kann.
 

Salvatore

Mitglied
Vielen Dank! Tatsächlich schließt man dadurch logischerweise unzählige Schritte aus. Jedoch komme ich bei der Umsetzung nicht weiter. Es soll ja praktisch nach jedem Zug (insgesamt 225 Züge möglich) überprüft werden, ob 5 in einer Reihe liegen, also überprüfe ich nach jedem gesetzten Stein. Aber wie? Ich kann ja bei einem 15x15 Feld unmöglich alle Fälle mithilfe if-Bedingungen überprüfen.
 

Robat

Top Contributor
Brauchst du ja auch nicht. Die Methode muss nur immer aufgerufen werden sobald der Nutzer einen Stein gesetzt hat.
Wenn du das aktuelle Board, den Spieler und den gesetzten Punkt kennst, hast du alles was du brauchst um das oben angesprochene umzusetzen.
Als Beispiel brauchst du um die Reihen zu prüfen nur die x Koordinate:
Java:
public boolean hasWon(int[][] field, int player, int x, int y) {
    // Schauen ob in der gesetzten Zeile 5 Steine hintereinander liegen
    for(int i = 0; i < field[x].length-5; i++) {
         int rowCount = 0;
         for(int j = i; j < 5; j++) {
              if(field[x][i+j] == player) {
                  rowCount++;
              }
         }
         if(rowCount == 5) {
              return true;
         }
    }
    // Spalten + Diagonalen prüfen...
}
Analog dazu kannst du prüfen ob der gegebenen Spalte 5 hintereinander sind.
(Anti-)Diagonalen ist etwas aufwändiger - aber etwas kniffeln gehört ja dazu ;)
 

Salvatore

Mitglied
Kurze Frage zu
Java:
for(int i = 0; i < field[x].length-5; i++)
Wieso length-5? iterierst du dann nicht nur durch die ersten 10 Elemente (bei einem Array der Länge 15) im x-ten Array? Was, wenn genau die letzten 5 Elemente in einer Reihe passen?


Hat sich geklärt :D Wegen
Java:
if(field[x][i+j] == player)

und j geht bis 4 hoch hat man am Ende Index 14 :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
F Überprüfen ob es Überschneidungen von Uhrzeiten (vom Typ Calendar) gibt Allgemeine Java-Themen 10
S Applet Überprüfen ob ein Objekt angeklickt wurde Allgemeine Java-Themen 2
J Überprüfen ob URL eine HTML Datei referenziert Allgemeine Java-Themen 4
T Überprüfen mathematischer Bedingungen Allgemeine Java-Themen 9
S Überprüfen von Datums/zeitwerten Allgemeine Java-Themen 4
simon1101 Überprüfen ob Dateiendung stimmt Allgemeine Java-Themen 4
M Eingabe Überprüfen Allgemeine Java-Themen 3
A Überprüfen, ob ein File eine Verknüpfung / Link ist Allgemeine Java-Themen 3
G Überprüfen, ob Variable ein Array ist? Allgemeine Java-Themen 5
S Überprüfen, ob ein Shell Befehl existiert! Allgemeine Java-Themen 4
D Überprüfen ob Superuser Allgemeine Java-Themen 7
S Überprüfen von Intervallen Allgemeine Java-Themen 4
T Überprüfen ob zwei Farben ähnlich sind Allgemeine Java-Themen 14
M Überprüfen, ob ein Bit gesetzt ist Allgemeine Java-Themen 3
G Überprüfen ob ein String in einem anderen String vorhanden? Allgemeine Java-Themen 2
G Überprüfen, ob Datei geöffnet ist! Allgemeine Java-Themen 3
M Überprüfen einer zur Laufzeit geladenen Klasse Allgemeine Java-Themen 3
P Überprüfen, ob Datentyp ein Objekt ist Allgemeine Java-Themen 17
berserkerdq2 Versteht jemand, was diese beiden Zahlen bei dem IJVM Code zu bedeuten haben? Allgemeine Java-Themen 10
L die 3 größten Zahlen im Array Allgemeine Java-Themen 1
A Potenzmenge der Zahlen von 1 bis n Allgemeine Java-Themen 20
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
A String auf Zahlen überprüfen Allgemeine Java-Themen 5
J Zahlen Abstand zur Null bestimmen Allgemeine Java-Themen 11
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
O Variablen Addition von Double-Werten ergibt seltsame 0.9999999 Zahlen Allgemeine Java-Themen 2
B Zufällig zwischen vorgegebenen Zahlen auswählen Allgemeine Java-Themen 6
P Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 5
M Zahlen in Array anordnen Allgemeine Java-Themen 8
D Erste Schritte Arrays vergleichen und die zahlen die nur einmal vorkommen ausgeben Allgemeine Java-Themen 5
D Erste Schritte Fehler mit negativen und 0 Zahlen im String Allgemeine Java-Themen 6
T Tesseract OCR mit Zahlen Allgemeine Java-Themen 1
D Integer-Array variabler Größe mit Zahlen befüllen (Schleifen) Allgemeine Java-Themen 0
F Zahlen zu Bits Allgemeine Java-Themen 3
R Große Zahlen in Worten abkürzen Allgemeine Java-Themen 10
B Arrays mit Text und Zahlen füllen Allgemeine Java-Themen 3
G Aus JTextField Zahlen auslesen und random generieren Allgemeine Java-Themen 10
D Operatoren Logischer Rightshift von negativen Zahlen auf Bit-Ebene Allgemeine Java-Themen 7
L 2-Dimensionaler String: Zahlen verschieben Allgemeine Java-Themen 10
M Algorithmus zum Zahlen einteilen Allgemeine Java-Themen 8
H Fibonacci-Zahlen Allgemeine Java-Themen 5
B Zahlen manuell eingeben und in Array Speichern Allgemeine Java-Themen 2
E mit extrem langen Zahlen (als Zeichneketten) arbeiten Allgemeine Java-Themen 4
M Probleme beim rechnen, bei Zahlen mit führenden Nullen. Allgemeine Java-Themen 7
L Filewriter schreibt Zahlen in Textdatei Allgemeine Java-Themen 2
T Methoden Zahlen austauschen Allgemeine Java-Themen 8
Z Zahlen aus Bild auslesen Allgemeine Java-Themen 1
M ungerade zahlen auf 4 zahlen aufteilen Allgemeine Java-Themen 2
F Funktionsplotter komplexe Zahlen: geeignetes 3D-Koordinatensystem Allgemeine Java-Themen 16
B Zahlen ausgeben hilfe! Allgemeine Java-Themen 8
S Zahlen aus (String mit zahlen) immer wieder neu auslesen Allgemeine Java-Themen 5
N Bin to Dez und umgekehrt mit sehr großen Zahlen Allgemeine Java-Themen 2
T Modulo-Operator versagt bei zu großen Zahlen? Allgemeine Java-Themen 14
AssELAss String mit Zahlen mit Tausendertrennzeichen versehen Allgemeine Java-Themen 14
D Code bitte mit 19 stelligen Zahlen kompatibel machen Allgemeine Java-Themen 5
U (Java) Happy Numbers in Anlehnung an den Sieb des Eratosthenes (Glueckliche Zahlen) Allgemeine Java-Themen 1
J Array ohne vorher festgelegte Länge oder Wie wandle ich Zahlen in Zahlen mit anderen Basen um? Allgemeine Java-Themen 6
Cayton Bruchrechner stürzt bei eingabe negativer Zahlen ab Allgemeine Java-Themen 4
N Zahl mit bestimmter Länge und nur bestimmten Zahlen generieren lassen Allgemeine Java-Themen 7
P Datentypen String-Daten zu Byte-Zahlen konvertieren - Komme nicht weiter nach vielem versuchen :-/ Allgemeine Java-Themen 7
I Java-Programm: Zahlen in Worte Allgemeine Java-Themen 22
H String auf Zahlen prüfen Allgemeine Java-Themen 4
V iText Textfelder mit Zahlen! Allgemeine Java-Themen 2
M Rechnen mit kleinen Zahlen langsamer!? Allgemeine Java-Themen 11
R Modulo mit negativen Zahlen Allgemeine Java-Themen 8
Luk10 Römische Zahlen in Java Allgemeine Java-Themen 7
R Codehinweise: Algorithmus Größenvergleich von n Zahlen Allgemeine Java-Themen 5
GianaSisters ArrayList mit Zahlen Allgemeine Java-Themen 10
B User-Input aus Zahlen und Operatoren - beste Umsetzung? Allgemeine Java-Themen 8
S Fixe Zahlen vergleichen Allgemeine Java-Themen 4
D JTable -> 1Spalte nur zahlen Allgemeine Java-Themen 2
N Zahlen in Strings einer ArrayList sortieren Allgemeine Java-Themen 14
T Apache POI Export EXCEL - [Zahlen-Werte] Allgemeine Java-Themen 1
ModellbahnerTT Button mit Zahlen beschriften Allgemeine Java-Themen 1
J Zahlenkombination aus int-array, mit absteigenden Zahlen Allgemeine Java-Themen 6
P große double Zahlen und modulo Allgemeine Java-Themen 8
R Runden von Zahlen Allgemeine Java-Themen 3
J Zahlen Rechtsbuendig in File schreiben Allgemeine Java-Themen 3
W POI - Formatierung für Zahlen Allgemeine Java-Themen 4
MQue Zahlen mit Border Allgemeine Java-Themen 2
T ungerade zahlen berechnen Allgemeine Java-Themen 3
N Zahlen mit Nachkommastellen aus Textfeldern einlesen Allgemeine Java-Themen 6
P Algoritmus für 3er-Paare von n Zahlen Allgemeine Java-Themen 12
A Fibonacci-Zahlen & kopfgesteuerte Schleifen & Strukt Allgemeine Java-Themen 8
J Suche regex-Pattern fuer Liste von Zahlen zwischen 0-100 Allgemeine Java-Themen 6
G die mittlere von 5 Zahlen nur mit if und else finden Allgemeine Java-Themen 48
M Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 8
MQue Zahlen an alysieren Allgemeine Java-Themen 6
ARadauer Random keine Zahlen doppelt Allgemeine Java-Themen 4
V FileWriter und Zahlen (Kein Problem, nur Verständnisfrage) Allgemeine Java-Themen 4
G Strings die Zahlen enthalten sinnvoll sortieren (A2 < A10 Allgemeine Java-Themen 4
F 3 Zahlen "vereinfachen" Allgemeine Java-Themen 5
C double Zahlen mit drei NachkommaStellen in String umwandeln Allgemeine Java-Themen 2
A testen ob Primzahl dauert bei größeren zahlen extrem lange Allgemeine Java-Themen 8
E Hex- Zahlen in Datei Allgemeine Java-Themen 4
G Umrechnen von grossen Zahlen ins Hex-System Allgemeine Java-Themen 3
S Zahlen sortieren Allgemeine Java-Themen 3
D Zahlen innerhalb eines Strings auslesen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben