2013-02-08 1 views
0

Итак, я пытаюсь написать игру Блэкджека на C только ради удовольствия (что-то, чего я никогда не пробовал раньше). Я пропустил первые несколько шагов, например, как настроить колоду и как раздавать карты дилеру и игроку. Однако отображаемый вывод не показывает то, что я тоже хочу (показывая, что у дилера только одна карта, когда она должна показывать 2). Вот скриншот:Отсутствует выход из массива int of BlackBack of BlackBerry

Yes, this was run on my phone, but I have the same results on my computer too.

я запускаю это на мой телефон (проще получить скриншот), но я с тех же результатов на моем компьютере с помощью 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); 
      } 
     } 
    } 
} 
+1

Удивительно для меня, что вам легче запустить код C на мобильном телефоне и получить скриншот, чем делать это на обычном настольном компьютере. – unwind

+0

@unwind Просто ... ничего себе. – fuz

+0

Боковое примечание: Ваша сделка неверна. у него должны быть игроки, а затем дилер, все в одном цикле, псевдо: 'x = 0; x <2; ++ x {игрок получает карту, дилер получает карту}' У вас есть каждый игрок (включая дилера) полностью отдайте верхнюю часть колоды перед следующим игроком. – WhozCraig

ответ

2

Ваш обмен на петли, по всей видимости, включают друг друга.

for(x = 0; x < 12; x++) { 
    if(dealer[x] != 0) { 
    ... 
    } 
    puts("\nPlayer: "); 
    for(x = 0; x < 12; x++) { 
    ... 
    } 
} 

Первым для контура начинается с й = 0, второй циклом продолжается вплоть до й = 12, то первого для цикла останавливается перед выполнением второго раза, потому что он достиг условие завершения.

+0

Это как раз то, что было. Спасибо за глаза орла! – Nyxm