📄 movesbackup.cpp
字号:
if (board[k][m]==0)
{
add(piece,j,i,m,k,0);
}
else
{
if (cond2(color,board[k][m]))
{
add(piece,j,i,m,k,1);
}
break;
}
}
for (k=i-1,m=j+1;k>=0 && m<8;k--,m++)
{
if (board[k][m]==0)
{
add(piece,j,i,m,k,0);
}
else
{
if (cond2(color,board[k][m]))
{
add(piece,j,i,m,k,1);
}
break;
}
}
for (k=i+1,m=j+1;k<8 && m<8;k++,m++)
{
if (board[k][m]==0)
{
add(piece,j,i,m,k,0);
}
else
{
if (cond2(color,board[k][m]))
{
add(piece,j,i,m,k,1);
}
break;
}
}
for (k=i+1,m=j-1;k<8 && m>=0;k++,m--)
{
if (board[k][m]==0)
{
add(piece,j,i,m,k,0);
}
else
{
if (cond2(color,board[k][m]))
{
add(piece,j,i,m,k,1);
}
break;
}
}
}
}
}
}
void Moves::GenerateRookMoves(int board[8][8],int color)
{
int piece;int k;
piece=(color==WHITE?WHITE_ROOK:BLACK_ROOK);
for (int i=0;i<8 ;i++)
{
for (int j=0;j<8;j++)
{
if (board[i][j]==piece)
{
for (k=i-1;k>=0;k--)
{
if (board[k][j]==0)
{
add(piece,j,i,j,k,0);
//MessageBox("Rook Move added");
}
else
{
if ( cond2(color,board[k][j]))
{
add(piece,j,i,j,k,1);
}
break;
}
}
for (k=i+1;k<8;k++)
{
if (board[k][j]==0)
{
add(piece,j,i,j,k,0);
//MessageBox("Rook Move added");
}
else
{
if (cond2(color,board[k][j]))
{
add(piece,j,i,j,k,1);
}
break;
}
}
for (k=j+1;k<8;k++)
{
if (board[i][k]==0)
{
add(piece,j,i,k,i,0);
//MessageBox("Rook Move added");
}
else
{
if (cond2(color,board[i][k]))
{
add(piece,j,i,k,i,1);
break;
}
break;
}
}
for (k=j-1;k>=0;k--)
{
if (board[i][k]==0 )
{
add(piece,j,i,k,i,0);
//MessageBox("Rook Move added");
}
else
{
if (cond2(color,board[i][k]))
{
add(piece,j,i,k,i,1);
}
break;
}
}
}
}
}
}
void Moves::GenerateQueenMoves(int board[8][8],int color)
{
int piece; int k;
piece=(color==WHITE?WHITE_QUEEN:BLACK_QUEEN);
for (int i=0;i<8;i++)
{
for (int j=0;j<8;j++)
{
if (board[i][j]==piece)
{
//Search moves straight, up,left,right and down
for (k=i-1;k>=0;k--)
{
if (board[k][j]==0 )
{
add(piece,j,i,j,k,0);
//MessageBox("Rook Move added");
}
else
{
if ( cond2(color,board[k][j]))
{
add(piece,j,i,j,k,1);
}
break;
}
}
for (k=i+1;k<8;k++)
{
if (board[k][j]==0)
{
add(piece,j,i,j,k,0);
//MessageBox("Rook Move added");
}
else
{
if (cond2(color,board[k][j]))
{
add(piece,j,i,j,k,1);
}
break;
}
}
for (k=j+1;k<8;k++)
{
if (board[i][k]==0 )
{
add(piece,j,i,k,i,0);
//MessageBox("Rook Move added");
}
else
{
if ( cond2(color,board[i][k]))
{
add(piece,j,i,k,i,1);
}
break;
}
}
for (k=j-1;k>=0;k--)
{
if (board[i][k]==0)
{
add(piece,j,i,k,i,0);
//MessageBox("Rook Move added");
}
else
{
if (cond2(color,board[i][k]))
{
add(piece,j,i,k,i,1);
}
break;
}
}
int m;
//Now search diagnols. Could have put this in a function (Bishop needs it too)
for (k=i-1,m=j-1;k>=0 && m>=0;k--,m--)
{
if (board[k][m]==0 )
{
add(piece,j,i,m,k,0);
}
else
{
if (cond2(color,board[k][m]))
{
add(piece,j,i,m,k,1);
}
break;
}
}
for (k=i-1,m=j+1;k>=0 && m<8;k--,m++)
{
if (board[k][m]==0 )
{
add(piece,j,i,m,k,0);
}
else
{
if (cond2(color,board[k][m]))
{
add(piece,j,i,m,k,1);
}
break;
}
}
for (k=i+1,m=j+1;k<8 && m<8;k++,m++)
{
if (board[k][m]==0)
{
add(piece,j,i,m,k,0);
}
else
{
if (cond2(color,board[k][m]))
{
add(piece,j,i,m,k,1);
}
break;
}
}
for (k=i+1,m=j-1;k<8 && m>=0;k++,m--)
{
if (board[k][m]==0)
{
add(piece,j,i,m,k,0);
}
else
{
if (cond2(color,board[k][m]))
{
add(piece,j,i,m,k,1);
break;
}
break;
}
}
}
}
}
}
void Moves::GenerateKingMoves(int board[8][8],int color)
{
int i,j;
int found=0;
int piece;
piece=(color==WHITE?WHITE_KING:BLACK_KING);
for (i=0;i<8 && !found;i++)
{
for (j=0;j<8;j++)
{
if (board[i][j]==piece)
{
found=1;
break;
}
}
}
i--;
if (found)
{
//MessageBox("King found at "+(CString)(itoa(posnx,buf,10))+","+(CString)(itoa(posny,buf,10)));
//MessageBox(board[0][3]==WHITE_KING?"True":"False");
if (i<7 && (gencond(color,board[i+1][j])))
{
//MessageBox("Added One King Move");
add(piece,j,i,j,i+1,0);
}
if (i>0 && (gencond(color,board[i-1][j])))
{
//char buf[255];
//MessageBox("Added One King Move, piece Follows");
//MessageBox(itoa(board[i-1][j],buf,10));
add(piece,j,i,j,i-1,0);
//MessageBox("Added One King Move");
}
if (j<7 && (gencond(color,board[i][j+1])))
{
add(piece,j,i,j+1,i,0);
}
if (j>0 && (gencond(color,board[i][j-1])))
{
add(piece,j,i,j-1,i,0);
//MessageBox("Added One King Move");
}
if (i<7 && j<7 && (gencond(color,board[i+1][j+1])))
{
add(piece,j,i,j+1,i+1,0);
//MessageBox("Added One King Move");
}
if (i<7 && j>0 && (gencond(color,board[i+1][j-1])))
{
add(piece,j,i,j-1,i+1,0);
//MessageBox("Added One King Move");
}
if (i>0 && j<7 && (gencond(color,board[i-1][j+1])))
{
add(piece,j,i,j+1,i-1,0);
//MessageBox("Added One King Move");
}
if (i>0 && j>0 && (gencond(color,board[i-1][j-1])))
{
add(piece,j,i,j-1,i-1,0);
//MessageBox("Added One King Move");
}
}
}
int Moves::GenerateAllMoves(int board[8][8],int color,int depth,int check_for_mate)
{
//char buf[255];
//int check=0;
/*TransTableEntry entry=table.LookUp(board);
if (entry.valid && ((color==WHITE && entry.move.piece<10 && entry.move.piece>0) || (color==BLACK && entry.move.piece>10 && entry.move.piece<17)))
{
add(entry.move.piece,entry.move.sourcex,entry.move.sourcey,entry.move.destx,entry.move.desty,1);
}*/
//if ((color==WHITE && WHITE_BASE==0) || (color==BLACK && BLACK_BASE==0))
if (search_firsttime==0)
{
if (movecount<80)
{
GenerateKnightMoves(board,color);
GenerateBishopMoves(board,color);
GeneratePawnMoves(board,color);
GenerateRookMoves(board,color);
GenerateQueenMoves(board,color);
GenerateKingMoves(board,color);
}
else
{
GeneratePawnMoves(board,color);
GenerateRookMoves(board,color);
GenerateQueenMoves(board,color);
GenerateKnightMoves(board,color);
GenerateBishopMoves(board,color);
GenerateKingMoves(board,color);
}
combine();
if (depth<4 && depth>0 && !check_for_mate)
{
allmoves=new OneMove[size];
//memmove(allmoves,head,size*sizeof(OneMove));
OneMove *temp=head;
temp=temp->next;
for (int i=0;i<size;i++)
{
allmoves[i]=*temp;
temp=temp->next;
}
movequeue.AddMoveList(allmoves,size);
}
}
else
{
if (depth>=2 && !check_for_mate)
{
MessageBox(NULL,"Removing Head","",0);
head=movequeue.RemoveMoveList();
}
else
{
if (movecount<80)
{
GenerateKnightMoves(board,color);
GenerateBishopMoves(board,color);
GeneratePawnMoves(board,color);
GenerateRookMoves(board,color);
GenerateQueenMoves(board,color);
GenerateKingMoves(board,color);
}
else
{
GeneratePawnMoves(board,color);
GenerateRookMoves(board,color);
GenerateQueenMoves(board,color);
GenerateKnightMoves(board,color);
GenerateBishopMoves(board,color);
GenerateKingMoves(board,color);
}
combine();
if (depth<4 && !check_for_mate)
{
OneMove *allmoves=new OneMove[size];
memmove(allmoves,head,size*sizeof(OneMove));
movequeue.AddMoveList(allmoves,size);
}
}
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -