2011-11-22 3 views
0

Je dois créer un programme BlackJack qui joue avec 7 joueurs et un Dealer. Je dois utiliser une instruction switch et/et if pour le type de combinaison et cette instruction ne peut être utilisée qu'une seule fois.Programme de Blackjack

Ce que je sais ne fonctionne pas est la fonction de lecture aléatoire():

Quand je cours sans débogage, il me donnera et de sortie comme (A de pique) deux fois mais je mets un tableau de sorte qu'il ne reproduirait pas une carte. Cependant, quand je le débogue et que j'entre dans chaque ligne de code, la sortie me donne deux cartes non dupliquées. J'ai également des difficultés à calculer les totaux des joueurs. «Écris une fonction pour distribuer deux cartes à chaque joueur.», Comment ajouter les deux cartes à un tableau qui n'a pas de taille définie?

Cette albulm web contient des exigences complètes de mon projet:

https://picasaweb.google.com/zaidalmas/November172011?authuser=0&authkey=Gv1sRgCNXrltTFwZnYNQ&feat=directlink

#include <iostream> 
#include <iomanip> 
#include <ctime> 
#include <windows.h> 
#include <stdio.h> 
using namespace std; 

void Header(); 
void Shuffle(int&, char&); 
void Dealer(); 
void Deal(); 
void Another_Card(); 
void Fin_Dealer(); 
void WLT(); 

void gotoxy(int h, int w) 
{ 
HANDLE hConsole = GetStdHandle (STD_OUTPUT_HANDLE); 

if (INVALID_HANDLE_VALUE != hConsole) 
    { 
    COORD pos = {h, w}; 
    SetConsoleCursorPosition (hConsole, pos); 
    } 
return; 
} 

int main() 
{ 
Header(); 
Dealer(); 
Deal(); 
WLT(); 
gotoxy(0,19); 
return 0; 
} 

void Header() 
{ 
cout <<"\t\t\tWelcome to BlackJack!\n\n"; 
gotoxy(3,3); 
cout <<"Dealer Player1 Player2 Player3 Player4 Player5 Player6 Player7 "<<endl; 
return; 
} 
void Shuffle(int& num, char& suit) 
{ 
int cards[52], dup[52]; 
int card; 
srand(time(NULL)); 

for(int i = 0; i <52; i++) 
    dup[i] = 0; 

    card = rand() % 52; 

    while(dup[card]) 
     card = rand() % 52; 

    dup[card] = 1; 
    suit = char(card/13 + 3); //display suit 
    num = card % 13; 

    switch(num) 
     { 
     case 0: cout<<setw(6)<<right<<" A"<<suit; 
      break; 
     case 1: 
     case 2: 
     case 3: 
     case 4: 
     case 5: 
     case 6: 
     case 7: 
     case 8: 
     case 9: cout<<setw(6)<<right<<" "<<num + 1<<suit; 
      break; 
     case 10: cout<<setw(6)<<right<<" J"<<suit; 
      break; 
     case 11:cout<<setw(6)<<right<<" Q"<<suit; 
      break; 
     case 12:cout<<setw(6)<<right<<" K"<<suit; 
      break; 
     default:cout<<setw(6)<<right<<"Error"; 
      break; 
     } 
return; 
} 
void Dealer() 
{ 
int i = 0; 
int num = 0; 
char suit; 
for(i = 4;i <6; i++) 
{ 
    gotoxy(0,i); 
    Shuffle(num, suit); 
} 
return; 
} 
void Deal() 
{ 
int i = 0; 
int num = 0; 
int row = 4; 
char suit; 

for(i = 1; i < 8; i++) 
{ 
    gotoxy(i*8, row); 
    Shuffle(num,suit); 
} 
if(playertotal <=20) 
{ 
    Another_Card() 
} 
return; 
} 
void Another_Card() 
{ 
return; 
} 
void Fin_Dealer() 
{ 
return; 
} 
void WLT() 
{ 
return; 
} 
+0

'Comment ajouter les deux cartes à un tableau qui n'a pas de taille définie?' Il peut ne pas être défini mais il a une taille maximale si vous ne voulez pas utiliser les conteneurs qui peuvent être redimensionnés (21/2). Vegas/Atlantic City utilise plus d'un deck dans la chaussure. Le concessionnaire ne frappe généralement pas au dessus de 16. Certaines règles permettent de frapper sur un soft 17 (A + 6) –

Répondre

1

Votre code de lecture aléatoire ne suit pas la trace de ce que les cartes ont déjà été traitées. Chaque fois que vous l'appelez, il réinitialise le tableau de dup, ce qui permet de traiter la même carte plusieurs fois. À titre de suggestion, créez deux sous-programmes. On mélange un jeu de cartes une fois pour chaque main. La deuxième traite de ce jeu mélangé.

0

Votre boucle aléatoire() fait quelque chose comme ceci:

dup[i] = 0; 
... 
/* Generate card */ 
... 
dup[card] = 1; 

Tenir compte ce qui se passe lorsque l'itération x de cette boucle génère carte x + n. Quand vous arrivez à l'itération x + n, vous écrasez dup [x + n].

La première ligne définit arbitrairement l'index actuel sur 0 (faux). Le reste de votre fonction Shuffle indexe le tableau dup [] en fonction de la 'carte' aléatoire. Vous définissez un index aléatoire dans votre tableau dup [] sur '1' (true), puis vous l'écrasez potentiellement lors d'une itération ultérieure, ce qui rend le tableau dup [] incorrect.

Techniquement, il ne devrait pas être nécessaire d'initialiser les éléments du tableau à 0. Que devrait se produire automatiquement. Mais, pour diverses raisons, il est généralement considéré comme une bonne pratique d'initialiser l'ensemble du tableau de toute façon. Alors, faites une boucle rapide:

for(int i = 0; 52 > i; ++i) 
    dup[i] = 0; 

Donc, la réponse rapide est de supprimer le dup [] = 0 ligne dans la boucle.

Questions connexes