Hallo liebe Community
Die Forensuche nach dem Stichwort "Bitboard" hat keinen Treffer gelandet, weshalb ich mich wage ein neues Thema zu eröffnen.
Und zwar will ich die Datenstrukturen meines Spiels, 4 Gewinnt, in Bitboards abspeichern, nämlich aus Performancegründen.
Nun meine äusserst dämliche Frage:
Ich habe ja 2 Long Variablen die das Spielfeld beschreiben:
Um nun aber die Daten zu verarbeiten, zu vergleichen und nach Mustern zu überprüfen, wie stelle ich das an?
Wenn ich beispielsweise nen speicherfressenden int array baue, dann ist das überprüfen auf 4 gleiche Steine in einer Reihe ja einfach, aber mit einer Long-Variablen?
Mein bisheriger Ansatz das Spielfeld (ein 2D int array mit der grösse 16*16 (in meinem 4 gewinnt habe ich ein 8*8 Feld) nach 4 diagonalen und vertikalen und horizontalen Reihen zu überprüfen:
Achja; ich nehme einen riesigen 16*16 Array (model), um den array exceptions zu entgehen.
Ich finde im Forum und im Inet nicht wirklich etwas was mir weiter hilft (wobei beide Behauptungen wohl eine Lüge sind), könnt ihr mir Tips für einen vergleichbaren Überprüfungs-Algorithmus für die oben angesprochenen LONG Datenfelder geben? Mir fehlt komplett der Ansatz...
Das wäre grossartig!
Liebe Grüsse
Die Forensuche nach dem Stichwort "Bitboard" hat keinen Treffer gelandet, weshalb ich mich wage ein neues Thema zu eröffnen.
Und zwar will ich die Datenstrukturen meines Spiels, 4 Gewinnt, in Bitboards abspeichern, nämlich aus Performancegründen.
Nun meine äusserst dämliche Frage:
Ich habe ja 2 Long Variablen die das Spielfeld beschreiben:
Java:
Long white = 000000000000000000000000000000000000000000000000000000000000000;//64 Felder, obwohl nur 42 (7*6 Spielfeld) benötigt werden, 0 == kein Stein und 1 == weisser Stein
Long black = 000000000000000000000000000000000000000000000000000000000000000;//trivial
Um nun aber die Daten zu verarbeiten, zu vergleichen und nach Mustern zu überprüfen, wie stelle ich das an?
Wenn ich beispielsweise nen speicherfressenden int array baue, dann ist das überprüfen auf 4 gleiche Steine in einer Reihe ja einfach, aber mit einer Long-Variablen?
Mein bisheriger Ansatz das Spielfeld (ein 2D int array mit der grösse 16*16 (in meinem 4 gewinnt habe ich ein 8*8 Feld) nach 4 diagonalen und vertikalen und horizontalen Reihen zu überprüfen:
Achja; ich nehme einen riesigen 16*16 Array (model), um den array exceptions zu entgehen.
Java:
public boolean gameIsWon(int color) {
//yellow ==1
//red == 2
int help_array[] = new int[4];
for( int c = 3; c < model.length;c++) { //immer 0+4 da ich mein 8*8 Feld in ein 16*16 feld eingebettet habe, schrecklich, ich weiss
for( int d = 3; d < model.length;d++) {
if (model[c][d] == color)
help_array[0] = model[c][d];
if(model[c][d]==color && model[c][d+1]==color && model[c][d+2]==color && model[c][d+3]==color)
return true;
}
}
for( int c = 3; c < model.length;c++) {
for( int d = 3; d < model.length;d++) {
if(model[d][c]==color && model[d+1][c]==color && model[d+2][c]==color && model[d+3][c]==color)
return true;
}
}
for( int c = 3; c < model.length;c++) {
for( int d = 3; d < model.length;d++) {
if(model[d][c]==color && model[d+1][c+1]==color && model[d+2][c+2]==color && model[d+3][c+3]==color)
return true;
}
}
for( int c = 3; c < model.length;c++) {
for( int d = 3; d < model.length;d++) {
if(model[d][c]==color && model[d-1][c+1]==color && model[d-2][c+2]==color && model[d-3][c+3]==color)
return true;
}
}
return false;
}
Ich finde im Forum und im Inet nicht wirklich etwas was mir weiter hilft (wobei beide Behauptungen wohl eine Lüge sind), könnt ihr mir Tips für einen vergleichbaren Überprüfungs-Algorithmus für die oben angesprochenen LONG Datenfelder geben? Mir fehlt komplett der Ansatz...
Das wäre grossartig!
Liebe Grüsse
Zuletzt bearbeitet: