私は楽しみのために取り組んでいる三目並べボードを持っていますが、問題に遭遇しました。基本的に、2 つの x、y 座標をランダムに生成し、それらを while ループで実行します。座標位置がマークされていない場合は、スポットをマークします。それ以外の場合は実行を継続し、新しい座標のペアを生成します。これは、関数が呼び出された最初の 4 回までは機能しているように見えますが、その後関数を使用すると制御不能になります。誰かが私を正しい方向に向けるだけでなく、論理がどこかで間違っているかどうかを教えてくれることを願っています. 建設的な批判は素晴らしい。
事前に感謝します。これが X の move 関数のコードです (O のコードはほぼ同じです)。
void Xmove(struct config *cp) {
int ran1, ran2;
srand((unsigned) time(NULL));
ran1 = rand() % 3;
ran2 = rand() % 3;
if(cp->grid[1][1] == ' ') {
cp->grid[1][1] = 'X';
printGrid(cp);
return;
}
while(ran1 == 1 && ran2 == 1) {
ran1 = (rand() % 3);
ran2 = (rand() % 3);
}
int looper = 1;
while (looper) {
if(cp->grid[ran1][ran2] != 'O' && cp->grid[ran1][ran2] != 'X') {
cp->grid[ran1][ran2] = 'X';
printGrid(cp);
looper = 0;
}
ran1 = (rand() % 3);
ran2 = (rand() % 3);
}
}