Made by George and Pahul
Dependencies: 4DGL-uLCD-SE PinDetect mbed
main.cpp
- Committer:
- gevell1
- Date:
- 2015-03-12
- Revision:
- 0:8798a72d6580
File content as of revision 0:8798a72d6580:
#include <vector> #include <string> #include <cstdlib> #include <iostream> #include <iomanip> #include "mbed.h" #include "uLCD_4DGL.h" #include "Hand.h" #include "PinDetect.h" using namespace std; //mbed declarations Serial pc(USBTX, USBRX); uLCD_4DGL lcd(p28, p27, p30); DigitalIn pb1(p12); DigitalIn pb2(p15); DigitalIn pb3(p16); DigitalIn pb4(p17); DigitalIn pb5(p19); DigitalIn pb6(p20); DigitalIn pb7(p21); DigitalIn pb8(p23); //draw player hand void drawPlayerHand() { lcd.locate(lcd.max_col/4,0); lcd.printf("Dealer: "); lcd.locate(lcd.max_col/4,lcd.max_row/2); lcd.printf("Player: "); lcd.filled_rectangle(0,76,20,110,BLUE); lcd.filled_rectangle(23,76,43,110,BLUE); } //draw player hit cards void drawPlayerHit(int count) { switch(count) { case 1: lcd.filled_rectangle(46,76,66,110,BLUE); break; case 2: lcd.filled_rectangle(69,76,89,110,BLUE); break; case 3: lcd.filled_rectangle(92,76,112,110,BLUE); break; } } //draw card for dealer hand void drawDealerHand() { lcd.filled_rectangle(0,16,20,50,RED); lcd.filled_rectangle(23,16,43,50,RED); } //draw card for dealer hit void drawDealerHit(int count2) { switch(count2) { case 1: lcd.filled_rectangle(46,16,66,50,RED); break; case 2: lcd.filled_rectangle(69,16,89,50,RED); break; case 3: lcd.filled_rectangle(92,16,112,50,RED); break; } } //draw background void drawTable() { lcd.background_color(POKERGREEN); lcd.color(WHITE); lcd.cls(); } //draw text void drawText(int betVal) { lcd.locate(lcd.max_col/4,lcd.max_row-1); lcd.color(WHITE); lcd.printf("Bet: %i",betVal); } //draw both character player cards void drawCharacterPlayer(int card1,int card2) { lcd.locate(lcd.max_col/5 - 2,lcd.max_row/2 + 3); lcd.printf("%i",card1); lcd.locate((lcd.max_col*2)/5 - 3 ,lcd.max_row/2 + 3); lcd.printf("%i",card2); } //draw dealer character card1 void drawCharDealer(int car1) { lcd.locate(lcd.max_col/5 - 2,lcd.max_row/3 - 1); lcd.printf("%i",car1); } //draw dealer charcter card2 void drawDealerCard2(int cardvalue) { lcd.locate((lcd.max_col*2)/5 - 3,lcd.max_row/3 - 1); lcd.printf("%i",cardvalue); } //draw hit cards characters for player void drawHitChar_player(int cardval, int hit) { switch(hit) { case 1: lcd.locate((lcd.max_col*2)/5,lcd.max_row/2 + 3); lcd.printf("%i",cardval); break; case 2: lcd.locate((lcd.max_col*3)/5 + 1 ,lcd.max_row/2 + 3); lcd.printf("%i",cardval); break; case 3: lcd.locate((lcd.max_col*4)/5 + 1 ,lcd.max_row/2 + 3); lcd.printf("%i",cardval); break; } } //draw Hit card characters for dealer void drawHitChar_dealer(int cardv, int hit2) { switch(hit2) { case 1: lcd.locate((lcd.max_col*2)/5,lcd.max_row/3 - 1); lcd.printf("%i",cardv); break; case 2: lcd.locate((lcd.max_col*3)/5 + 1 ,lcd.max_row/3 - 1); lcd.printf("%i",cardv); break; case 3: lcd.locate((lcd.max_col*4)/5 + 1 ,lcd.max_row/3 - 1); lcd.printf("%i",cardv); break; } } int main() { //stepup and variables lcd.baudrate(3000000); lcd.cls(); pb1.mode(PullUp); pb2.mode(PullUp); pb3.mode(PullUp); pb4.mode(PullUp); pb5.mode(PullUp); pb6.mode(PullUp); pb7.mode(PullUp); pb8.mode(PullUp); bool overshot = false; // if Player busts string action; //Whether player hits, or stands int hitCount = 0; //number of hits by player int dealerCount = 0; //number of hits by dealer int bet = 0; //bet amount int round = 1; int i=40; int cardArray_player[7]; int cardArray_dealer[7]; unsigned int dollars = 500; //begin game while(1) { drawTable();//draws background color srand((i)); //change everytime you compile i++; while (1) { wait_ms(1000); lcd.cls(); hitCount = 0; dealerCount = 0; if(dollars == 0) { pc.printf("You are broke! Go Home:)\n"); lcd.locate(lcd.max_col/4,lcd.max_row/2); lcd.printf("YOU LOSE"); wait_ms(10000); break; } Hand Player1("Player"); Hand Player2("Dealer"); cout << "Round " << round << endl; cout << "Player1 has " << dollars << " Dollars" << endl; cout << "Player's hand is: "; Player1.printHand(); for(int a=0; a<2; a++) { cardArray_player[a] = Player1.getCardValues(a); } cout << endl << "Player's hand value is: " << Player1.handValue()<< endl; drawPlayerHand(); drawCharacterPlayer(cardArray_player[0],cardArray_player[1]); cout << "Dealer's first card is: "; Player2.printFirstCard(); cout << endl; drawDealerHand(); for(int b=0; b<2; b++) { cardArray_dealer[b] = Player2.getCardValues(b); } drawCharDealer(cardArray_dealer[0]); cout << "Select a bet amount. If you want to fold, bet 0 "<< endl<<endl<<endl; //Enter pushbutton for bet value while(pb1 && pb2 && pb3 && pb4); if(!pb1) { bet = 0; } else if(!pb2) { bet = 25; } else if(!pb3) { bet = 100; } else if(!pb4) { bet = dollars; } if (bet == 0) { pc.printf("Please leave the table or restart to play again"); break; } else if (bet > dollars && dollars != 0) { cout << "You don't have that much money! Enter a lower bet."; wait_ms(200); continue; } drawText(bet); while (1) { pc.printf("Would you like to hit or stand?\n"); while(pb5 && pb6); if(!pb5) { action = "hit"; } else if(!pb6) { action = "stand"; } if (action == "hit") { Player1.addCard(); hitCount++; cout << endl << "Player's hand value is: " << Player1.handValue()<<endl; Player1.printHand(); cout <<endl; drawPlayerHit(hitCount); switch(hitCount) { case 1: cardArray_player[2] = Player1.getCardValues(2); drawHitChar_player(cardArray_player[2],hitCount); break; case 2: cardArray_player[3] = Player1.getCardValues(3); drawHitChar_player(cardArray_player[3],hitCount); break; case 3: cardArray_player[4] = Player1.getCardValues(4); drawHitChar_player(cardArray_player[4],hitCount); break; } cout << endl; if (Player1.handValue() > 21) { cout << "Player's hand is bust " << endl; dollars -= bet; round++; cout << "Player has " << dollars << " dollars" << endl; lcd.cls(); lcd.locate(lcd.max_col/4,lcd.max_row/2); lcd.printf("Dealer Wins :()"); overshot = true; wait_ms(1000); break; } } else if (action == "stand") { round++; overshot = false; break; } wait_ms(500); } if (!overshot) { cout << "Dealer's hand is: "; Player2.printHand(); drawDealerCard2(cardArray_dealer[1]); cout << endl << "Dealer's hand value is " << Player2.handValue() << endl; while (Player2.handValue() < 17) { dealerCount++; Player2.addCard(); cout << "Dealer's hand is: "; Player2.printHand(); drawDealerHit(dealerCount); switch(dealerCount) { case 1: cardArray_dealer[2] = Player2.getCardValues(2); drawHitChar_dealer(cardArray_dealer[2],dealerCount); break; case 2: cardArray_dealer[3] = Player2.getCardValues(3); drawHitChar_dealer(cardArray_dealer[3],dealerCount); break; case 3: cardArray_dealer[4] = Player2.getCardValues(4); drawHitChar_dealer(cardArray_dealer[4],dealerCount); break; } cout << endl << "Dealer's hand value is " << Player2.handValue() << endl; wait_ms(600); } if (Player2.handValue() > 21) { cout << "Dealer's hand is bust. Player wins!" << endl<<endl; dollars += bet; lcd.cls(); lcd.locate(lcd.max_col/4,lcd.max_row/2); lcd.printf("Player Wins!"); wait_ms(1000); continue; } if (Player1.handValue() == Player2.handValue()) { cout << "Draw." << endl; bet = bet / 2; dollars += bet; lcd.cls(); lcd.locate(lcd.max_col/4,lcd.max_row/2); lcd.printf("Draw."); wait_ms(1000); continue; } if (Player1.handValue() < Player2.handValue()) { cout << "Dealer wins." << endl; lcd.cls(); lcd.locate(lcd.max_col/4,lcd.max_row/2); lcd.printf("Dealer Wins :("); dollars -= bet; wait_ms(1000); break; } if (Player1.handValue() > Player2.handValue()) { cout << "Player wins." << endl; dollars += bet; lcd.cls(); lcd.locate(lcd.max_col/4,lcd.max_row/2); lcd.printf("Player Wins!"); wait_ms(600); continue; } } if(overshot) { break; } } wait_ms(400); if(dollars != 0) { lcd.cls(); lcd.locate(lcd.max_col/4,lcd.max_row/2); lcd.printf("Continue?"); pc.printf("Continue?\n\n\n"); } else { pc.printf("You Lose"); lcd.cls(); lcd.locate(lcd.max_col/4,lcd.max_row/2); lcd.printf("YOU LOSE"); break; } while(pb7 && pb8); if(!pb7) { wait_ms(200); } else if(!pb8) { break; } } }