前提・実現したいこと
カードをシャッフルし、プレイヤー4人に配ったら下記のようにアウトプットしたいです。
Player 1 Player 2 Player 3 Player 4 -------- -------- -------- -------- Spade 4 Spade 2 Spade 9 Spade Ace Heart 2 Spade 5 Spade 10 Spade 3 Heart 8 Spade 7 Spade Queen Spade 6 Heart King Spade Jack Heart 5 Spade 8
Diamond 2 Heart Ace Heart 6 Spade King
Diamond 3 Heart 3 Diamond 4 Heart 4
Diamond 9 Heart 7 Diamond 7 Heart 9
Diamond Queen Heart 10 Diamond 10 Heart Jack
Diamond King Heart Queen Club 4 Diamond Ace
Club 2 Diamond 5 Club 6 Diamond 8
Club 5 Diamond 6 Club 7 Diamond Jack
Club 9 Club 3 Club Jack Club Ace
Club 10 Club King Club Queen Club 8
しかし、下記のように、Spade 0しかアウトプットされません。私のコードのどこがおかしいか教えて頂けますでしょうか?
発生している問題・エラーメッセージ
Enter 1 to shuffle, 2 to deal, or 3 to end: 1 Deck shuffled. 2 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 1 Deck shuffled. 2 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 Spade 0 3 Bye
該当のソースコード
C++
1#include <string> 2#include <stdexcept> 3#include <iostream> 4#include <iomanip> 5#include <algorithm> 6#include <stdio.h> 7#include <time.h> 8 9using namespace std; 10 11enum Suit { 12 Clubs = 1, 13 Diamonds = 2, 14 Hearts = 3, 15 Spades = 4 16}; 17 18class Card { 19 20private: 21 int number; 22 Suit suit; 23 string description; 24public: 25 26 Card() { 27 number = 0; 28 description = ""; 29 } 30 31 Suit getCardSuit() { 32 return suit; 33 } 34 35 void setCardSuit(Suit m_suit) { 36 suit = m_suit; 37 } 38 39 int getCardNumber() { 40 return number; 41 } 42 43 void setCardNumber(int m_num) { 44 45 number = m_num; 46 } 47 48 string getCardDescription() { 49 50 return description; 51 } 52 53 void setDescription(string m_description) { 54 55 description = m_description; 56 } 57 58 bool operator <(const Card& card2) { 59 60 if (suit < card2.suit) 61 62 return true; 63 64 else if (suit > card2.suit) 65 66 return false; 67 68 else { 69 70 if (number == 1) 71 72 return false; 73 74 else if (card2.number == 1) 75 76 return true; 77 78 else if (card2.number < number) 79 80 return true; 81 } 82 83 return false; 84 } 85}; 86 87 88const int SIZE = 52; 89Card deck[52]; 90 91class Deck { 92 Card decks[SIZE]; 93public: 94 95 void initialize() { 96 97 98 string cardDesc; 99 100 char name[10]; 101 102 int setFlag; 103 104 for (int i = 1; i <= SIZE; i++) { 105 106 setFlag = 0; 107 108 if (i == 1 || i == 14 || i == 27 || i == 40) { 109 cardDesc = "Ace"; 110 111 setFlag = 1; 112 113 } else if (i == 11 || i == 24 || i == 37 || i == 50) { 114 cardDesc = "Jack"; 115 116 setFlag = 1; 117 118 } else if (i == 12 || i == 25 || i == 38 || i == 51) { 119 cardDesc = "Queen"; 120 121 setFlag = 1; 122 123 } else if (i == 13 || i == 26 || i == 39 || i == 52) { 124 cardDesc = "King"; 125 126 setFlag = 1; 127 } 128 129 if(i <= 13) { 130 decks[i - 1].setCardSuit(Spades); 131 132 decks[i - 1].setCardNumber(i); 133 134 if(setFlag == 0) { 135 136 (decks[i - 1].getCardNumber(), name, 10); 137 138 cardDesc = ((string)name); 139 } 140 141 cardDesc = " of Spades"; 142 143 decks[i - 1].setDescription(cardDesc); 144 145 } else if (i > 13 && i <= 26) { 146 147 decks[i - 1].setCardSuit(Hearts); 148 149 decks[i - 1].setCardNumber(i - 13); 150 151 if(setFlag == 0) { 152 153 (decks[i - 1].getCardNumber(), name, 10); 154 155 cardDesc = ((string)name); 156 } 157 158 cardDesc = " of Hearts"; 159 160 decks[i - 1].setDescription(cardDesc); 161 162 } else if(i > 26 && i <= 39) { 163 164 decks[i - 1].setCardSuit(Diamonds); 165 166 decks[i - 1].setCardNumber(i - 26); 167 168 if(setFlag == 0) { 169 170 (decks[i - 1].getCardNumber(), name, 10); 171 172 cardDesc = ((string)name); 173 174 } 175 176 cardDesc = " of Diamonds"; 177 178 decks[i - 1].setDescription(cardDesc); 179 180 } else { 181 182 decks[i - 1].setCardSuit(Clubs); 183 184 decks[i - 1].setCardNumber(i - 39); 185 186 if(setFlag == 0) { 187 188 (decks[i - 1].getCardNumber(), name, 10); 189 190 cardDesc = ((string)name); 191 } 192 193 cardDesc = (" of Clubs"); 194 195 decks[i - 1].setDescription(cardDesc); 196 } 197 } 198 } 199 200 void shuffle() { 201 202 Card card; 203 204 srand((unsigned int)time(NULL)); 205 206 for (int i = 0; i < SIZE ;i++) 207 { 208 int r = i + (rand() % (52 -i)); 209 210 card = decks[i]; 211 decks[i] = decks[r]; 212 decks[r] = card; 213 214 } 215 } 216}; 217 218 219class Player { 220private: 221 Card hand[13][4]; 222 string name_; 223 224public: 225 226 void deal() { 227 228 for ( int i = 0; i < 13; ++i ) { 229 for ( int j = 0; j < 4; ++j ) { 230 hand[i][j] = deck[j + 4 * i]; 231 } 232 } 233 234 sort(hand); 235 236 display(hand); 237 } 238 239 240 void sort(Card hand[13][4]) { 241 Card card; 242 243 int j; 244 245 for (int itr = 0; itr < 4; itr++) 246 { 247 for(int i = 1 ; i < 13 ; i++) 248 { 249 card = hand[i][itr]; 250 251 j = i - 1; 252 253 while(j >= 0 && hand[j][itr] < card) 254 { 255 hand[j + 1][itr] = hand[j][itr]; 256 257 j--; 258 } 259 hand[j + 1][itr] = card; 260 } 261 } 262 } 263 264 void display(Card hand[13][4]) { 265 266 Suit suit; 267 268 int number; 269 270 int numPlayers = 4; 271 272 for (int n = 0; n < 13; ++n) { 273 for (int i = 0; i < numPlayers; ++i) { 274 275 suit = hand[n][i].getCardSuit(); 276 277 number = hand[n][i].getCardNumber(); 278 279 if (suit == 1) 280 cout << setw(10) << "Club"; 281 282 else if (suit == 2) 283 cout << setw(10) << "Diamond"; 284 285 else if (suit == 3) 286 cout << setw(10) << "Heart"; 287 288 else 289 cout << setw(10) << "Spade"; 290 291 if (number == 1) 292 cout << setw(6) << "Ace"; 293 294 else if(number == 11) 295 cout << setw(6) << "Jack"; 296 297 else if(number == 12) 298 cout << setw(6) << "Queen"; 299 300 else if(number == 13) 301 cout << setw(6) << "King"; 302 303 else 304 cout << setw(6) << number; 305 306 } 307 cout << endl; 308 } 309 cout << endl; 310 } 311}; 312 313 314int main() { 315 316 Deck decks; 317 318 decks.initialize(); 319 320 Player hand; 321 322 int enter; 323 324 cout << "Enter 1 to shuffle, 2 to deal, or 3 to end: " << endl; 325 326 do { 327 cin >> enter; 328 329 330 switch (enter) { 331 case 1: 332 decks.shuffle(); 333 cout << "Deck shuffled." << endl; 334 break; 335 336 case 2: 337 hand.deal(); 338 break; 339 340 case 3: 341 cout << "Bye" << endl; 342 break; 343 344 default: 345 break; 346 } 347 348 } while (enter != 3); 349} 350
回答4件
あなたの回答
tips
プレビュー