체스 게임의 보드 상태를 저장하기 위해 비트 필드 구조를 사용하고 있습니다. 32 비트 정수입니다. 입/복호화를 코딩있어 필드는 :비트 필드 변수의 값을 설정하십시오.
epSquare (63 0)
반 이동 (0 ~ 100)
현재 플레이어 (0 또는 1)
카운트
4 개 캐슬 링 권리 플래그
및 내선
/*
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
}
}
가 어떻게이 setHalfMoves
방법을 구현합니까 : RACT '상태',하지만 난 문제가 주어진 상태를 돌연변이가 있어요? 첫번째 것, setEPSquare
는 작동하는 것처럼 보이지만, 나는 이전 것을 알아낼 수 없었다. 감사!
매개 변수의 의미's'와'e' 및이 방법이 무엇인지를 생각한다 무엇을 반환하는거야? –
s는 상태이고 e는이 매개 변수의 새 값입니다 (편집 참조). – Fernando
nm ... 나는 그것을 이해했다고 생각합니다. – searchengine27