Brandon Fairfield / Mbed 2 deprecated ECE4180Project

Dependencies:   4DGL-uLCD-SE PinDetect SDFileSystem mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }