George Vellaringattu / Mbed 2 deprecated BlackJack

Dependencies:   4DGL-uLCD-SE PinDetect mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }