• 締切済み

C++でビンゴカードのリーチ判定

C++でビンゴゲームを作っています。C++の勉強を始めて半年の初心者なので、よく分からなくて、皆さんにお助けをお願いしたく投稿しました。 自分で作ったリーチ判定の関数が正しく動作してないので、どうやってやるか教えていただきたいです。よろしくお願いします。 //リーチの判定 int BingoGame::checkReach(int cell){ int reachRow, reachCol, reachDiag1, reachDiag2; int matchCnt = 0; int no_matchCnt = 0; //横 for(int i = 0; i < cell; i++){ for(int j = 0; j < cell; j++){ if(mObj_card.getNum(i, j) == 0){ matchCnt++; } else if(mObj_card.getNum(i, j) != 0){ no_matchCnt++; reachRow = mObj_card.getNum(i, j); } } if(matchCnt == (cell - 1) && no_matchCnt == 1){ cout << "reachRow: " << reachRow << endl; return reachRow; } } //縦 for(int i = 0; i < cell; i++){ for(int j = 0; j < cell; j++){ if(mObj_card.getNum(j, i) == 0){ matchCnt++; } else if(mObj_card.getNum(j, i) != 0){ no_matchCnt++; reachCol = mObj_card.getNum(j, i); } } if(matchCnt == (cell - 1) && no_matchCnt == 1){ cout << "reachCol: " << reachCol << endl; return reachCol; } } //斜め1 for(int i = 0; i < cell; i++){ if(mObj_card.getNum(i, i) == 0){ matchCnt++; } else if(mObj_card.getNum(i, i) != 0){ no_matchCnt++; reachDiag1 = mObj_card.getNum(i, i); } } if(matchCnt == (cell - 1) && no_matchCnt == 1){ cout << "reachDiag1: " << reachDiag1 << endl; return reachDiag1; }   //斜め2 for(int i = 0; i < cell; i++){ if(mObj_card.getNum(i, cell - 1 - i) == 0){ matchCnt++; } else if(mObj_card.getNum(i, cell - 1 - i) != 0){ no_matchCnt++; reachDiag2 = mObj_card.getNum(i, cell - 1 - i); } } if(matchCnt == (cell - 1) && no_matchCnt == 1){ cout << "reachDiag2: " << reachDiag2 << endl; return reachDiag2; } // return 0; }

みんなの回答

回答No.3

#1です。 >上記のコードを動かしてみると、 >一回しか回ってなくて、しかも、 >縦、斜め1、斜め2のループに >入ってなかったのですが、 >その原因は何だと思われますか? リーチがかかって returnしたんじゃないのかな?

回答No.2

#1です。 具体的に書くと。 //横 for(int i = 0; i < cell; i++){ [ここで初期化] for(int j = 0; j < cell; j++){ //縦 for(int i = 0; i < cell; i++){ [ここで初期化] for(int j = 0; j < cell; j++){ //斜め1 [ここで初期化] for(int i = 0; i < cell; i++){ //斜め2 [ここで初期化] for(int i = 0; i < cell; i++){

回答No.1

mObj_cardが何者かわからんから微妙にわからんが・・・。 matchCnt,no_matchCntを縦、斜1、斜2の始めに 初期化し直さないといけないと思うよ。 しかし、微妙な設計だな・・・・。 まあ半年とのことなので、がんばってください。

hikurah
質問者

補足

ありがとうございます。上記のコードを動かしてみると、一回しか回ってなくて、しかも、縦、斜め1、斜め2のループに入ってなかったのですが、その原因は何だと思われますか?カウンタを初期化してないのが原因でしょうか?

関連するQ&A

専門家に質問してみよう