2011-11-22 179 views
0

我必須創建一個與7名玩家和經銷商一起玩的BlackJack程序。我必須使用開關或if語句作爲套裝類型,並且此語句只能使用一次。大酒杯計劃

我所知道的是不工作是隨機播放()函數:

當我運行沒有調試它會給我和輸出像(黑桃A)兩次 ,但我把一個數組所以它不會複製一張卡。

但是,當我調試它並進入每行代碼輸出是會給我兩個非重複卡。

我也有麻煩計算玩家總數的要求「寫一個函數來處理兩張牌給每個玩家。」,如何將兩張牌添加到沒有確定大小的數組?

此Web albulm包含我的項目的全部要求:

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

'如何將兩張牌添加到沒有確定大小的數組?'它可能不是明確的,但如果您不想使用可調整大小的容器(21/2),則它的大小最大。拉斯維加斯/大西洋城在鞋中使用多個甲板。經銷商通常不會超過16點。一些規則允許在軟17(A + 6) –

回答

1

你的洗牌代碼不跟蹤的是什麼牌已經處理。每次調用它時,它都會重新初始化dup陣列,以便可以多次處理同一張卡片。

作爲一個建議,創建兩個子例程。每手洗牌一次。第二個交易從洗牌甲板。

0

你的隨機()循環做這樣的事情:

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

考慮當迭代X這個循環產生卡X + N會發生什麼。當你迭代x + n時,你會覆蓋dup [x + n]。

第一行任意將當前索引設置爲0(false)。其餘的Shuffle函數根據隨機'卡'索引dup []數組。你在dup []數組中設置一個隨機索引爲'1'(真),然後在後面的迭代中覆蓋它,使得dup []數組不正確。

從技術上講,不應該將數組項初始化爲0.即應該自動發生。但是,由於各種原因,無論如何,初始化整個陣列通常被認爲是好的做法。因此,做一個快速循環:

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

所以,快速回答是刪除for循環中的dup [] = 0行。