私はC++でチェスゲームを終わらせるという私の使命をはるかに超えています。しかし、私はいくつかの小さな問題にぶつかってきました。チェス検証入力を移動したい
SITUATION:
マイPAWN、KINGは、ナイトムーブの検証は完璧に動作します。しかし; ピース(白いROOKなど)を移動するときは、ほとんどのルールに従います。たとえば、垂直または水平方向にのみ移動し、別の白い部分を渡しません。白い部分を置き換えずに、最後に黒い(反対の)部分を置き換えます。
問題は別の黒いピースを通過させるときに、それを通過したピースを置き換えるために渡すことができるということです。 x = 2、y = 6、x = 2、y = 4の黒い部分、x = 2、y = 3の黒い部分があるとしましょう。白い部分はx = 2、y = 3に移動することが許されますが、これは許されません。これを修正する方法についてのいくつかの入力を取得したいです。現在のコードは以下です。
bool Rook:: canMove(int startx, int starty, int endx, int endy)
{
int i;
if(board[endx][endy] !=NULL && board[endx][endy]->color==color)
return false;
if (startx == ends) //Collision Detection...
{
// Horizontal move
if (starty < endy)
{
// Move down
for (i = starty + 1; i <= endy; ++i)
if (board[startx][i] != NULL && board[startx][i]->color==color)
return false;
}
else
{
// Move up
for (i = starty - 1; i >= endy; --i)
if (board[startx][i] != NULL && board[startx][i]->color==color) //cant allow passing of non color piece
return false;
}
}
else if (starty == endy)
{
// Vertical move
if (startx < endx)
{
// Move right
for (i = startx + 1; i <= endx; ++i)
if (board[i][starty] != NULL && board[i][starty]->color==color)
return false;
}
else
{
// Move left
for (i = startx - 1; i >= endx; --i)
if (board[i][starty] != NULL && board[i][starty]->color==color)
return false;
}
}
else
{
// Not a valid rook move (neither horizontal nor vertical)
return false;
}
return true;
}
デバッガ。デバッガを使用して各ステートメントを実行し、変数内の値を識別します。 –
これをデバッグする方法がわからないので、私の問題はそのような瞬間を許さない制限を考えることができないと思う。 – CodyThomas
このような問題を解決する適切なツールはデバッガである。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –