Итак, я пытаюсь написать игру Блэкджека на C только ради удовольствия (что-то, чего я никогда не пробовал раньше). Я пропустил первые несколько шагов, например, как настроить колоду и как раздавать карты дилеру и игроку. Однако отображаемый вывод не показывает то, что я тоже хочу (показывая, что у дилера только одна карта, когда она должна показывать 2). Вот скриншот:Отсутствует выход из массива int of BlackBack of BlackBerry
я запускаю это на мой телефон (проще получить скриншот), но я с тех же результатов на моем компьютере с помощью Code :: Blocks. В любом случае, у меня есть две функции для обработки колоды и отображения текущих карт. Работа с картами, которые я обрабатываю в функции main(), используя циклы. Я знаю, что функция makeDeck() работает правильно, поэтому я предполагаю, что моя ошибка находится где-то в другом месте. Посмотрите на мой код и дайте мне знать, что происходит (также, любые предложения по улучшению будут оценены):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*Function Prototypes*/
int* makeDeck();
/*Usage - returns an int* to be used for the deck */
void showHands(int[], int[]);
/*Usage - pass dealerHand[], then playerHand[] */
int main() {
srand(time(0)); //Make a new rand() seed value
int x, count = 0, choice = 1;
int* cards = makeDeck();
int dealerCards[12]; //cards in hand will never exceed 11
int playerCards[12]; //4 A's, 4 2's, 3 3's
/*Loop to run the game. One iteration per hand */
while(choice != 0) {
for(x = 0; x < 12; x++) {
dealerCards[x] = 0;
playerCards[x] = 0;
}
//Deal 2 cards to dealer and player
for(x = 0; x < 2; x++) {
dealerCards[x] = cards[count];
count++;
}
for(x = 0; x < 2; x++) {
playerCards[x] = cards[count];
count++;
}
showHands(dealerCards, playerCards);
/*DEBUGGING */
printf("\nEnter 0 to exit loop: ");
scanf("%i", &choice);
}
return 0;
}
//Declare placeholder variable "bunchOfCards" globally
int bunchOfCards[52];
int* makeDeck(){
int* deck = bunchOfCards;
int x = 0,
y = 0,
card = 0;
for(x = 0; x < 52; x++) { //set all cards to 0
deck[x] = 0;
}
for(x = 0; x < 4; x++) { //set up deck
for(y = 1; y < 14; y++) {
card = (rand() % 52);
//check if deck position is already used
while(deck[card] != 0) {
card = (rand() % 52);
}
deck[card] = y;
}
}
/* DEBUGGING
for(x = 0; x < 52; x++) {
printf("%i\t", deck[x]);
} */
return deck;
}
void showHands(int* dealer, int* player) {
int x; char card[3] = { '\0', '\0', '\0' };
puts("The hands are: \n\nDealer:");
//Display dealer cards
for(x = 0; x < 12; x++) {
if(dealer[x] != 0) {
if((dealer[x] < 10) && (dealer[x] != 1)) {
card[0] = (char)(((int)'0') + dealer[x]);
card[1] = '\0';
} else if(dealer[x] == 1) {
card[0] = 'A';
card[1] = '\0';
} else if(dealer[x] == 10) {
card[0] = '1';
card[1] = '0';
} else if(dealer[x] == 11) {
card[0] = 'J';
card[1] = '\0';
} else if(dealer[x] == 12) {
card[0] = 'Q';
card[1] = '\0';
} else if(dealer[x] == 13) {
card[0] = 'K';
card[1] = '\0';
}
printf("\t%s", card);
}
//Display player cards
puts("\nPlayer: ");
for(x = 0; x < 12; x++) {
if(player[x] != 0) {
if((player[x] < 10) && (player[x] != 1)) {
card[0] = (char)(((int)'0') + player[x]);
card[1] = '\0';
} else if(player[x] == 1) {
card[0] = 'A';
card[1] = '\0';
} else if(player[x] == 10) {
card[0] = '1';
card[1] = '0';
} else if(player[x] == 11) {
card[0] = 'J';
card[1] = '\0';
} else if(player[x] == 12) {
card[0] = 'Q';
card[1] = '\0';
} else if(player[x] == 13) {
card[0] = 'K';
card[1] = '\0';
}
printf("\t%s", card);
}
}
}
}
Удивительно для меня, что вам легче запустить код C на мобильном телефоне и получить скриншот, чем делать это на обычном настольном компьютере. – unwind
@unwind Просто ... ничего себе. – fuz
Боковое примечание: Ваша сделка неверна. у него должны быть игроки, а затем дилер, все в одном цикле, псевдо: 'x = 0; x <2; ++ x {игрок получает карту, дилер получает карту}' У вас есть каждый игрок (включая дилера) полностью отдайте верхнюю часть колоды перед следующим игроком. – WhozCraig