永无止境的战争游戏
Game of war that never ends
大家好,我正在尝试编写一个战争游戏,但我的代码产生了永无止境的游戏。当我查看输出时,我看到有一个循环,玩家一和玩家二交替获胜回合。对谁应该获胜的评估看起来是正确的。看起来玩家一和玩家二的手势均力敌。我在比赛开始前洗牌,所以我不明白这怎么可能。我不确定这里发生了什么。我也在使用 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;
}
}
嘿,我
发现我做错了什么。在我删除回合中正在打的两张牌之前,我正在向获胜者手牌添加牌。更改此功能后,一切都开始正常工作。
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;
相关文章:
- 在C++游戏中与库存系统作斗争
- 换位表导致测试失败(但在游戏中运行良好)
- Craps游戏问题,忽略if语句
- 矢量下标超出SFML游戏中的范围
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- 我应该在简单的策略游戏中为各个派系使用类吗 - C++
- 游戏体验和升级
- 我的代码运行良好,但在游戏循环中中断
- 如何使用 SFML 在贪吃蛇游戏中定义游戏结束?
- 我可以使用任何好的逻辑来阻止计算机将 O 放在井字游戏中的现有 X 上
- 将鼠标和键盘输入发送到 unity3d 游戏 (Rust)
- 为什么我在尝试在单向链表中打印元素时会出现这个永无止境的循环
- 在猜谜游戏 c++ 中不计算尝试次数
- 在C++不适用于猜数字游戏的情况下再次播放选项
- 在为我的基于文本的 RPG 游戏制作库存时遇到困难
- 在定义字符数组(井字游戏)的 for 循环中应用输入限制
- 永无止境的战争游戏
- 战争卡牌游戏洗牌函数返回负 #
- 战争卡牌游戏C++