これは、カードのデッキ クラスから n 枚のカードを配ろうとするために作成した関数です。カードが配られると、デッキから「取り除かれる」ことになっています (つまり、再度配られることはありません)。ポインターを使用して、これまでに配ったカードの量を差し引いたデッキの後ろからドローすることで、これを解決したと思いました。この関数を再度呼び出す場合は、カードが欠落しているデッキからドローする必要があります。デッキをシャッフルしていないので、このメソッドが機能すると思いました。
「dealt」は私のコードの前半で定義されており、0 から始まります。Card は、特定のスーツと値を保持するクラスです。
dealNumber 関数を 6 回呼び出し、n = 5 にした場合のハンドのサンプル出力を示します。
ST CK D3 HJ D9
HK DK SA SQ DT
HK S4 D2 C9 H5
HK H6 H7 H2 H4
HK HK SK S8 C5
HK H9 S3 D8 H8
ただし、「デッキ」は次のように並べられています。
S6 S2 S7 D7 S9 CQ D4 CA CJ SJ HQ DQ D5 HA DA C4 HT H3 CT D6 C2 S5 H8 D8 S3 H9 C7 C5 S8 SK HK C8 H4 H2 H7 H6 C3 H5 C9 D2 S4 C6 DT SQ SA DK DJ D9 HJ D3 CKST
最初の手札は正しいが、他の手札は正しくない。「ディール」はデッキ クラスに引き継がれるべきですが、どこが間違っているのでしょうか?
Hand* Deck::dealingNumber(int p){
Card* dealtCards = new Card[p];
Card* oldDeck = deck;
for (int i = 0; i<n; i++){
dealtCards[i] = deck[(51-dealt)-i];
}
dealt = dealt+n;
deck = new Card[52-dealt];
for (int i = 0; i < 51-dealt;i++){
deck[i] = oldDeck[i];
}
delete[] oldDeck;
PokerHand* hand = new PokerHand(dealtCards);
return hand;