Ich benutze die Bitfeld-Struktur unten, um den Board-Status eines Schachspiels zu speichern, es ist eine 32-Bit-Ganzzahl. Die Felder ich Codierung/Decodierung sind:Wert in Bitfeld-Variable setzen
epSquare (0 von 63)
Halbzuege zählen (0 bis 100)
Spielers (0 oder 1)
4 Rochade Rechte Flaggen
ich erstellen kann und ext ract ‚Staaten‘, aber ich habe Probleme, einen bestimmten Zustand mutiert:
/*
0000 0000 0000 0000 0000 0011 1111 epSquare 0x3f
0000 0000 0000 0001 1111 1100 0000 halfMoves 0x7f >> 6
0000 0000 0000 0010 0000 0000 0000 curPlayer 0x1 >> 13;
0000 0000 0000 0100 0000 0000 0000 Kc 0x4000
0000 0000 0000 1000 0000 0000 0000 Qc 0x8000
0000 0000 0001 0000 0000 0000 0000 kc 0x10000
0000 0000 0010 0000 0000 0000 0000 qc 0x20000
*/
public class State {
public static int new_state(int epSquare, int halfMoves, int turn, int flags){
return epSquare | (halfMoves << 6) | (turn << 13) | flags;
}
public static int epSquare(int s){
return s & 0x3f;
}
public static int halfMoves(int s){
return s >> 6 & 0x7f;
}
// s state, e new epSquare
public static int setEPSquare(int s, int e){
//??
}
// s state, h halfMoves value
public static int setHalfMoves(int s, int e){
//??
}
public static void main (String[] args){
int s = BoardState.new_state(36, 84, 1, 0);
System.out.println("ep square: " + epSquare(s)); //36
System.out.println("half moves: " + halfMoves(s)); //84
s = setHalfMoves(s, 13);
System.out.println("half moves: " + halfMoves(s)); //should give 13
}
}
Wie implementiere ich das setHalfMoves
Methode? Der erste, setEPSquare
, scheint zu funktionieren, aber ich konnte den ersteren nicht herausfinden. Vielen Dank!
Was die Bedeutung der Parameter 'S' und 'e' und was wird diese Methode annehmen zurückzukehren? –
s ist der Status und e ist der neue Wert für diesen Parameter (siehe Bearbeiten). – Fernando
nm ... ich denke, ich habe es herausgefunden. – searchengine27