2016-10-21 19 views
1

こんにちは私は課題に取り組んでおり、このプログラムに問題があります。C++プログラムは、void()関数でループを終了しません。

"23"のゲームは、23人の歯の選択から始まる2人用ゲームです。プレイヤーは順番に1,2、または3つの爪楊枝を一度に撤回します。最後の爪楊枝を撤回するプレイヤーはゲームを失う。 "23"を再生する人間対コンピュータープログラムを書く。人間は常に最初に動くべきです。それはコンピュータのターンである場合は、次の規則に従ってプレイする必要があります。

  • は4本の撤退 - Xは、人間が前のターンに撤退した爪楊枝の数であるXつまようじを、。左1本のつまようじがある場合

  • は、左の2〜4つまようじがある場合、コンピュータは1

  • を残すのに十分なつまようじを撤回する必要があり、その後、コンピュータはそれを取る必要があり、それが失われます。

人間のプレイヤーが爪楊枝の数を入力して撤退すると、プログラムは入力検証を実行する必要があります。入力した数字が1と3の間であり、プレイヤーがパイルに存在するものよりも多くの爪楊枝を引き抜こうとしていないことを確認します。

ここは私のコードです。どんな助けもありがとう。

#include <iostream> 
using namespace std; 

void compAlgorithm(int totalTp, int compTp, int userTp, int countr) { 
do { 
    if (totalTp > 4) { 
     compTp = 4 - userTp; 
     totalTp += totalTp - compTp; 
     countr--; 
    } 
    if (totalTp >= 2 && totalTp <= 4) { 
     switch (totalTp) { 
      case 2: 
       totalTp += totalTp - 1; 
       countr--; 
       break; 
      case 3: 
       totalTp += totalTp - 2; 
       countr--; 
       break; 
      case 4: 
       totalTp += totalTp - 3; 
       countr--; 
       break; 
      } 
     } 
    } while (countr == 1); 
} 

int main() { 
    int userTp = 0; 
    int compTp = 0; 
    int totalTp = 23; 
    int countr = 0; 

    do { 
     if (countr == 0) { 
      cout << "please enter a vale of toothpics between 1 and 3" << endl; 
      cin >> userTp; 
      totalTp += totalTp - userTp; 
      countr++; 
     } 
     else if (countr == 1) { 
      compAlgorithm; 
     } 
    } while (totalTp >= 2); 

    if (totalTp == 1 && countr == 1) { 
     cout << "you win" << endl; 
    } 
    else if (totalTp > 0 && totalTp < 2 && countr == 0) { 
     cout << "please enter a vale of toothpics between 1 and 2" << endl; 
     cin >> userTp; 
     totalTp = totalTp - userTp; 
     switch (totalTp) { 
     case 1: 
      cout << "you win" << endl; 
      break; 
     case 2: 
      cout << "you loose" << endl; 
      break; 
     } 
    } 
    system("pause"); 
    return 0; 
} 

ありがとうございます。

+3

デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:** [小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+1

スペル: "あなたが緩んでいる"を "あなたは失う "。 – Frecklefoot

答えて

3

これは間違っている:それはあなたの意図である場合は、この関数呼び出しに引数を渡す必要があります

else if (countr == 1) { 
    compAlgorithm; 
} 

。現在この行compAlgorithm;は何もせず、無限ループを引き起こす可能性があります。

0

これは、何も指定しなければ、C++は関数の引数を値として渡すためだと思います。関数compAlgorithmでは、の参照totalTpcountrに使用する必要があります。これは、範囲外で変更されることが予想されるためです。私はこれについてもっと見るためにlinkを残します。

関連する問題