2011-12-08 129 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