Программирование домашних заданий: установка колоды карт на С
У меня есть это задание, над которым я работаю. Я должен иметь колоду карт и распределить ее по четырем игрокам.
Каждая карта имеет свое значение (Два = 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();
}