2011-12-08 90 views
0

好的,所以我真的很陌生,我正在尝试为我正在参加的课程制作Blackjack游戏。到目前为止,我已经掌握了一切,但是当谈到实际的游戏时,我遇到了麻烦。当我查看我的代码时,我看不出为什么我的游戏无法正常运行。我期望它比我所看到的更容易解决,因为我通常会错过小事情。C++ Blackjack游戏玩法

for(;;) 
{ 
    cout << "1)Bet, 2)Hit or 3)Stay?\n"; 
    cin >> ans; 

    if(ans == 1) 
    { 

    } 

    if(ans == 2)  // Hit 
    { 

     Console::Clear(); 
     cout << "Your Hand\n"; 
     Player.AddCard(Deck.Draw()); 
     cout << "\nHand Value: " << Player.HandValue() << "\n"; 
     Player.Show(); 

     if(Player.HandValue() > 21) 
     { 
      cout << "You Busted man...Sorry :/\n\n" 
       //<< "Dealer's Hand\n\n"; 
       //Dealer.Show(); 

     } 

      else if(Player.HandValue() == 21) 
      { 
       cout << "You've Won Your Freedom! :D"; 
      } 

     while(Dealer.HandValue() <= 17) 
     { 
      Dealer.AddCard(Deck.Draw()); 
      Dealer.Show(1); 

      if(Dealer.HandValue() > 21) 
      { 
       cout << "Dealer Busted man...You Win! :D\n" 
        << "\nDealer's Hand\n"; 
        Dealer.Show(); 
      } 

      else if(Dealer.HandValue() == 21) 
      { 
       cout << "Dealer Wins...Your Soul! >:D\n" 

      } 

     } 

    if(Player.HandValue() > Dealer.HandValue()) 
    { 
     cout << "Your Hand Beats Dealer's...You Win!! :D\n" 

    } 

    else if(Player.HandValue() < Dealer.HandValue() && Dealer.HandValue() > 17 && Player.HandValue() > 17) 
    { 
     cout << "Dealer's Hand Wins...Sorry :/\n" 

    } 
    cin.ignore(INT_MAX, '\n'); 

    cin.clear(); 
    cin.ignore(INT_MAX, '\n'); 
} 
    break; 
if(ans == 3)  // Stay 
{ 

    Console::Clear(); 
    cout << "Your Hand\n"; 
    cout << "\nHand Value: " << Player.HandValue() << "\n"; 
    Player.Show(); 

    if(Player.HandValue() > 21) 
    { 
     cout << "You Busted man...Sorry :/\n" 

    } 
    else if(Player.HandValue() == 21) 
    { 
     cout << "You've Won Your Freedom! :D\n"; 
     cout << "\n\n"; 
     cout << "Dealer's Hand\n"; 
     Dealer.Show(); 
    } 
    while(Dealer.HandValue() < 17) 
    { 
     Dealer.AddCard(Deck.Draw()); 
     Dealer.Show(1); 

    if(Dealer.HandValue() > 21) 
    { 
     cout << "Dealer Busted man...You Win! :D\n" 

    } 
    else if(Dealer.HandValue() == 21) 
    { 
     cout << "Dealer Wins...Your Soul! >:D\n" 

    } 
    } 
    if(Player.HandValue() > Dealer.HandValue()) 
    { 
     cout << "Your Hand Beats Dealer's...You Win!! :D\n" 

    } 
    else if(Player.HandValue() < Dealer.HandValue() && Dealer.HandValue() > 17 && Player.HandValue() > 17) 
    { 
     cout << "Dealer's Hand Wins...Sorry :/\n; 
     cin.ignore(INT_MAX, '\n'); 
    } 
    cin.clear(); 
    cin.ignore(INT_MAX, '\n'); 
} 

if(ans == 4) 
{ 
    exit(0); 
} 
system("pause"); 
} 

不介意if(ans == 1),我在为我的博彩代码保存。这段代码在很大程度上满足了我的需要。我没有东西来检查ace。我们有一个堆栈,这是Draw()和AddCard()从中拉出来的。任何帮助都非常感谢,并且对评论保持温和,我是新的。 :)

+0

任何特别的问题..?我们需要更多信息来帮助你。 – jli

+1

你说,“我的游戏无法正常工作”。你给了什么输入?你看到了什么结果,你认为什么结果是“正确的”? (或者你想我们完全猜测?) – abelenky

+1

我有一种感觉,我太模糊了,对不起。这是我所做的一个循环的一部分,在它显示了我的手和庄家的手后,它会询问我是否想要下注,打中或留下。我一直无法找到它,但我的问题都与我的输出有关。 我测试了好几分钟,这是我看到的那种麻烦: 有时,如果我画,然后胸围,经销商仍然画两次,然后他的胸围,而这两个消息胸围,我的和他的,显示,所以没有人获胜。 如果我留下来,我会自动回到我的主菜单,而不是在代码中显示。 – user1086849

回答

1

您的问题最有可能源于不处理某些情况。如果players.HandValue()== dealers.HandValue(),你的代码将通过测试。也不能保证玩家拥有< 17(你在测试中依赖它)。

我会建议放入其他{}条款并打印播放器和经销商手中的值和调试消息,以查看您缺少的条件,然后尝试解决原因。

if(Player.HandValue() > Dealer.HandValue()) 
{ 
    cout << "Your Hand Beats Dealer's...You Win!! :D\n"; 
} 
else if(Player.HandValue() < Dealer.HandValue() && Dealer.HandValue() > 17 && Player.HandValue() > 17) 
{ 
    cout << "Dealer's Hand Wins...Sorry :/\n"; 
} 
else 
{ 
    cout << "Unhandled case! Player handvalue: " << Player.HandValue() 
     << " dealer handvalue: " << Dealer.HandValue() << '\n'; 
} 

HTH

+0

我会继续尝试。您是否认为我做出的这一段时间声明是为了让我的经销商在需要时可以提出问题? – user1086849

+0

另外,老实说,我的保持功能没有功能。我有它的代码,但我想它永远不会达到我的代码停留。有任何想法吗? – user1086849

+0

这完全取决于你希望程序如何工作:)以为你可能想要把经销商将卡片带入停留分支的while循环。我还会列出所有处理功能的代码,比如'printGameResult()'或类似的东西。 – fileoffset