Made by George and Pahul
Dependencies: 4DGL-uLCD-SE PinDetect mbed
Diff: main.cpp
- Revision:
- 0:8798a72d6580
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Mar 12 18:59:00 2015 +0000 @@ -0,0 +1,376 @@ +#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; + } + } +} \ No newline at end of file