C ++编程Craps游戏模拟

时间:2014-11-17 06:57:22

标签: c++

编写一个模拟掷骰子赌场游戏的C ++程序。这些是游戏规则: •如果玩家在第一次掷骰时投掷7或11(两个骰子的总和),则玩家赢得游戏。 •如果玩家在第一次掷骰时投掷2,3或12(两个骰子的总和),则玩家将失去游戏。 •如果玩家在第一次掷骰时投掷4,5,6,8,9或10(两个骰子的总和),则他(s)既不赢也不输但是创造了一个“点”。如果是这种情况,玩家继续掷骰子直到再次投掷点(4,5,6,8,9或10),并且玩家赢得游戏。但是,如果玩家在投掷“点数”之前投掷7(两个骰子的总和),则玩家将失去游戏。

您将创建一个名为rollDice的函数,在调用时,将滚动两个骰子并返回一个介于2和12之间的随机数。每次调用rollDice时,程序都应输出滚动结果

该程序会询问玩家“另一个游戏? Y(es)或N(o)?“并在按下Y或y以外的任何键时终止。

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
int dice1, dice2 = 0; 
int rollDice;
char repeat = 'y'; 

cout << "**********************************************************"<< endl;
cout << "********   Welcome to the Kyung Bae Choi Casino   ********"<< endl;
cout << "********* Step up to the table and place your bets! ******"<< endl;
cout << "**********************************************************"<< endl;

while (repeat == 'y' || repeat == 'Y') 
{                                                   
    dice1 = rand() % 6 + 1;
    dice2 = rand() % 6 + 1; 
    rollDice = dice1 + dice2;

    cout << "Your rolled " << rollDice;
    if (rollDice == 7 || rollDice == 11)
    {
        cout << ". Winner !" << endl ;
    } 

    else if (rollDice == 2 || rollDice == 3 || rollDice == 12)
    {
        cout  << ". You lose!" << endl; 
    }

    else if (rollDice == 4 || rollDice == 5 ||rollDice == 6 ||rollDice == 8 || rollDice == 9 || rollDice == 10)
      {     
        dice1 = rand() % 6 + 1;
        dice2 = rand() % 6 + 1; 
    int sum2 = dice1 + dice2;

     if( sum2 == rollDice )
            {
                cout << ". Winner !" << endl;
                break;
            } 
    else if( sum2 == 7 )
            {
                cout << ". You Lose!" << endl;
                break;
            }
  }
cout <<"Another game? Y(es) or N(o)"  << endl;
    cin >> repeat;

while (repeat == 'n' || repeat == 'N') 
{
cout <<  "Thank you for playing!"<< endl;
}
return 0;
}
}

这只输出7.所以,它一直说你的滚动7.赢家! 另一场比赛?是还是不是)。并且,如果我把y,程序结束。或者如果我把n,程序输出“谢谢你玩!”不休。

什么是问题??

如何让它继续重新掷骰子直到玩家滚动获胜的“点数”或掷出7点。

3 个答案:

答案 0 :(得分:2)

您错过了"...."声明中的cout。因此,编译器被愚弄相信Thankyou,...是指令[keywords / variables],这实际上是错误的。

更改

cout << Thank you for playing!<< endl;

cout <<"Thank you for playing!"<< endl;

拇指规则: 始终尝试在错误/警告转换期间查看编译器提供的信息。这里是行号58。找出错误的指导是非常有帮助的。


编辑:

请不要编辑当前的问题并添加全新的查询。重新获得以前的版本并提到编辑。否则,它会使之前的答案无关紧要。

答案 1 :(得分:0)

您在cout << Thank you for playing!<< endl;中缺少引号。

cout << "Thank you for playing!" << endl;

此外,您测试repeat == 'n''N'的逻辑错误:

  1. 您应该使用if语句,而不是while循环。
  2. 只有当用户输入N&#39; N&#39;或者&#39; n&#39;。
  3. 要注意第二个错误,使用标准缩进样式会很有帮助。

答案 2 :(得分:0)

在打印字符串时使用Double qoutes (") ..

cout <<"Thank you for playing!"<< endl;

还有@irrelephant在他的回答中提出的另一件事

使用

if(repeat == 'n' || repeat == 'N')                 //Use if condition
{
   cout <<  Thank you for playing!<< endl;
   return 0;                                      // exit only when user enter `n` or `N`
} 

如果您在外面使用return 0;,则无论用户输入的内容为Y还是N,程序都会终止。