また1つ問題がでまして、ちょっと自分用に改善したので修正しましたので新しくスレッドをたてさせていただきました。
int COseroDlg::count(int stone)
{
int x,y;
int count = 0;
for(x=0;x<MASU_NUM;x++) //MASU_NUMはマス数で今回の場合8
for(x=0;y<MASU_NUM;y++)
if(m_Board[x][y]==stone)//m_Board[x][y]はマス目
count++;
return(count);
}
void COseroDlg::End()
{
int num1=0,num2=0;
if(countALL==4){ //countALLは打った回数
if(Frag)//Fragは黒か白のフラグを決めるBOOL変数。TRUEのときは黒、FALSEのときは白になってます。
num1=count(BLACK_STONE);
else
num2=count(WHITE_STONE);
if(num1>num2)
Messagebox("黒の勝ちです");
else if(num1<num2)
MessageBox("白の勝ちです");
else
MessageBox("引き分けです");
}
}
内容はテストの為打った回数を敢えて短くしてますが本来は8x8マスのオセロですから60回(countALL)打って石の多い方が勝者となるプログラムです。今回はその判定の仕方がまずいらしくうまくいきません。num1に黒の個数をいれnum2に白の個数をいれ判別しています。
これを実行するとエラーはでませんが黒の方が多いはずなのに白の勝ちとでたり、引き分けなはずなのに白の勝ちとでたりします。それでデバッグで変数の中覗いてみるとnum1は正確ですがnum2は0になっていることがわかりました。
交互に黒と白を打ち、ひっくり返すという作業はちゃんとできてますので上の2つの関数のどっかで間違ってる
と思います。教えて下さい。