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 SDFileSystem mbed
main.cpp
00001 00002 #include "mbed.h" 00003 #include "PinDetect.h" 00004 #include "uLCD_4DGL.h" 00005 #include <string> 00006 #include "SDFileSystem.h" 00007 00008 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card 00009 uLCD_4DGL lcd(p28, p27, p30); 00010 DigitalOut myled(LED1); 00011 PinDetect pb1(p9); 00012 PinDetect pb2(p10); 00013 PinDetect pb3(p11); 00014 PinDetect pb4(p12); 00015 00016 int randseed = 0; // seed for random number generator 00017 00018 int bet = 0;// initial bet 00019 int dollars = 100; // money your wife let you take to the casino 00020 00021 string playerblackjackstring = ""; 00022 string dealerblackjackstring = ""; 00023 int playercardnumbers[26] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // initial player hand matrix 00024 int dealercardnumbers[26]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // inital dealer hand matrix 00025 string playercardstring[26] = {"","","","","","","","","","","","","","","","","","","","","","","","","",""}; // string array for printing letters/numbers on cards 00026 string dealercardstring[26] = {"","","","","","","","","","","","","","","","","","","","","","","","","",""}; // see above 00027 int playerindex = 0; 00028 int dealerindex = 0; 00029 00030 string winloss = ""; 00031 int holdvalue =0; 00032 int numberofaces = 0;// for calculating whether ace is 1 or 11 00033 int cardindex;// These lines are for 00034 string cardstring = "";// the drawcard 00035 int cardnumber;// function 00036 int playersum = 0; // for testing player conditions 00037 int dealersum = 0; // for testing dealer conditions 00038 00039 string playagainstring = "yes"; 00040 string choice = ""; // this is for the hit or stand function 00041 00042 void printdealercards(int a) 00043 { 00044 for (int i = 0; i < a +1; i++) 00045 printf(" %d ", dealercardnumbers[i]); 00046 } 00047 void createtable() 00048 { 00049 lcd.background_color(BLACKJACKRED); 00050 lcd.cls(); 00051 lcd.color(WHITE); 00052 lcd.textbackground_color(BLACKJACKRED); 00053 lcd.circle(62,60,11,WHITE); 00054 lcd.locate(0,14); 00055 lcd.printf("%d", dollars); 00056 } 00057 void betprint(int x) 00058 { 00059 lcd.locate(8,7); 00060 lcd.set_font_size(.5,.5); 00061 lcd.printf("%d",x); 00062 } 00063 void createdealercards() 00064 { 00065 lcd.filled_rectangle(25,0,55,36,RED); 00066 lcd.filled_rectangle(40,0,70,36,WHITE); 00067 00068 } 00069 void createplayercards() 00070 { 00071 lcd.filled_rectangle(25,125,60,84,WHITE); 00072 lcd.filled_rectangle(50,125,70,84,WHITE); 00073 lcd.line(40,125,40,84,BLACK); 00074 } 00075 void additionalplayercards(int a) 00076 { 00077 switch(a) { 00078 case 2: 00079 lcd.filled_rectangle(60,125,80,84,WHITE); 00080 lcd.line(52,125,52,84,BLACK); 00081 break; 00082 case 3: 00083 lcd.filled_rectangle(75,125,95,84,WHITE); 00084 lcd.line(65,125,65,84,BLACK); 00085 break; 00086 case 4: 00087 lcd.filled_rectangle(90,125,110,84,WHITE); 00088 lcd.line(80,125,80,84,BLACK); 00089 break; 00090 00091 } 00092 } 00093 void printflippedcard() 00094 { 00095 lcd.filled_rectangle(25,0,55,36,WHITE); 00096 lcd.filled_rectangle(40,0,70,36,WHITE); 00097 lcd.line(40,0,40,36,BLACK); 00098 lcd.locate(4,0); 00099 lcd.printf("%s",dealercardstring[0]); 00100 lcd.locate(6,0); 00101 lcd.printf("%s",dealercardstring[1]); 00102 00103 } 00104 void additionaldealercard(int a) 00105 { 00106 switch(a) { 00107 case 2: 00108 lcd.filled_rectangle(60,0,85,36,WHITE); 00109 lcd.line(55,0,55,36,BLACK); 00110 break; 00111 00112 case 3: 00113 lcd.filled_rectangle(75,0,95,36,WHITE); 00114 lcd.line(65,125,65,84,BLACK); 00115 break; 00116 case 4: 00117 lcd.filled_rectangle(90,0,110,36,WHITE); 00118 lcd.line(80,125,80,84,BLACK); 00119 break; 00120 00121 } 00122 } 00123 void betfunction() 00124 { 00125 while(pb1 && pb2) {} 00126 if(!pb1) { 00127 bet = 10; 00128 //printf("%d\n",bet); 00129 } 00130 if(!pb2) { 00131 bet = 50; 00132 //printf("%d\n",bet); 00133 } 00134 } 00135 void drawcard() 00136 { 00137 cardindex = 1 + rand()%13; 00138 00139 switch(cardindex) { 00140 case 1: 00141 cardstring = "2"; 00142 cardnumber = 2; 00143 break; 00144 case 2: 00145 cardstring = "3"; 00146 cardnumber = 3; 00147 break; 00148 case 3: 00149 cardstring = "4"; 00150 cardnumber = 4; 00151 break; 00152 case 4: 00153 cardstring = "5"; 00154 cardnumber = 5; 00155 break; 00156 case 5: 00157 cardstring = "6"; 00158 cardnumber = 6; 00159 break; 00160 case 6: 00161 cardstring = "7"; 00162 cardnumber = 7; 00163 break; 00164 case 7: 00165 cardstring = "8"; 00166 cardnumber = 8; 00167 break; 00168 case 8: 00169 cardstring = "9"; 00170 cardnumber = 9; 00171 break; 00172 case 9: 00173 cardstring = "10"; 00174 cardnumber = 10; 00175 break; 00176 case 10: 00177 cardstring = "J"; 00178 cardnumber = 10; 00179 break; 00180 case 11: 00181 cardstring = "Q"; 00182 cardnumber = 10; 00183 break; 00184 case 12: 00185 cardstring = "K"; 00186 cardnumber = 10; 00187 break; 00188 case 13: 00189 cardstring = "A"; 00190 cardnumber = 11; 00191 numberofaces = numberofaces + 1; 00192 break; 00193 } 00194 00195 00196 } 00197 void hitorstand() 00198 { 00199 printf("Hit or Stand? \n"); 00200 while(pb3 && pb4) {} 00201 00202 if(!pb3) { 00203 choice = "hit"; 00204 00205 00206 } 00207 if(!pb4) { 00208 choice = "stand"; 00209 } 00210 printf("Choice: %s",choice); 00211 00212 00213 } 00214 void initializegame() 00215 { 00216 drawcard(); 00217 playerindex++; 00218 playercardnumbers[0] = cardnumber; 00219 playercardstring[0] = cardstring; 00220 drawcard(); 00221 dealerindex++; 00222 dealercardnumbers[0] = cardnumber; 00223 dealercardstring[0] = cardstring; 00224 drawcard(); 00225 playerindex++; 00226 playercardnumbers[1] = cardnumber; 00227 playercardstring[1] = cardstring; 00228 drawcard(); 00229 dealerindex++; 00230 dealercardnumbers[1] = cardnumber; 00231 dealercardstring[1] = cardstring; 00232 00233 00234 } 00235 void playsum() 00236 { 00237 playersum = 0; 00238 for(int i = 0; i < 26; i++) { 00239 00240 playersum = playercardnumbers[i] + playersum; 00241 } 00242 00243 } 00244 00245 void dealsum() 00246 { 00247 dealersum = 0; 00248 for(int i = 0; i < 26; i++) { 00249 00250 dealersum = dealercardnumbers[i] + dealersum; 00251 } 00252 00253 } 00254 00255 00256 void printinitialcardvalues(string a, string b, string c) 00257 { 00258 lcd.color(BLACK); 00259 lcd.textbackground_color(WHITE); 00260 lcd.locate(4,11); 00261 lcd.printf("%s",a); 00262 lcd.locate(6,11); 00263 lcd.printf("%s",b); 00264 lcd.locate(6,0); 00265 lcd.printf("%s",c); 00266 00267 00268 } 00269 void printaddtionalplayervalues(string a, int b) 00270 { 00271 switch(b) { 00272 case 2: 00273 lcd.locate(8,11); 00274 lcd.printf("%s",a); 00275 break; 00276 case 3: 00277 lcd.locate(10,11); 00278 lcd.printf("%s",a); 00279 break; 00280 case 4: 00281 lcd.locate(12,11); 00282 lcd.printf("%s",a); 00283 break; 00284 00285 } 00286 } 00287 void printaddtionaldealervalues(string a, int b) 00288 00289 { 00290 switch(b) { 00291 case 2: 00292 lcd.locate(8,0); 00293 lcd.printf("%s",a); 00294 break; 00295 } 00296 } 00297 void playagain() 00298 { 00299 lcd.cls(); 00300 lcd.locate(4,8); 00301 lcd.textbackground_color(BLACKJACKRED); 00302 lcd.color(WHITE); 00303 lcd.printf("Play Again?"); 00304 while(pb3 && pb4) 00305 if(!pb3) { 00306 playagainstring = "yes"; 00307 printf("%s",playagainstring); 00308 } 00309 if(!pb4) { 00310 playagainstring ="no"; 00311 printf("%s",playagainstring); 00312 } 00313 } 00314 void resetplayerarray() 00315 { 00316 for(int i = 0; i <26; i++) { 00317 playercardnumbers[i] =0; 00318 playercardstring[i]= ""; 00319 } 00320 } 00321 void resetdealerarray() 00322 { 00323 for(int i = 0; i <26; i++) { 00324 dealercardnumbers[i] =0; 00325 dealercardstring[i]= ""; 00326 } 00327 } 00328 00329 int main() 00330 { 00331 00332 // setup pushbutton functionality 00333 pb1.mode(PullUp); 00334 pb2.mode(PullUp); 00335 pb3.mode(PullUp); 00336 pb4.mode(PullUp); 00337 wait(.1); 00338 mkdir("/sd/mydir", 0777); 00339 while(playagainstring == "yes") { 00340 playersum = 0; 00341 playerindex= 0; 00342 dealersum = 0; 00343 dealerindex = 0; 00344 playerblackjackstring = ""; 00345 dealerblackjackstring = ""; 00346 winloss = ""; 00347 holdvalue = 0; 00348 resetplayerarray(); 00349 resetdealerarray(); 00350 srand(randseed); 00351 // wait for pushbutton initialization 00352 createtable(); // this function draws the table maroon background with player betting circle 00353 betfunction(); 00354 betprint(bet); 00355 createdealercards();// 00356 createplayercards(); 00357 initializegame(); 00358 printinitialcardvalues(playercardstring[0],playercardstring[1],dealercardstring[1]); 00359 dealsum(); 00360 playsum(); 00361 if(playersum == 21 && dealersum != 21) { 00362 wait(2); 00363 dollars = dollars + (1.5*bet); 00364 winloss = "win"; 00365 lcd.cls(); 00366 lcd.locate(2,8); 00367 lcd.textbackground_color(BLACKJACKRED); 00368 lcd.color(WHITE); 00369 lcd.printf("PLAYER BLACKJACK"); 00370 playerblackjackstring = "blackjack"; 00371 } else if(dealersum == 21 && playersum != 21) { 00372 wait(2); 00373 dollars = dollars - bet; 00374 winloss = "loss"; 00375 lcd.cls(); 00376 lcd.locate(2,8); 00377 lcd.textbackground_color(BLACKJACKRED); 00378 lcd.color(WHITE); 00379 lcd.printf("DEALER BLACKJACK"); 00380 dealerblackjackstring = "blackjack"; 00381 } else if ( playersum != 21 && dealersum != 21) { 00382 hitorstand(); 00383 while(choice == "hit") { 00384 wait(1); 00385 drawcard(); 00386 playercardnumbers[playerindex] = cardnumber; 00387 playercardstring[playerindex] = cardstring; 00388 additionalplayercards(playerindex); 00389 printaddtionalplayervalues(playercardstring[playerindex],playerindex); 00390 playerindex++; 00391 printf("Player Index : %d", playerindex); 00392 wait(1); 00393 playsum(); 00394 00395 if(playersum > 21 && numberofaces == 0) { 00396 wait(2); 00397 dollars = dollars - bet; 00398 lcd.cls(); 00399 lcd.locate(4,8); 00400 lcd.textbackground_color(BLACKJACKRED); 00401 lcd.color(WHITE); 00402 lcd.printf("BUST"); 00403 winloss = "loss"; 00404 break; 00405 } 00406 else if(playersum == 21 && numberofaces >= 1){ 00407 numberofaces = numberofaces - 1; 00408 playersum = playersum - 10; 00409 } 00410 else if(playersum < 21) { 00411 hitorstand(); 00412 if(choice == "stand") { 00413 break; 00414 } 00415 } 00416 } 00417 if(choice == "stand") { 00418 holdvalue = playersum; 00419 printflippedcard(); 00420 printdealercards(25); 00421 dealsum(); 00422 printf("Dealer Sum : %d\n ",dealersum); 00423 wait(.5); 00424 while(dealersum < 17) { 00425 drawcard(); 00426 dealercardnumbers[dealerindex] = cardnumber; 00427 printf(" New Card IS : %d",dealercardnumbers[dealerindex]); 00428 dealercardstring[dealerindex] = cardstring; 00429 additionaldealercard(dealerindex); 00430 printaddtionaldealervalues(dealercardstring[dealerindex],dealerindex); 00431 printdealercards(25); 00432 dealsum(); 00433 dealerindex++; 00434 if(dealersum > 21) { 00435 wait(2); 00436 dollars = dollars + bet; 00437 lcd.cls(); 00438 lcd.locate(4,8); 00439 lcd.textbackground_color(BLACKJACKRED); 00440 lcd.color(WHITE); 00441 lcd.printf(" DEALER BUST"); 00442 winloss = "win"; 00443 break; 00444 } 00445 00446 }//stand while 00447 }//stand if 00448 }//end else 00449 dealsum(); 00450 playsum(); 00451 //printf("Players Sum : %d Dealer Sum: %d", playersum, dealersum); 00452 if((playersum > dealersum) && playerblackjackstring != "blackjack" && playersum <=21) { 00453 wait(2); 00454 dollars = dollars + bet; 00455 lcd.cls(); 00456 lcd.locate(4,8); 00457 lcd.textbackground_color(BLACKJACKRED); 00458 lcd.color(WHITE); 00459 lcd.printf(" You Win"); 00460 winloss = "win"; 00461 wait(1); 00462 00463 } else if (dealersum > playersum && dealerblackjackstring != "blackjack" && dealersum <= 21) { 00464 wait(2); 00465 dollars = dollars - bet; 00466 lcd.cls(); 00467 lcd.locate(4,8); 00468 lcd.textbackground_color(BLACKJACKRED); 00469 lcd.color(WHITE); 00470 lcd.printf(" You Lose "); 00471 winloss = "loss"; 00472 wait(1); 00473 } 00474 holdvalue = playersum; 00475 FILE *fp = fopen("/sd/mydir/stats.txt", "a"); 00476 if(fp == NULL) { 00477 error("Could not open file for write\n"); 00478 } 00479 fprintf(fp, "%d\t%s \r\n",holdvalue,winloss); 00480 printf("%d\t%s \r\n",holdvalue,winloss); 00481 fclose(fp); 00482 00483 00484 wait(3); 00485 playagain(); 00486 randseed++; 00487 }// first while loop 00488 00489 }
Generated on Tue Jul 19 2022 16:37:19 by
1.7.2