2013-10-07 2 views
-3

У меня здесь проблема, было бы очень приятно, если бы кто-нибудь мог помочь мне здесь. Его мой первый раз, используя эту программу, так что не стоит судить.Basic C++ Dice game

#include <cstdlib> 
#include <iostream> 

using namespace std; 
int throw1, throw2, throw3, throw4; 
int bet1 = 100; 
int bet2 = 300; 
int bet3 = 500; 
int bet=(bet1, bet2, bet3); 
int deposit; 
int account; 

int main(){ 
    int count = 0; 

    while(count < 3){ 

     cin>>deposit; 

     while(deposit>5000 || deposit<0){    //Makes sure so that my deposit is between 0-5000 
      cout<<"deposit failed"<<endl; 
      cin>>deposit; 

     } 
     account = deposit; 
     cout<<"You have deposited" <<deposit<<"Swedish Krona"<<endl; 
     cout<<"and you have this much cash on your account"<<account<<"Swedish Krona"<<endl; 

     if (konto>499){     //Makes sure so that i have the money to bet, and if i dont have the money, i can just put in more 
      cout<<"please place your bet"<<endl; 
      cout<<"bet1=100, bet2=300, bet3=500"<<endl; 
      cin>>bet1; 
      cin>>bet2; 
      cin>>bet3; 
      account = (deposit - bet); 
      cout<<"you have this much cash on your account"<<account<<"Swedish Krona"<<endl; 
     } 
     else if(account>299){ 
      cout<<"please place your bet"<<endl; 
      cout<<"bet1=100, bet=300"<<endl;  
      cin>>bet1; 
      cin>>bet2; 
      account =(deposit - bet); 
      cout<<"you have this much cash on your account"<<account<<"Swedish Krona"<<endl; 
     } 
     else if(account>99){ 
      cout<<"please place your bet"<<endl; 
      cout<<"bet1=100"<<endl; 
      cin>>bet1; 
      cout<<"you have placed your bet"<<bet<<"Swedish Krona"<<endl; 
     } 

     while (account<100 || deposit>5000){ 
      cout<<"insufficient funds"<<endl; 
      cin>>deposit; 
      account=deposit; 
     } 

     { 
      cout<<"Throw dice"<<endl; 
      srand(time(0)); 
      Throw1 = rand() % 6 + 1; 
      Throw2 = rand() % 6 + 1; 
      Throw3 = rand() % 6 + 1; 
      Throw4 = rand() % 6 + 1; 
      cout<<"You rolled"<<Throw1<<endl; 
      cout<<"You rolled"<<Throw2<<endl; 
      cout<<"Computer rolled"<<Throw3<<endl; 
      cout<<"Computer rolled"<<Throw4<<endl; 
     } 
    } 
    count++; 

    system ("pause"); 
} 

Так что дело здесь в том, что по какой-то причине я всегда держать пари, 500, даже если тип в bet1 или bet2, и я понятия не имею, как исправить эту проблему. И тогда моя функция цикла (int count 0; while(count < 3)count++) начинает бесконечно зацикливаться, не нажимая ничего, даже несмотря на то, что я использую одну и ту же функцию цикла в простой кодировке, например, просто набирая некоторые cout < <, все хорошо работает, но когда я использую его в этом коде, чтобы кто-нибудь знал, почему это происходит, было бы полезно, если бы кто-нибудь мог ответить, спасибо в продвинутом.

+7

Было бы полезно, если бы вы переименовали свои переменные на английский, а также перевели комментарии –

+3

Звоните srand() только 1 раз в исполнение вашей программы. Никогда не ставьте его в петлю. – drescherjm

+1

Невозможно догадаться, что вы подразумеваете под 'int bet = (bet1, bet2, bet3)'. Я бы рекомендовал вам снова изучить основы переменных и присвоения. – molbdnilo

ответ

5

Что вы заявляете в своем комментарии ниже кода, (int count 0; while(count < 3)count++) выглядит как какая-то странная смесь for и while петля. Повторите попытку учебника по учебнику на C++/онлайн-уроках о том, как написать правильный цикл.

В коде, который вы указываете, в вашем цикле while вы не изменяете переменную count - поэтому она будет работать навсегда, если счет < 3 перед циклом. Отступ вашего кода действительно вводит в заблуждение. Я взял на себя право переформатировать ваш код, и теперь вы должны увидеть, что оператор count++ фактически находится вне вашего основного цикла while!

Если вы хотите что-то делать фиксированное количество раз, рекомендуется использовать петлю for, это затрудняет забывание приращения!

+0

Да, я видел это так же, так изменил его, и теперь он до сих пор идет на ярость, и он меняет количество, которое я хочу, чтобы он зацикливался, но он дозволяет мне переделать мои ставки, я могу просто нажать что-то, автоматически, ставка, когда я использую этот код для чего-то случайного, я делаю это нормально – beastmode28

+0

показать нам выход программы вместе с вашим входом и то, что вы на самом деле ожидаете, тогда кто-то может вам помочь – codeling

9
int bet1 = 100; 
int bet2 = 300; 
int bet3 = 500; 
int bet=(bet1, bet2, bet3) 

