Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE PinDetect mbed
main.cpp
00001 #include <vector> 00002 #include <string> 00003 #include <cstdlib> 00004 #include <iostream> 00005 #include <iomanip> 00006 #include "mbed.h" 00007 #include "uLCD_4DGL.h" 00008 #include "Hand.h" 00009 #include "PinDetect.h" 00010 using namespace std; 00011 //mbed declarations 00012 Serial pc(USBTX, USBRX); 00013 uLCD_4DGL lcd(p28, p27, p30); 00014 DigitalIn pb1(p12); 00015 DigitalIn pb2(p15); 00016 DigitalIn pb3(p16); 00017 DigitalIn pb4(p17); 00018 DigitalIn pb5(p19); 00019 DigitalIn pb6(p20); 00020 DigitalIn pb7(p21); 00021 DigitalIn pb8(p23); 00022 //draw player hand 00023 void drawPlayerHand() 00024 { 00025 lcd.locate(lcd.max_col/4,0); 00026 lcd.printf("Dealer: "); 00027 00028 lcd.locate(lcd.max_col/4,lcd.max_row/2); 00029 lcd.printf("Player: "); 00030 00031 lcd.filled_rectangle(0,76,20,110,BLUE); 00032 lcd.filled_rectangle(23,76,43,110,BLUE); 00033 } 00034 //draw player hit cards 00035 void drawPlayerHit(int count) 00036 { 00037 switch(count) { 00038 case 1: 00039 lcd.filled_rectangle(46,76,66,110,BLUE); 00040 break; 00041 case 2: 00042 lcd.filled_rectangle(69,76,89,110,BLUE); 00043 break; 00044 case 3: 00045 lcd.filled_rectangle(92,76,112,110,BLUE); 00046 break; 00047 } 00048 } 00049 //draw card for dealer hand 00050 void drawDealerHand() 00051 { 00052 lcd.filled_rectangle(0,16,20,50,RED); 00053 lcd.filled_rectangle(23,16,43,50,RED); 00054 } 00055 //draw card for dealer hit 00056 void drawDealerHit(int count2) 00057 { 00058 switch(count2) { 00059 case 1: 00060 lcd.filled_rectangle(46,16,66,50,RED); 00061 break; 00062 case 2: 00063 lcd.filled_rectangle(69,16,89,50,RED); 00064 break; 00065 case 3: 00066 lcd.filled_rectangle(92,16,112,50,RED); 00067 break; 00068 } 00069 } 00070 //draw background 00071 void drawTable() 00072 { 00073 lcd.background_color(POKERGREEN); 00074 lcd.color(WHITE); 00075 lcd.cls(); 00076 } 00077 //draw text 00078 void drawText(int betVal) 00079 { 00080 lcd.locate(lcd.max_col/4,lcd.max_row-1); 00081 lcd.color(WHITE); 00082 lcd.printf("Bet: %i",betVal); 00083 } 00084 //draw both character player cards 00085 void drawCharacterPlayer(int card1,int card2) 00086 { 00087 lcd.locate(lcd.max_col/5 - 2,lcd.max_row/2 + 3); 00088 lcd.printf("%i",card1); 00089 lcd.locate((lcd.max_col*2)/5 - 3 ,lcd.max_row/2 + 3); 00090 lcd.printf("%i",card2); 00091 } 00092 //draw dealer character card1 00093 void drawCharDealer(int car1) 00094 { 00095 lcd.locate(lcd.max_col/5 - 2,lcd.max_row/3 - 1); 00096 lcd.printf("%i",car1); 00097 } 00098 //draw dealer charcter card2 00099 void drawDealerCard2(int cardvalue) 00100 { 00101 lcd.locate((lcd.max_col*2)/5 - 3,lcd.max_row/3 - 1); 00102 lcd.printf("%i",cardvalue); 00103 } 00104 //draw hit cards characters for player 00105 void drawHitChar_player(int cardval, int hit) 00106 { 00107 switch(hit) { 00108 case 1: 00109 lcd.locate((lcd.max_col*2)/5,lcd.max_row/2 + 3); 00110 lcd.printf("%i",cardval); 00111 break; 00112 case 2: 00113 lcd.locate((lcd.max_col*3)/5 + 1 ,lcd.max_row/2 + 3); 00114 lcd.printf("%i",cardval); 00115 break; 00116 case 3: 00117 lcd.locate((lcd.max_col*4)/5 + 1 ,lcd.max_row/2 + 3); 00118 lcd.printf("%i",cardval); 00119 break; 00120 } 00121 } 00122 //draw Hit card characters for dealer 00123 void drawHitChar_dealer(int cardv, int hit2) 00124 { 00125 switch(hit2) { 00126 case 1: 00127 lcd.locate((lcd.max_col*2)/5,lcd.max_row/3 - 1); 00128 lcd.printf("%i",cardv); 00129 break; 00130 case 2: 00131 lcd.locate((lcd.max_col*3)/5 + 1 ,lcd.max_row/3 - 1); 00132 lcd.printf("%i",cardv); 00133 break; 00134 case 3: 00135 lcd.locate((lcd.max_col*4)/5 + 1 ,lcd.max_row/3 - 1); 00136 lcd.printf("%i",cardv); 00137 break; 00138 } 00139 } 00140 00141 int main() 00142 { 00143 //stepup and variables 00144 lcd.baudrate(3000000); 00145 lcd.cls(); 00146 pb1.mode(PullUp); 00147 pb2.mode(PullUp); 00148 pb3.mode(PullUp); 00149 pb4.mode(PullUp); 00150 pb5.mode(PullUp); 00151 pb6.mode(PullUp); 00152 pb7.mode(PullUp); 00153 pb8.mode(PullUp); 00154 bool overshot = false; // if Player busts 00155 string action; //Whether player hits, or stands 00156 int hitCount = 0; //number of hits by player 00157 int dealerCount = 0; //number of hits by dealer 00158 int bet = 0; //bet amount 00159 int round = 1; 00160 int i=40; 00161 int cardArray_player[7]; 00162 int cardArray_dealer[7]; 00163 unsigned int dollars = 500; 00164 //begin game 00165 while(1) { 00166 drawTable();//draws background color 00167 srand((i)); //change everytime you compile 00168 i++; 00169 while (1) { 00170 wait_ms(1000); 00171 lcd.cls(); 00172 hitCount = 0; 00173 dealerCount = 0; 00174 if(dollars == 0) { 00175 pc.printf("You are broke! Go Home:)\n"); 00176 lcd.locate(lcd.max_col/4,lcd.max_row/2); 00177 lcd.printf("YOU LOSE"); 00178 wait_ms(10000); 00179 break; 00180 } 00181 Hand Player1("Player"); 00182 Hand Player2("Dealer"); 00183 cout << "Round " << round << endl; 00184 cout << "Player1 has " << dollars << " Dollars" << endl; 00185 cout << "Player's hand is: "; 00186 Player1.printHand(); 00187 for(int a=0; a<2; a++) { 00188 cardArray_player[a] = Player1.getCardValues(a); 00189 } 00190 cout << endl << "Player's hand value is: " << Player1.handValue()<< endl; 00191 00192 drawPlayerHand(); 00193 drawCharacterPlayer(cardArray_player[0],cardArray_player[1]); 00194 cout << "Dealer's first card is: "; 00195 Player2.printFirstCard(); 00196 cout << endl; 00197 00198 drawDealerHand(); 00199 for(int b=0; b<2; b++) { 00200 cardArray_dealer[b] = Player2.getCardValues(b); 00201 } 00202 drawCharDealer(cardArray_dealer[0]); 00203 cout << "Select a bet amount. If you want to fold, bet 0 "<< endl<<endl<<endl; 00204 00205 //Enter pushbutton for bet value 00206 while(pb1 && pb2 && pb3 && pb4); 00207 if(!pb1) { 00208 bet = 0; 00209 } else if(!pb2) { 00210 bet = 25; 00211 } else if(!pb3) { 00212 bet = 100; 00213 } else if(!pb4) { 00214 bet = dollars; 00215 } 00216 00217 if (bet == 0) { 00218 pc.printf("Please leave the table or restart to play again"); 00219 break; 00220 } else if (bet > dollars && dollars != 0) { 00221 cout << "You don't have that much money! Enter a lower bet."; 00222 wait_ms(200); 00223 continue; 00224 } 00225 drawText(bet); 00226 00227 while (1) { 00228 pc.printf("Would you like to hit or stand?\n"); 00229 while(pb5 && pb6); 00230 if(!pb5) { 00231 action = "hit"; 00232 } else if(!pb6) { 00233 action = "stand"; 00234 } 00235 if (action == "hit") { 00236 Player1.addCard(); 00237 hitCount++; 00238 cout << endl << "Player's hand value is: " << Player1.handValue()<<endl; 00239 Player1.printHand(); 00240 cout <<endl; 00241 drawPlayerHit(hitCount); 00242 switch(hitCount) { 00243 case 1: 00244 cardArray_player[2] = Player1.getCardValues(2); 00245 drawHitChar_player(cardArray_player[2],hitCount); 00246 break; 00247 case 2: 00248 cardArray_player[3] = Player1.getCardValues(3); 00249 drawHitChar_player(cardArray_player[3],hitCount); 00250 break; 00251 case 3: 00252 cardArray_player[4] = Player1.getCardValues(4); 00253 drawHitChar_player(cardArray_player[4],hitCount); 00254 break; 00255 } 00256 cout << endl; 00257 00258 if (Player1.handValue() > 21) { 00259 00260 cout << "Player's hand is bust " << endl; 00261 dollars -= bet; 00262 round++; 00263 cout << "Player has " << dollars << " dollars" << endl; 00264 lcd.cls(); 00265 lcd.locate(lcd.max_col/4,lcd.max_row/2); 00266 lcd.printf("Dealer Wins :()"); 00267 overshot = true; 00268 wait_ms(1000); 00269 break; 00270 } 00271 } 00272 00273 else if (action == "stand") { 00274 round++; 00275 overshot = false; 00276 break; 00277 } 00278 wait_ms(500); 00279 } 00280 00281 if (!overshot) { 00282 cout << "Dealer's hand is: "; 00283 Player2.printHand(); 00284 drawDealerCard2(cardArray_dealer[1]); 00285 cout << endl << "Dealer's hand value is " << Player2.handValue() << endl; 00286 00287 while (Player2.handValue() < 17) { 00288 dealerCount++; 00289 Player2.addCard(); 00290 cout << "Dealer's hand is: "; 00291 Player2.printHand(); 00292 drawDealerHit(dealerCount); 00293 switch(dealerCount) { 00294 case 1: 00295 cardArray_dealer[2] = Player2.getCardValues(2); 00296 drawHitChar_dealer(cardArray_dealer[2],dealerCount); 00297 break; 00298 case 2: 00299 cardArray_dealer[3] = Player2.getCardValues(3); 00300 drawHitChar_dealer(cardArray_dealer[3],dealerCount); 00301 break; 00302 case 3: 00303 cardArray_dealer[4] = Player2.getCardValues(4); 00304 drawHitChar_dealer(cardArray_dealer[4],dealerCount); 00305 break; 00306 } 00307 cout << endl << "Dealer's hand value is " << Player2.handValue() << endl; 00308 wait_ms(600); 00309 } 00310 00311 if (Player2.handValue() > 21) { 00312 cout << "Dealer's hand is bust. Player wins!" << endl<<endl; 00313 dollars += bet; 00314 lcd.cls(); 00315 lcd.locate(lcd.max_col/4,lcd.max_row/2); 00316 lcd.printf("Player Wins!"); 00317 wait_ms(1000); 00318 continue; 00319 } 00320 00321 if (Player1.handValue() == Player2.handValue()) { 00322 cout << "Draw." << endl; 00323 bet = bet / 2; 00324 dollars += bet; 00325 lcd.cls(); 00326 lcd.locate(lcd.max_col/4,lcd.max_row/2); 00327 lcd.printf("Draw."); 00328 wait_ms(1000); 00329 continue; 00330 } 00331 00332 if (Player1.handValue() < Player2.handValue()) { 00333 cout << "Dealer wins." << endl; 00334 lcd.cls(); 00335 lcd.locate(lcd.max_col/4,lcd.max_row/2); 00336 lcd.printf("Dealer Wins :("); 00337 dollars -= bet; 00338 wait_ms(1000); 00339 break; 00340 } 00341 00342 if (Player1.handValue() > Player2.handValue()) { 00343 cout << "Player wins." << endl; 00344 dollars += bet; 00345 lcd.cls(); 00346 lcd.locate(lcd.max_col/4,lcd.max_row/2); 00347 lcd.printf("Player Wins!"); 00348 wait_ms(600); 00349 continue; 00350 } 00351 } 00352 if(overshot) { 00353 break; 00354 } 00355 } 00356 wait_ms(400); 00357 if(dollars != 0) { 00358 lcd.cls(); 00359 lcd.locate(lcd.max_col/4,lcd.max_row/2); 00360 lcd.printf("Continue?"); 00361 pc.printf("Continue?\n\n\n"); 00362 } else { 00363 pc.printf("You Lose"); 00364 lcd.cls(); 00365 lcd.locate(lcd.max_col/4,lcd.max_row/2); 00366 lcd.printf("YOU LOSE"); 00367 break; 00368 } 00369 while(pb7 && pb8); 00370 if(!pb7) { 00371 wait_ms(200); 00372 } else if(!pb8) { 00373 break; 00374 } 00375 } 00376 }
Generated on Fri Jul 29 2022 02:53:29 by
1.7.2