Перезапустите программу на C ++ на основе пользовательского ввода или условий - PullRequest
0 голосов
/ 12 апреля 2019

Я изучаю c ++ и в качестве упражнения с массивами и пользовательским вводом пытаюсь написать простое покерное приложение.Поскольку я в начале этого курса, все, что я знаю о языке c ++, это то, что выполнение кода требуется для функции main().Я написал несколько строк кода, который является основой окончательного приложения, пока он работает нормально.Я хочу реализовать цикл для повторного запуска приложения на основе пользовательского ввода и при условии, что для объема приложения будет количество переменной рыбы после каждого выполнения.Как мне этого добиться?Другой вопрос касается использования случайных элементов из массива.Есть ли хороший справочник, где я могу узнать, как это сделать?

Это мой код:

#include <iostream>
using namespace std;

int main(){
    string name;
    int bet;

    int fish = 100;
    char seed[4][10] = {"hearts","clubs","diamonds","spades"};
    int cards[9] = {2,3,4,5,6,7,8,9,10};

    std::cout << "Welcome in PokerBash! Please enter your name:" <<std::endl;
    std::cin >> name;

    std::cout << "Your name is " << name <<std::endl;

    std::cout << "You have a credit of:" << fish <<std::endl;
    std::cout << "Please enter your bet:" <<std::endl;
    std::cin >> bet;

    std::cout << "Your cards are " << seed[2] << " " << cards[3] << " " << seed[1] << " " << cards[7] <<std::endl;

    std::cout << "Your credits after this bet:" << fish - bet <<std::endl;

    return 0;
}

Ответы [ 2 ]

4 голосов
/ 12 апреля 2019

Вы можете сделать цикл, который останавливается, если пользователь хочет, или fish меньше 0, создав цикл while, который зависит от некоторого логического playing, который изначально true.Поэтому, если происходит одно из двух событий, установите playing равным false и цикл остановится:

int main() {
    //variables

    bool playing = true;
    while (playing) {
        int fish = 100;

        //poker game

        if (fish < 0) { //no money
            playing = false;
        }
        else {
            char input;
            std::cout << "would you like to play again? (y/n): ";

            std::cin >> input;
            if (input != 'y') {
                playing = false;
            }
        }
    }
}

, как вы можете видеть, это повторяется, пока я не введу что-то, что не 'y':

would you like to play again? (y/n): y
would you like to play again? (y/n): y
would you like to play again? (y/n): n

чтобы выбрать случайный элемент из массива, вы бы использовали утилиты из <random> как их std::mersenne_twister_engine.Чтобы получить случайный элемент из массива, вам просто нужно создать случайное число и использовать его в качестве индекса массивов:

#include <iostream>
#include <random>

int main() {
    std::random_device rd;
    std::mt19937_64 engine(rd());
    std::uniform_int_distribution<int> distribution(0, 8);


    int cards[9] = { 2,3,4,5,6,7,8,9,10 };
    while (true) {
        std::cout << cards[distribution(engine)] << '\n';
    }
}

отсюда некоторые важные вещи:

std::random_device rd;
std::mt19937_64 engine(rd());

isсделано только один раз (никогда не в цикле).Это для инициализации вашего псевдослучайного генератора engine.

std::uniform_int_distribution<int> distribution(0, 8);

добавляет распределение.Обратите внимание, что поскольку у вашего int cards[9] есть 9 элементов, диапазон должен быть от 0 до 8, так как массивы начинаются с 0 и заканчиваются их размером - 1, как вы, возможно, уже знаете.:)

Запустив эту программу, вы можете увидеть, как она случайным образом распечатывает номера карт от 2 до 10:

2
10
7
9
2
4
9
10
8
9
8
6
8
2
10

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


Вы должны заметить, что вам не следует use namespace std - вы можете прочитать здесь почему,


Также вместо:

char seed[4][10] = { "hearts","clubs","diamonds","spades" };

используйте:

std::string seed[4] = { "hearts","clubs","diamonds","spades" };

Для использования std::string включите <string>header.


Вы написали std::cin >> name;, но это не работает для строк с пробелами, как показано здесь:

Welcome in PokerBash! Please enter your name:
Stack Danny
Your name is Stack

Чтобы получить полное имя, используйте

std::getline(std::cin, name);
1 голос
/ 12 апреля 2019

Попробуйте,

#include <iostream>
using namespace std;

int main()
{
    string name;
    int bet;
    int fish = 100;

    char seed[4][10] = {"hearts", "clubs", "diamonds", "spades"};
    int cards[9] = {2, 3, 4, 5, 6, 7, 8, 9, 10};

    while (1)
    {

        std::cout << "Welcome in PokerBash! Please enter your name ( Enter q to quit ):" << std::endl;
        std::cin >> name;

        if(name == "q")
            exit(0);

        std::cout << "Your name is " << name << std::endl;

        std::cout << "You have a credit of:" << fish << std::endl;
        std::cout << "Please enter your bet:" << std::endl;
        std::cin >> bet;

        std::cout << "Your cards are " << seed[2] << " " << cards[3] << " " << seed[1] << " " << cards[7] << std::endl;

        std::cout << "Your credits after this bet:" << fish - bet << std::endl;    
    }

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...