Последняя строка будет оцениваться следующим образом: 100, 300, 500. Результат запятыми список выражения будет последнее значение, которое 500. Таким образом, ваша переменная ставка будет всегда устанавливается в 500.

3

Вы увеличиваете countснаружи петля, поэтому она будет всегда будет равна нулю. Либо переместить его внутри цикла (собственно отступы ключ!) Или, возможно, использовать for петлю вместо:

for (count = 0; count < 3; ++count) { ... } 
+0

Я пробовал это, но ничего happaned – beastmode28

0

Некоторые советы,

  • разместить запрос на депозите (insattning) в функцию
  • положите ваше предложение для ставки в функцию
  • проверьте наличие достаточного количества денег, прежде чем предлагать ставку
  • введите ввод в строку, затем подтвердите ввод (не делается ниже , Тем не менее)
  • чек, что ставка действительна (= 100 = 300 = 500, ставка < = KONTO)

Вот эти функции удобства,

#include <string> 
#include <cstdlib> 
#include <iostream> 

using namespace std; 
int kast1, kast2, kast3, kast4; 
int bet1 = 100; 
int bet2 = 300; 
int bet3 = 500; 
int bet=0; //assignment didn't make sense 
int insattning=0; 
int konto=0; 

//deposit 
int get_insattning() 
{ 
    int good = 0; 
    while(!good) 
    { 
     cout<<"deposit"<<endl; //prompt for deposit 
     cin>>insattning; 
     if(insattning>5000 || insattning<0)//Makes sure so that my deposit is between 0-5000 
     { 
      cout<<"insattning fel, var vänlig och gör rätt denna gången"<<endl; 
     } 
     else good = 1; 
    } 
    cout<<"du har nu satt in" <<insattning<<"kr"<<endl; 
    return insattning; 
} 

Не ясно для меня, хотите ли вы 1 ставку в размере 100 300, или 500 или 3 ставки. Это первый,

//bet 
int get_bet() 
{ 
    int good = 0; 
    int bet; 
    std::string validbets = ""; 
    if(konto<100){ cout<<"you need more money"; return 0; } 
    while(!good) 
    { 
     cout<<"var vänlig och placera ditt bet"<<endl; 
     if(konto>=100){ validbets = "bet1=100"; } 
     if(konto>=300){ validbets += ", bet=300"; } 
     if(konto>=500){ validbets += ", bet=500"; } 
     cout<<validbets<<endl; 
     cin>>bet; 
     if(bet >= konto) { 
      cout<<"you don't have enough money"<<endl; 
      continue; 
     } 
     if (bet==500){     //Makes sure so that i have the money to bet, and if i dont have the money, i can just put in more 
      cout<<"du har så här mycket på kontot nu "<<konto<<" kr"<<endl; 
      good = 1; 
     } 
     else if(bet==300){ 
      cout<<"du har så mycket på kontot nu "<<konto<<" kr"<<endl; 
      good = 1; 
     } 
     else if(bet==100){ 
      cout<<"du har nu bettat "<<bet<<" kr"<<endl; 
      good = 1; 
     } 
     else { 
      cout<<"you must place valid bet"<<endl; 
      continue; 
     } 
    } 
    return bet; 
} 

Теперь ваша основная игра чище/легче читать.Я не знаю, что условия победы являются или выплаты, и так как ваши подсказки не английские, я не могу читать их, чтобы сказать, что делать дальше,

int main() 
{ 
    int count = 0; 
    int bet; 
    srand(time(0)); 
    for(count=0; (count < 3); count++) 
    { 
     konto = get_insattning(); 
     if (konto<100) 
     { 
      cout<<"du har inte nog med pengar, vänligen sätt in pengar"<<endl; 
      continue; 
     } 
     cout<<"och du har så här mycket i ditt konto "<<konto<<" kr"<<endl; 
     bet = get_bet(); 
     //when you bet, reduce konto by bet 
     konto = (konto - bet); 
     { 
      cout<<"slå tärningar"<<endl; 
      kast1 = rand() % 6 + 1; 
      kast2 = rand() % 6 + 1; 
      kast3 = rand() % 6 + 1; 
      kast4 = rand() % 6 + 1; 
      cout<<"Du fick"<<kast1<<endl; 
      cout<<"du fick"<<kast2<<endl; 
      cout<<"datorn fick"<<kast3<<endl; 
      cout<<"datorn fick"<<kast4<<endl; 
     } 

Вам нужно написать код для определения выиграли ли вы или проиграли, а затем добавить к конто, когда вы выиграете,

 //did you win or lose? 
     //win? add money to konto 
     //lose? you have already deducted from konto 
    } 
    system ("pause"); 
} 

Эти рекомендации помогут вам исправить вашу программу.

+0

спасибо за помощь, только одна проблема, которая возникает, цикл бесконечно – beastmode28

+0

Посмотрите на условия завершения каждого цикла. Вы можете рассмотреть (как я уже сказал), заменив приглашение ввода, разрешив запись «выйти» или «выйти». Или выйти при вводе <0? О, и вы можете проверить EOF (конец файла) на cin. – ChuckCottrill