私はチェス盤の表現に取り組んでおり、32 バイト配列に格納する予定です。各バイトは 2 つの駒を格納するために使用されます。(この方法では、ピースごとに必要なビットは 4 つだけです)
そのようにすると、ボードの特定のインデックスにアクセスするためのオーバーヘッドが発生します。このコードを最適化できると思いますか、またはインデックスにアクセスするためのまったく異なる方法を使用できますか?
c++
char getPosition(unsigned char* c, int index){
//moving pointer
c+=(index>>1);
//odd number
if (index & 1){
//taking right part
return *c & 0xF;
}else
{
//taking left part
return *c>>4;
}
}
void setValue(unsigned char* board, char value, int index){
//moving pointer
board+=(index>>1);
//odd number
if (index & 1){
//replace right part
//save left value only 4 bits
*board = (*board & 0xF0) + value;
}else
{
//replacing left part
*board = (*board & 0xF) + (value<<4);
}
}
int main() {
char* c = (char*)malloc(32);
for (int i = 0; i < 64 ; i++){
setValue((unsigned char*)c, i % 8,i);
}
for (int i = 0; i < 64 ; i++){
cout<<(int)getPosition((unsigned char*)c, i)<<" ";
if (((i+1) % 8 == 0) && (i > 0)){
cout<<endl;
}
}
return 0;
}
独立した問題として、チェスの表現と上記の方法の最適化に関するあなたの意見にも同様に興味があります.
どうもありがとう
編集
返信ありがとうございます。少し前に、64 バイトのボード表現を使用していたチェッカー ゲームを作成しました。今回は、自分の好みを確認するために、いくつかの異なる方法を試しています。メモリはそれほど大きな問題ではありません。ビットボードは間違いなく私のリストに載っています。ありがとう