2017-05-21 6 views
1

こんにちは私は戦争のゲームを書こうとしていますが、私のコードは決して終わらないゲームを作り出しています。アウトプットを見ると、プレーヤー1とプレーヤー2が交互に勝利するサイクルがあることがわかります。誰が勝つべきかの評価が正しいように見えます。それはプレーヤー1とプレイヤー2の手が均等に似ているように思える。私はゲームの開始前にシャッフルしているので、これがどのように可能かはわかりません。私はここで何が起こっているのか分かりません。また、私はC++ 98決して終わらない戦争のゲーム

using namespace std; 

#define SSTR(x) static_cast< std::ostringstream & >(\ 
     (std::ostringstream() << std::dec << x)).str() 

void shuffleDeck(vector<string> &); 

void splitDeck(vector<string> vDeck, vector<string> &, vector<string> &); 

int compareRound(char, char); 

int main(int argc, char** argv) { 
vector<string> vPlayerOneCards; 
vector<string> vPlayerTwoCards; 

vector<string> vDeck; 
for (int i = 2; i < 15; i++){ 
    for (int e = 0; e < 4; e++){ 
     string currentCard; 
     if (i < 11){ 
      currentCard += SSTR(i).c_str(); 
     } 
     else if (i == 11){ 
      currentCard += "Jack"; 
     } 
     else if (i == 12){ 
      currentCard += "Queen"; 
     } 
     else if (i == 13){ 
      currentCard += "King"; 
     } 
     else if (i == 14){ 
      currentCard += "Ace"; 
     } 

     currentCard += " of "; 

     if (e == 0){ 
      currentCard += "Hearts"; 
     } 
     else if (e == 1){ 
      currentCard += "Diamonds"; 
     } 
     else if (e == 2){ 
      currentCard += "Clubs"; 
     } 
     else if (e == 3){ 
      currentCard += "Spades"; 
     } 
     vDeck.push_back(currentCard); 
    } 
} 

shuffleDeck(vDeck); 

splitDeck(vDeck, vPlayerOneCards, vPlayerTwoCards); 

for (int i = 0; i < 26; i++){ 
    cout << vPlayerOneCards[i] << endl; 
} 

cout << endl << endl << endl; 

for (int i = 0; i < 26; i++){ 
    cout << vPlayerTwoCards[i] << endl; 
} 

// This is the pile of cards that the winner of the round get's to keep. 
vector<string> cardPool; 
int counter = 0; 
while (vPlayerOneCards.size() > 0 && vPlayerTwoCards.size() > 0){ 
    counter++; 
    cardPool.push_back(vPlayerTwoCards[0]); 
    cardPool.push_back(vPlayerOneCards[0]); 

    cout << "Player One: " + vPlayerOneCards[0] + "." << endl << "VS" << endl << "Player Two: " + vPlayerTwoCards[0] + "." << endl; 

    int roundWinner = compareRound(vPlayerOneCards[0][0], vPlayerTwoCards[0][0]); 
    if (roundWinner == 0){ 
     cout << "Player One Wins The Round." << endl; 
     while (cardPool.size() > 0){ 
      vPlayerOneCards.push_back(cardPool[cardPool.size()-1]); 
      cardPool.erase(cardPool.end()); 
     } 
    } 
    else if (roundWinner == 1){ 
     cout << "Player Two Wins The Round." << endl; 
     while (cardPool.size() > 0){ 
      vPlayerTwoCards.push_back(cardPool[cardPool.size()-1]); 
      cardPool.erase(cardPool.end()); 
     } 
    } 
    else { 
     cout << "The Round Is A Tie." << endl; 
    } 
    cout << endl; 

    vPlayerOneCards.erase(vPlayerOneCards.begin()); 
    vPlayerTwoCards.erase(vPlayerTwoCards.begin()); 
    cout << vPlayerOneCards.size() << endl; 
    cout << vPlayerTwoCards.size() << endl; 
} 

if (vPlayerOneCards.size() > 0){ 
    cout << "Player One Wins The Game Of WAR!!!!!"; 
} 
else { 
    cout << "Player Two Wins The Game Of WAR!!!!!"; 
} 

return 0; 
} 

void shuffleDeck(vector<string> &vDeck){ 
    srand(time(0)); 
    random_shuffle(vDeck.begin(), vDeck.end()); 
} 

void splitDeck(vector<string> vDeck, vector<string> &vPlayerOneCards, vector<string> &vPlayerTwoCards){ 
    for (int i = 1; i < 53; i++){ 
     if (i % 2 == 0){ 
      vPlayerOneCards.push_back(vDeck[i-1]); 
     } 
     else { 
      vPlayerTwoCards.push_back(vDeck[i-1]); 
     } 
    } 
} 

int compareRound(char p1, char p2){ 
    char cArr[] = {'2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'}; 
    vector<char> cardPrecedence(cArr, cArr + sizeof(cArr)/sizeof(cArr[0])); 
    int p1Precedence = distance(cardPrecedence.begin(), find(cardPrecedence.begin(), cardPrecedence.end(), p1)); 
    int p2Precedence = distance(cardPrecedence.begin(), find(cardPrecedence.begin(), cardPrecedence.end(), p2)); 
    if (p1Precedence > p2Precedence){ 
     return 0; 
    } 
    else if (p2Precedence > p1Precedence){ 
     return 1; 
    } 
    else { 
     return 2; 
    } 
} 
+0

もちろんです。私は助けが必要な場合を除き、質問はしません。 – Kahless

+0

ここで尋ねる人の数には、デバッグの内容が分からない人もいます。あなたの説明をもう一度読んで、私はあなたがそれを見ているのを見ることができます。ごめんなさい。 – Carcigenicate

+0

それはあなたが何を意味するか分かります。 – Kahless

答えて

2

を使用していますねえ、私は私が間違って何をやっていた考え出しました。私はラウンドでプレーされている2枚のカードを取り除く前に、勝者の手にカードを追加していました。この機能を変更した後は、すべて正常に動作するようになりました。

cardPool.push_back(vPlayerTwoCards[0]); 
    cardPool.push_back(vPlayerOneCards[0]); 
    vPlayerOneCards.erase(vPlayerOneCards.begin()); 
    vPlayerTwoCards.erase(vPlayerTwoCards.begin()); 

    cout << "Player One: " + vPlayerOneCards[0] + "." << endl << "VS" << endl << "Player Two: " + vPlayerTwoCards[0] + "." << endl; 

    int roundWinner = compareRound(vPlayerOneCards[0][0], vPlayerTwoCards[0][0]); 
    if (roundWinner == 0){ 
     cout << "Player One Wins The Round." << endl; 
     while (cardPool.size() > 0){ 
      vPlayerOneCards.push_back(cardPool[cardPool.size()-1]); 
      cardPool.erase(cardPool.end()); 
     } 
    } 
    else if (roundWinner == 1){ 
     cout << "Player Two Wins The Round." << endl; 
     while (cardPool.size() > 0){ 
      vPlayerTwoCards.push_back(cardPool[cardPool.size()-1]); 
      cardPool.erase(cardPool.end()); 
     } 
    } 
    else { 
     cout << "The Round Is A Tie." << endl; 
    } 
    cout << endl; 

    cout << vPlayerOneCards.size() << endl; 
    cout << vPlayerTwoCards.size() << endl; 
+0

あなた自身の答えを受け入れて、質問がぶつかるのを止めてください。 :) – Donnie

+0

申し訳ありません私は数日間ログインしていません。 :) – Kahless

関連する問題