2017-10-15 10 views
-1

C++クラスへのイントロのためのシンプルなブラックジャックゲームをプログラムしなければならない。そして、先生が私たちにデッキを作ってもらう方法は、 11または1の値にするかどうかを指定します。C++ BlackJackがAceをプログラムしようとしている

他の解決策を読むことから、最初にエースの値を11に設定し、バストすれば10を引きます(私の教授が好む方法)、ほとんどの場合、値を1に設定し、必要に応じて10を追加すると言われています。彼は私たちのカードデッキのクラスのセットアップに私たちを望んでいた方法を以下

は次のとおりです。次に

#include <iostream> 
#include <string> 
#include <vector> 
#include <ctime> 

using namespace std; 

class card 
{ 
string rank; 
string suit; 
int value; 

public: 
string get_rank() 
{ 
    return rank; 
} 
string get_suit() 
{ 
    return suit; 
} 
int get_value() 
{ 
    return value; 
} 

//Contstructor 
card(string rk = " ", string st = " ", int val = 0) 
{ 
    rank = rk; 
    suit = st; 
    value = val; 
} 


//print function 
void print() 
{ 
    cout << rank << " of " << suit << endl; 
} 
}; 

class deck 
{ 
card a_deck[52]; 
int top; 

public: 
card deal_card() 
{ 
    return a_deck[top++]; 
} 

//Deck constructor 
deck() 
{ 
    top = 0; 
    string ranks[13] = { "Ace", "King", "Queen", "Jack", "Ten", "Nine", 
"Eight", "Seven", "Six", "Five", "Four", "Three", "Two" }; 
    string suits[4] = { "Spades", "Diamonds", "Hearts", "Clubs" }; 
    int values[13] = { 11,10,10,10,10,9,8,7,6,5,4,3,2 }; 

    for (int i = 0; i < 52; i++) 
     a_deck[i] = card(ranks[i % 13], suits[i % 4], values[i % 13]); 

    srand(static_cast<size_t> (time(nullptr))); 
} 

void shuffle() 
{ 
    for (int i = 0; i < 52; i++) 
    { 
     int j = rand() % 52; 
     card temp = a_deck[i]; 
     a_deck[i] = a_deck[j]; 
     a_deck[j] = temp; 

    } 
} 
}; 

彼は私たちがベクターに手を構築するプレイヤークラスを作成していた

class player 
{ 
string name; 
vector<card>hand; 
double cash; 
double bet; 

public: 

//Constructor 
player(double the_cash) 
{ 
    cash = the_cash; 
    bet = 0; 
} 

void hit(card c) 
{ 
    hand.push_back(c); 
} 


int total_hand() 
{ 
    int count = 0; 
    for (int i = 0; i < hand.size(); i++) 
    { 
     card c = hand[i]; 
     count = count + c.get_value(); 
    } 
    return count; 

} 
}; 

方法私はエースをコーディングするつもりですか?彼はちょうど "友達"の最後のクラスを作成することをやっと行った。デッキ内で配列のAceの値を1に変更するfriend関数を作成する必要がありますか?私の頭が痛い、謝るならば、私は理にかなっていない。

+0

*エースのコーディングについてどうすればいいですか?* - if-elseステートメントを聞いたことがありますか?あなたが掲示したコードセット全体はどこにも使われていません。それはおそらく、特定のシナリオに応じて2つの値のうちの1つを持つ特別なカードをコードする方法でしょう。 – PaulMcKenzie

答えて

0

両方の方法で実装できます。

後に10を追加するには、あなたがなるためにあなたのtotal_hand()関数を変更することができます。

int total_hand 
{ 
    int count = 0; 
    int num_of_aces = 0; 
    for (int i = 0; i < hand.size(); i++) 
    { 
     card c = hand[i]; 
     if (c.get_value() == 11){ 
      num_of_aces += 1; 
      count += 1; 
     } 
     else 
      count = count + c.get_value(); 
    } 
    for (int i = 0; i < num_of_aces; i++){ 
     if (count + 10 <= 21) 
      count += 10; 
    return count; 
} 

10、後引くために(あなたの直感が示唆するように)、あなたは以下の操作を行うことができます

int total_hand 
{ 
    int count = 0; 
    int num_of_aces = 0; 
    for (int i = 0; i < hand.size(); i++) 
    { 
     card c = hand[i]; 
     if (c.get_value() == 11) 
      num_of_aces += 1; 

     count = count + c.get_value(); 
    } 

    while(count > 21 && num_of_aces--) 
     count -=10; 

    return count; 
} 
+0

「10を加える」場合は、エースを数える必要がないので、より簡単で高速にすることができます。エースが見られたかどうかにかかわらず、フラグを保持してください。合計が12未満の場合は、ループではなく1回だけ10を追加してください。 –

関連する問題