プログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ざこ

プログラム

#1

投稿記事 by ざこ » 16年前

先日オセロのプログラムについてご質問させていただきました。
また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つの関数のどっかで間違ってる
と思います。教えて下さい。

YuO

Re:プログラム

#2

投稿記事 by YuO » 16年前

num1とnum2の片方しかcount関数が呼ばれていません。
結果,Frag (flagのtypo?) に選ばれた方だけがカウントされ,そちらの勝利となっています。
if (Frag)とそれに付随するelseを削除して,
num1=count(BLACK_STONE);
     num2=count(WHITE_STONE);
としてしまえばよいのではないでしょうか。

ざこ

Re:プログラム

#3

投稿記事 by ざこ » 16年前

成る程、ちゃんとなりました。ずっとわからなかったです。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る