Программирование домашних заданий: установка колоды карт на С

У меня есть это задание, над которым я работаю. Я должен иметь колоду карт и распределить ее по четырем игрокам.

Каждая карта имеет свое значение (Два = 1, Три =2, ..., Король =12, Туз =13), и масть также имеет свое значение (Клубы = 1, Алмазы = 2, Сердца = 3, Пики = 4)

Я должен заставить дилера (Игрока P) выиграть 75% времени, меняя карты или что-то в этом роде. Программа, которую я написал, эмулирует карты, имея один массив от 0 до 51. Программа запускается, но командная строка говорит: "Нажмите любую клавишу, чтобы продолжить..."

Может кто-нибудь, пожалуйста, посмотрите на мой код и скажите, есть ли что-то, что может быть причиной этого? Заранее спасибо.

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <algorithm>

#define deck 52
#define CARDS 52
#define SUITS 4
#define FACES 13

int Deck[deck];
void distributeCards(int i);
void swap(int i, int j);
void shuffle(unsigned int wDeck[][FACES]);

int main(void)
{

    int Deck[deck] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51 };

}

void swap(int i, int j)
{
    int temp = Deck[i];
    Deck[j] = Deck[i];
    Deck[i] = temp;
}
int max(int i, int j, int k, int l)
{
    int tempMax = Deck[i];
    int maxIndex = i;

    if (Deck[j] > tempMax)
    {
        tempMax = Deck[j];
        maxIndex = j;
    }
    if (Deck[k] > tempMax)
    {
        tempMax = Deck[k];
        maxIndex = k;
    }
    if (Deck[l] > tempMax)
    {
        tempMax = Deck[l];
        maxIndex = l;
    }
    return maxIndex;
}

int determineFace(int i)
{
    if (i % 4 == 0)
        return 3; // 3 = Hearts
    if (i % 4 == 1)
        return 2; // 2 = Diamonds
    if (i % 4 == 2)
        return 4; // 4 = Spades
    else
        return 1; // 1 = Clubs
}

int determineValue(int i)
{
    if (i / 4 == 0) return 1; // 1 = Two
    if (i / 4 == 1) return 2; // 2 = Three
    if (i / 4 == 2) return 3; // 3 = Four
    if (i / 4 == 3) return 4; // 4 = Five
    if (i / 4 == 4) return 5; // 5 = Six
    if (i / 4 == 5) return 6; // 6 = Seven
    if (i / 4 == 6) return 7; // 7 = Eight
    if (i / 4 == 7) return 8; // 8 = Nine 
    if (i / 4 == 8) return 9; // 9 = Ten
    if (i / 4 == 9) return 10; // 10 = Jack
    if (i / 4 == 10) return 11; // 11 = Queen
    if (i / 4 == 11) return 12; // 12 = King
    else return 13; // 13 = Ace
}

void distributeCards()
{
    int house[13]; // house = Player P
    int p1[13]; // p1 = Player Q
    int p2[13]; // p2 = Player R
    int p3[13]; // p3 = Player S



    //picking house's cards
    printf("\n\nPlayer P's Cards: \n");
    for (int i = 0; i < 13; i++)
    {
        int rand1 = (rand() % (51 - i)) + i;
        int rand2 = (rand() % (51 - i)) + i;
        int rand3 = (rand() % (51 - i)) + i;
        int rand4 = (rand() % (51 - i)) + i;
        int rand = max(rand1, rand2, rand3, rand4);
        house[i] = Deck[rand];
        swap(rand, i);
    } 

    //picking p1's cards
    printf("\n\nPlayer Q's Cards: \n");
    for (int i = 13; i < 26; i++)
    {
        int rand5 = (rand() % (51 - i)) + i;
        p1[i - 13] = Deck[rand()];
        swap(rand(), i);
    }
    //picking p2's cards
    printf("\n\nPlayer R's Cards: \n");
    for (int i = 26; i < 39; i++)
    {
        int rand6 = (rand() % (51 - i)) + i;
        p2[i - 13] = Deck[rand()];
        swap(rand(), i);
    }
    //picking p3's cards
    printf("\n\nPlayer S's Cards: \n");
    for (int i = 39; i < 51; i++)
    {
        int rand7 = (rand() % (51 - i)) + i;
        p3[i - 13] = Deck[rand()];
        swap(rand(), i);
    }
}

1 ответ

Поведение в порядке. Вы написали эту основную функцию:

int main(void)
{    
    int Deck[deck] = {....};
}

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

РЕДАКТИРОВАТЬ:

Я думаю, что вам нужно что-то вроде:

int main(void)
{
  int Deck_temp[deck] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
                     17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
                     31, 32, 33, 34, 35,  36, 37, 38, 39, 40, 41, 42,
                     43, 44, 45, 46, 47, 48, 49, 50, 51 };

   memcpy(Deck, Deck_temp, 52*sizeof(int));
   distributeCards();
}
Другие вопросы по тегам