Колода карт неправильный вывод - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь создать колоду карт для игры, которую я делаю. Почему я получаю неправильные результаты здесь? Код должен выводить каждую карту в колоде из 52 карт. Я новичок в структурах, но думаю, что до сих пор хорошо справился с этим кодом. Да, я знаю, что есть лучшие способы сделать то же самое, но я новичок, поэтому не судите меня.

int main()
{
    struct Card 
    {
        int value;
        char suit;
    };

    Card cards[52]; //Declaring each unique card
    for (int i = 0; i < 52; i++)
    {
        cards[i].value = i % 13; // 13 values
        if (cards[i].value == 1) {
            cards[i].value = 1;
        }
        if (cards[i].value == 2) {
            cards[i].value = 2;
        }
        if (cards[i].value == 3) {
            cards[i].value = 3;
        }
        if (cards[i].value == 4) {
            cards[i].value = 4;
        }
        if (cards[i].value == 5) {
            cards[i].value = 5;
        }
        if (cards[i].value == 6) {
            cards[i].value = 6;
        }
        if (cards[i].value == 7) {
            cards[i].value = 7;
        }
        if (cards[i].value == 8) {
            cards[i].value = 8;
        }
        if (cards[i].value == 9) {
            cards[i].value = 9;
        }
        if (cards[i].value == 10) {
            cards[i].value = 10;
        }
        if (cards[i].value == 11) {
            cards[i].value = 10;

        }
        if (cards[i].value == 12) {
            cards[i].value = 10;
        }
        if (cards[i].value == 13) {
            cards[i].value = 10;
        }


        cards[i].suit = i / 13;// 4 suits
        if (cards[i].suit == 1) {
            cards[i].suit = 'D';
        }
        if (cards[i].suit == 2) {
            cards[i].suit = 'H';
        }
        if (cards[i].suit == 3) {
            cards[i].suit = 'C';
        }
        if (cards[i].suit == 4) {
            cards[i].suit = 'S';
        }
    }
    for (int count = 0; count < 52; count++) {
        cout << cards[count].value;
        cout << cards[count].suit;
        cout << endl;
    }
    return 0;
}

Редактировать:

int main()
{
    struct Card //struct is a way to store many values on 1 array for example
    {
        int value;
        char suit;
    };

    Card cards[52]; //Declaring each unique card
    for (int i = 0; i < 52; i++)
    {
        cards[i].value = i % 13; // 13 values
        if (cards[i].value == 0) {
            cards[i].value = 1;
        }
        else if (cards[i].value == 1) {
            cards[i].value = 2;
        }
        else if (cards[i].value == 2) {
            cards[i].value = 3;
        }
        else if (cards[i].value == 3) {
            cards[i].value = 4;
        }
        else if (cards[i].value == 4) {
            cards[i].value = 5;
        }
        else if (cards[i].value == 5) {
            cards[i].value = 6;
        }
        else if (cards[i].value == 6) {
            cards[i].value = 7;
        }
        else if (cards[i].value == 7) {
            cards[i].value = 8;
        }
        else if (cards[i].value == 8) {
            cards[i].value = 9;
        }
        else if (cards[i].value == 9) {
            cards[i].value = 10;
        }
        else if (cards[i].value == 10) {
            cards[i].value = 10;

        }
        else if (cards[i].value == 11) {
            cards[i].value = 10;
        }
        else if (cards[i].value == 12) {
            cards[i].value = 10;
        }


        cards[i].suit = i / 13;// 4 suits
        if (cards[i].suit == 0) {
            cards[i].suit = 'D';
        }
        else if (cards[i].suit == 1) {
            cards[i].suit = 'H';
        }
        else if (cards[i].suit == 2) {
            cards[i].suit = 'C';
        }
        else if (cards[i].suit == 3) {
            cards[i].suit = 'S';
        }
    }
    for (int count = 0; count < 52; count++) {
        cout << cards[count].value;
        cout << cards[count].suit;
        cout << endl;
    }
    return 0;
}

Ответы [ 2 ]

5 голосов
/ 27 апреля 2020

Проблема в том, что

cards[i].suit = i / 13;

будет выдавать значение от 0 до 3, а не от 1 до 4, как предполагает ваш код.

И такая же проблема существует с

cards[i].value = i % 13;

, который дает значение от 0 до 12, а не от 1 до 13.

ОК, последняя проблема

    if (cards[i].value == 0) {
        cards[i].value = 1;
    }
    if (cards[i].value == 1) {
        cards[i].value = 2;
    }
    if ... etc etc

должна быть

    if (cards[i].value == 0) {
        cards[i].value = 1;
    }
    else if (cards[i].value == 1) {
        cards[i].value = 2;
    }
    else if ... etc etc

В вашей версии первый оператор if (если true) установит значение 1, но затем следующий оператор if будет true и установит значение 2 и так далее. Использование else if обеспечивает выполнение только одного оператора if.

2 голосов
/ 27 апреля 2020
   if (cards[i].value == 11) {
       cards[i].value = 10;

   }
   if (cards[i].value == 12) {
       cards[i].value = 10;
   }
   if (cards[i].value == 13) {
       cards[i].value = 10;
   }

Я полагаю, что они должны представлять Q, J и K? Хотя это может быть опечатка.

Кроме того, I / 13 всегда будет округляться. Это должно решить костюмы:

  cards[i].suit = i / 13;// 4 suits
   if (cards[i].suit == 0) {
       cards[i].suit = 'D';
   }
   if (cards[i].suit == 1) {
       cards[i].suit = 'H';
   }
   if (cards[i].suit == 2) {
       cards[i].suit = 'C';
   }
   if (cards[i].suit == 3) {
       cards[i].suit = 'S';
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...