william jenkins
/
Mbed_Poker_Primary
Poker code for primary Mbed
Diff: main.cpp
- Revision:
- 0:b9eebf731cbe
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Dec 11 07:04:52 2013 +0000 @@ -0,0 +1,1382 @@ +#include <mbed.h> +#include <string> +#include <list> +#include <mpr121.h> +#include "NokiaLCD.h" + +Serial pc(USBTX, USBRX); + +Serial device(p13,p14); + +// Setup the i2c bus on pins 28 and 27 +I2C i2c2(p9, p10); +I2C i2c1(p28, p27); + +// Setup the Mpr121: +// constructor(i2c object, i2c address of the mpr121) +Mpr121 mpr2(&i2c1, Mpr121::ADD_VSS); +Mpr121 mpr1(&i2c2, Mpr121::ADD_VSS); + +NokiaLCD lcd1(p5, p7, p8, p15, NokiaLCD::LCD6610); // mosi, sclk, cs, rst, type +NokiaLCD lcd3(p5, p7, p16, p17, NokiaLCD::LCD6610); +NokiaLCD lcd2(p5, p7, p18, p19, NokiaLCD::LCD6610); + + +int z=0, cards[52][2]; + +int secondary_players(int player_id, int Total, int face) +{ + int temp_int, arr[7],i = 0, Amount = 0, temp_int1; + char temp = '0',operation; + + if(player_id == 2) device.putc('3'); + if(player_id == 3) device.putc('4'); + if(player_id == 0) device.putc('6'); + + // temp= device.getc(); + wait(0.5); + if((Total > 0) && (face == 0)) { + device.putc('M'); + //temp=device.getc(); + pc.printf("\ninside M"); + temp_int = Total; + //device.putc('0'); + //device.putc('0'); + for(int i=0; i<7; i++) { + // wait(0.5); + temp_int1 = temp_int% ((int)(pow(10, (float)1))); + temp_int = temp_int/10; + if(temp_int1 == 0) device.putc('0'); + if(temp_int1 == 1) device.putc('1'); + if(temp_int1 == 2) device.putc('2'); + if(temp_int1 == 3) device.putc('3'); + if(temp_int1 == 4) device.putc('4'); + if(temp_int1 == 5) device.putc('5'); + if(temp_int1 == 6) device.putc('6'); + if(temp_int1 == 7) device.putc('7'); + if(temp_int1 == 8) device.putc('8'); + if(temp_int1 == 9) device.putc('9'); + pc.printf("\namount:%d", temp_int1); + //temp=device.getc(); + } + device.putc('D'); + operation = device.getc(); + wait(1); + + for(int i=0; i<7; i++) arr[i] = 0; + + //i = 0; + + if(operation == 'C') return -2;//pc.printf("\nCALL"); + if(operation == 'F') return 0;//pc.printf("\nFOLD"); + if(operation == 'R') { + //pc.printf("\nRAISE"); reading the bet amount from secondary mbed + temp = device.getc(); + while(temp != 'R') { + arr[i] = temp; + pc.printf("\narr[i]=%d",arr[i]); + i++; + temp = device.getc(); + } + for(int j=0; j<i; j++) { + Amount = Amount + ((pow (10, (float) (j))) * arr[j]); + } + return Amount; + //pc.printf("\nAmount = %d",Amount); + } + } + + if(face != 0) { + device.putc('I'); + + if(Total == 1) { + device.putc('S'); + } else if(Total == 2) { + device.putc('C'); + } else if(Total == 3) { + device.putc('H'); + } else device.putc('D'); + if(face==2) device.putc('2'); + else if(face == 3) device.putc('3'); + else if(face == 4) device.putc('4'); + else if(face == 5) device.putc('5'); + else if(face == 6) device.putc('6'); + else if(face == 7) device.putc('7'); + else if(face == 8) device.putc('8'); + else if(face == 9) device.putc('9'); + else if(face == 10) device.putc('0'); + else if(face == 11) device.putc('J'); + else if (face == 12) device.putc('Q'); + else if (face == 13) device.putc('K'); + else if (face == 1) device.putc('A'); + + } + + if((Total == 0) && (face == 0) && (player_id != 0)) { + device.putc('Z'); + } + +} + +void print_on_dealerlcd( int n, int card, int suit, int op) +{ + + //lcd2.reset(); + //lcd3.background(0x73fb76); + //lcd3.cls(); + //lcd3.locate(0,1); + char x, y, w; + int m; + x=0; + if(op == 1) { + lcd3.locate(0,1); + if(n==0)lcd3.printf("Common cards:"); + if(n<3) { + lcd3.locate(2+3*n,4+3*n); + } else { + m=n-3; + lcd3.locate(6+3*m,4+3*m); + } + if((suit==1)||(suit==2))lcd3.foreground(0x000000); + if((suit==3)||(suit==4))lcd3.foreground(0xFF0000); + if(suit == 1) { + y = 'S'; + } else if(suit == 2) { + y = 'C'; + } else if(suit == 3) { + y = 'H'; + } else y = 'D'; + if(card==2) x = '2'; + else if(card == 3) x = '3'; + else if(card == 4) x = '4'; + else if(card == 5) x = '5'; + else if(card == 6) x = '6'; + else if(card == 7) x = '7'; + else if(card == 8) x = '8'; + else if(card == 9) x = '9'; + else if(card == 10) { + x = '1'; + w = '0'; + lcd3.printf(" %c%c",x,w); + lcd3.printf(" %c", y); + } else if(card == 11) x = 'J'; + else if (card == 12) x = 'Q'; + else if (card == 13) x = 'K'; + else if (card == 1) x = 'A'; + if(card!=10) { + lcd3.printf(" %c",x); + lcd3.printf(" %c", y); + } + + } else if(op == 2) { + lcd3.locate(0,13); + lcd3.foreground(0x000000); + lcd3.printf("Current player:%d", n+1); + } else if(op == 3) { + lcd3.locate(0,15); + lcd3.foreground(0x000000); + lcd3.printf("Current Pot:%d", n); + } else { + lcd3.reset(); + lcd3.foreground(0x000000); + lcd3.background(0x2b8135); + lcd3.fill(0, 0, 136, 136, 0x2b8135); + lcd3.locate(0,0); + } +} + +void print_on_lcd(int n, int suit, int card, int id) +{ + char x,y,w; + x = 0; + y = 0; + w = 0; + switch(id) { + case 0: + // lcd1.reset(); + lcd1.background(0x2b8135); + lcd1.foreground(0x000000); + // lcd1.cls(); + lcd1.locate(0,3); + if(n >= 0) { + lcd1.printf("Raise to %d",n); + } + if(n == -1) { + lcd1.printf("Fold"); + } + if(n == -2) { + lcd1.printf("Call"); + } + if(n == -4) { + lcd1.reset(); + lcd1.cls(); + lcd1.printf("Time up!"); + } + if (n==-3) { + lcd1.printf("Exceeds limit, enter new value"); + } + + if(n == -6) { + lcd1.locate(5,6); + if(suit == 1) { + y = 'S'; + } else if(suit == 2) { + y = 'C'; + } else if(suit == 3) { + y = 'H'; + } else y = 'D'; + if((y=='S')||(y=='C'))lcd1.foreground(0x000000); + if((y=='H')||(y=='D'))lcd1.foreground(0xFF0000); + if(card==2) x = '2'; + else if(card == 3) x = '3'; + else if(card == 4) x = '4'; + else if(card == 5) x = '5'; + else if(card == 6) x = '6'; + else if(card == 7) x = '7'; + else if(card == 8) x = '8'; + else if(card == 9) x = '9'; + else if(card == 10) { + x = '1'; + w = '0'; + lcd1.printf("%c%c %c", x, w, y); + } else if(card == 11) x = 'J'; + else if (card == 12) x = 'Q'; + else if (card == 13) x = 'K'; + else if (card == 1) x = 'A'; + if(card!=10)lcd1.printf(" %c %c",x, y); + } + if(n == -5) { + lcd1.locate(5,8); + if(suit == 1) { + y = 'S'; + } else if(suit == 2) { + y = 'C'; + } else if(suit == 3) { + y = 'H'; + } else y = 'D'; + if((y=='S')||(y=='C'))lcd1.foreground(0x000000); + if((y=='H')||(y=='D'))lcd1.foreground(0xFF0000); + if(card==2) x = '2'; + else if(card == 3) x = '3'; + else if(card == 4) x = '4'; + else if(card == 5) x = '5'; + else if(card == 6) x = '6'; + else if(card == 7) x = '7'; + else if(card == 8) x = '8'; + else if(card == 9) x = '9'; + else if(card == 10) { + x = '1'; + w = '0'; + lcd1.printf("%c%c %c", x, w, y); + } else if(card == 11) x = 'J'; + else if (card == 12) x = 'Q'; + else if (card == 13) x = 'K'; + else if (card == 1) x = 'A'; + if(card!=10)lcd1.printf(" %c %c", x, y); + } + break; + case -9: + if(suit==0) { + lcd1.foreground(0x000000); + lcd1.locate(0, 1); + lcd1.printf("Current wallet:"); + lcd1.locate(6,3); + lcd1.printf("%d",n); + } else if(suit==1) { + lcd2.foreground(0x000000); + lcd2.locate(0, 1); + lcd2.printf("Current wallet:"); + lcd2.locate(6,3); + lcd2.printf("%d",n); + } + break; + case -8://(bet-Playerbet[ID],ID, 0, -8) + /*if(suit==0) { + lcd1.foreground(0x000000); + lcd1.locate(4, 10); + if(card==0)lcd1.printf("To Call: "); + if(card==1)lcd1.printf("To Raise:"); + lcd1.locate(6,12); + lcd1.printf("%d",n); + } else if(suit==1) { + lcd2.foreground(0x000000); + lcd2.locate(4, 10); + if(card==0)lcd2.printf("To Call:"); + if(card==1)lcd2.printf("To Raise:"); + lcd2.locate(6,12); + lcd2.printf("%d",n); + }*/ + break; + case 1: + //lcd2.reset(); + lcd2.background(0x2b8135); + lcd2.foreground(0x000000); + //lcd2.cls(); + lcd2.locate(0,3); + if(n >= 0) { + lcd2.printf("Raise to %d",n); + } + if(n == -1) { + lcd2.printf("Fold"); + } + if(n == -2) { + lcd2.printf("Call"); + } + if(n == -4) { + lcd2.reset(); + lcd2.cls(); + lcd2.printf("Time up!"); + } + if (n == -3) { + lcd2.printf("Exceeds limit, enter new value"); + } + + if(n != -6) { + lcd2.locate(5,6); + if(suit == 1) { + y = 'S'; + } else if(suit == 2) { + y = 'C'; + } else if(suit == 3) { + y = 'H'; + } else y = 'D'; + if((y=='S')||(y=='C'))lcd2.foreground(0x000000); + if((y=='H')||(y=='D'))lcd2.foreground(0xFF0000); + if(card==2) x = '2'; + else if(card == 3) x = '3'; + else if(card == 4) x = '4'; + else if(card == 5) x = '5'; + else if(card == 6) x = '6'; + else if(card == 7) x = '7'; + else if(card == 8) x = '8'; + else if(card == 9) x = '9'; + else if(card == 10) { + x = '1'; + w = '0'; + lcd2.printf("%c%c %c", x, w, y); + } else if(card == 11) x = 'J'; + else if (card == 12) x = 'Q'; + else if (card == 13) x = 'K'; + else if (card == 1) x = 'A'; + if(card!=10)lcd2.printf(" %c %c", x, y); + } + + if(n != -5) { + lcd2.locate(5,8); + if(suit == 1) { + y = 'S'; + } else if(suit == 2) { + y = 'C'; + } else if(suit == 3) { + y = 'H'; + } else y = 'D'; + if((y=='S')||(y=='C'))lcd2.foreground(0x000000); + if((y=='H')||(y=='D'))lcd2.foreground(0xFF0000); + if(card==2) x = '2'; + else if(card == 3) x = '3'; + else if(card == 4) x = '4'; + else if(card == 5) x = '5'; + else if(card == 6) x = '6'; + else if(card == 7) x = '7'; + else if(card == 8) x = '8'; + else if(card == 9) x = '9'; + else if(card == 10) { + x = '1'; + w = '0'; + lcd2.printf("%c %c%c", x, w, y); + } else if(card == 11) x = 'J'; + else if (card == 12) x = 'Q'; + else if (card == 13) x = 'K'; + else if (card == 1) x = 'A'; + if(card!=10)lcd2.printf(" %c %c", x, y); + } + break; + case 2: + lcd1.cls(); + break; + case 3: + lcd2.cls(); + break; + default: + lcd2.cls(); + lcd1.cls(); + break; + + } + wait(rand()%1); +} + +int read_keypad(int n) +{ + + pc.printf("\nHello from the mbed & mpr121\n\r"); + + Timer t; + //float s; + //int turn; + unsigned char dataArray[2]; + unsigned int Amount[6]; + int max = 6; + unsigned int Total = 0; + int key = 0; + int count = 0; + //unsigned int card[2] = {3,12}; + //unsigned char suit[2] = {'S','H'}; + + t.reset(); + t.start(); + + while(1) { + //pc.printf("\n Entered value is:"); + if(t.read() == 60.0) { + //print_on_lcd(-4, 0, 0, n); + t.stop(); + return 0; + } + if((n == 0)||(n == 1)) { + if(n == 0) { + dataArray[0] = mpr1.read(0x00); + dataArray[1] = mpr1.read(0x01); + } else if(n == 1) { + dataArray[0] = mpr2.read(0x00); + dataArray[1] = mpr2.read(0x01); + } + if(dataArray[0] != 0) { + switch(dataArray[0]) { + case 8: + if(count == max) { + pc.printf("Exceeds limit, enter new value \r\n"); + //print_on_lcd(-3, 0, 0, n); + for(int i=0; i<6; i++) { + Amount[i] = 0; + } + count = 0; + break; + } + pc.printf("MPR value: %d \r\n", 1); + //print_on_lcd(1); + Amount[count] = 1; + count++; + break; + case 128: + if(count == max) { + pc.printf("Exceeds limit, enter new value \r\n"); + //print_on_lcd(-3, 0, 0, n); + for(int i=0; i<6; i++) { + Amount[i] = 0; + } + count = 0; + break; + } + pc.printf("MPR value: %d \r\n", 2); + // print_on_lcd(2); + Amount[count] = 2; + count++; + break; + case 4: + if(count == max) { + pc.printf("Exceeds limit, enter new value \r\n"); + //print_on_lcd(-3, 0, 0, n); + for(int i=0; i<6; i++) { + Amount[i] = 0; + } + count = 0; + break; + } + pc.printf("MPR value: %d \r\n", 4); + // print_on_lcd(4); + Amount[count] = 4; + count++; + break; + case 64: + if(count == max) { + pc.printf("Exceeds limit, enter new value \r\n"); + //print_on_lcd(-3, 0, 0, n); + for(int i=0; i<6; i++) { + Amount[i] = 0; + } + count = 0; + break; + } + pc.printf("MPR value: %d \r\n", 5); + Amount[count] = 5; + // print_on_lcd(5); + count++; + break; + case 2: + if(count == max) { + pc.printf("Exceeds limit, enter new value \r\n"); + //print_on_lcd(-3, 0, 0, n); + for(int i=0; i<6; i++) { + Amount[i] = 0; + } + count = 0; + break; + } + pc.printf("MPR value: %d \r\n", 7); + Amount[count] = 7;//print_on_lcd(7); + count++; + break; + case 32: + if(count == max) { + pc.printf("Exceeds limit, enter new value \r\n"); + //print_on_lcd(-3, 0, 0, n); + for(int i=0; i<6; i++) { + Amount[i] = 0; + } + count = 0; + break; + } + pc.printf("MPR value: %d \r\n", 8);//print_on_lcd(8); + Amount[count] = 8; + count++; + break; + case 1: + + if(count != 0) { + while( count != 0) { + Total += Amount[key]*(pow( 10, (float) (count-1) )); + count--; + key++; + } + pc.printf("Total is: %d \r\n",Total); + //print_on_lcd(Total, 0, 0, n); + for(int i=0; i<6; i++) { + Amount[i] = 0; + } + t.stop(); + return Total; + } else { + pc.printf("MPR value: %s \r\n", "Call"); + //print_on_lcd(-2, 0, 0, n); + t.stop(); + return -2; + } + case 16: + if(count == max) { + pc.printf("Exceeds limit, enter new value \r\n"); + //print_on_lcd(-3, 0, 0, n); + for(int i=0; i<6; i++) { + Amount[i] = 0; + } + count = 0; + break; + } + pc.printf("MPR value: %d \r\n", 0); + Amount[count] = 0; + count++; + break; + } + wait(0.5); + dataArray[0] = 0; + } else { + if(dataArray[1] != 0) { + switch(dataArray[1]) { + case 8: + if(count == max) { + pc.printf("Exceeds limit, enter new value \r\n"); + //print_on_lcd(-3, 0, 0, n); + for(int i=0; i<6; i++) { + Amount[i] = 0; + } + count = 0; + break; + } + pc.printf("MPR value: %d \r\n", 3); + Amount[count] = 3; + count++; + break; + case 4: + if(count == max) { + pc.printf("Exceeds limit, enter new value \r\n"); + //print_on_lcd(-3, 0, 0, n); + for(int i=0; i<6; i++) { + Amount[i] = 0; + } + count = 0; + break; + } + pc.printf("MPR value: %d \r\n", 6); + Amount[count] = 6; + count++; + break; + case 2: + if(count == max) { + pc.printf("Exceeds limit, enter new value \r\n"); + //print_on_lcd(-3, 0, 0, n); + for(int i=0; i<6; i++) { + Amount[i] = 0; + } + count = 0; + break; + } + pc.printf("MPR value: %d \r\n", 9); + Amount[count] = 9; + count++; + break; + case 1: + if(count != 0) { + while( count != 0) { + Total += Amount[key]*(pow( 10, (float) (count-1) )); + count--; + key++; + } + pc.printf("Total is: %d \r\n",Total); + //print_on_lcd(Total, 0, 0, n); + for(int i=0; i<6; i++) { + Amount[i] = 0; + } + t.stop(); + return Total; + } else { + pc.printf("MPR value: %s \r\n", "Fold"); + //print_on_lcd(-1, 0, 0, n); + for(int i=0; i<6; i++) { + Amount[i] = 0; + } + count = 0; + t.stop(); + return 0; + } + } + wait(0.5); + dataArray[1] = 0; + } + } + } else { + } + } +} + +int checkcard ( int suit, int face, int reset) +{ + int i; + + switch(z) { + case 0: + cards[0][0]=suit; + cards[0][1]=face; + z++; + break; + default: + for(i=0; i<z; i++) { + if((cards[i][0]==suit)&&(cards[i][1]==face)) { + return 1; + } + } + cards[z][0]=suit; + cards[z][1]=face; + z++; + break; + } + if(reset==1) { + z=0; + } + return 0; +} + +//Main Poker Program +//Main Poker Program +int main() +{ + //initialize variables + int pot=0, bet, bet2, round, check, temp, hand, suit, ID=0, blind=-1; + int i, k, j, p=0, r, n, t; + + //seed random number generator + + srand(time(NULL)); + + //ask how many players + print_on_dealerlcd( 0, 0, 0, 4); + lcd1.reset(); + lcd1.foreground(0x000000); + lcd1.background(0x2b8135); + lcd1.fill(0, 0, 136, 136, 0x2b8135); + lcd1.locate(0,1); + + lcd2.reset(); + lcd2.foreground(0x000000); + lcd2.background(0x2b8135); + lcd2.fill(0, 0, 136, 136, 0x2b8135); + lcd2.locate(0,1); + + while(p<2) { + lcd1.printf("How many players?"); + pc.printf("\nAmount of players?"); + p=read_keypad(0); + //p=2; + if(p<2)pc.printf("\nnot enough players..."); + + } + int playermoney[p]; + + //ask how much each player should start out with + //while((pot<100)||(pot>1000000/p)) { + lcd1.cls(); + lcd1.locate(0,1); + lcd1.printf("Money each player starts with?"); + pc.printf("Money each player starts with?\n"); + pc.printf("\nbetween $100-$%d",1000000/p); + pot=read_keypad(0); + //pot=2000; + //} + for(k=0; k<p; k++) { + playermoney[k]=pot; + pc.printf("player %d\n", k+1); + } + + //ask size of blind + while((blind<0)||(blind>pot/16)) { + lcd1.cls(); + lcd1.locate(0,1); + lcd1.printf("Size of large"); + lcd1.locate(0,3); + lcd1.printf("blind?"); + pc.printf("\nSize of large blind?"); + lcd1.locate(0,5); + lcd1.printf("Between $0-$%d",pot/16); + blind=read_keypad(0); + //blind=20; + } + lcd1.cls(); + + pot=0; + + //determine hands played to see who should be dealer + for(hand=0; p>1; hand++) { + int playerbet[p], playersuit[p][2], playerface[p][2], communitys[5], highcard[p], playerscore[p], AB[p], AP; + int communityf[5], handface[7], handsuit[7], spade, heart, club, diamond, pot=0, count[14], m=0; + i=checkcard(0,0,1); + pc.printf("\n hand %d",hand); + for(k=0; k<p; k++) { + AB[k]=0; + } + AP=p; + t=secondary_players(0, 0, 0); + print_on_lcd(0, 0, 0, -10); + + + for(round=1; round<5; round++) { + for(k=0; k<p; k++) { + playerbet[k]=0; + } + if(AP>1) { + switch(round) { + //first round lay players cards + case 1 : + print_on_dealerlcd( 0, 0, 0, 4); + for (r=0; r<p; r++) { + for (k=0; k<2; k++) { + playersuit[r][k]= (rand()%4)+1; + playerface[r][k]= (rand()%13)+1; + check = checkcard( playersuit[r][k], playerface[r][k], 0); + pc.printf("\nCheck 1= %d",check); + if(check==1) { + k--; + } else { + if(r<2) { + print_on_lcd(k-6, playersuit[r][k], playerface[r][k], r); + } else { + t=secondary_players(r, playersuit[r][k], playerface[r][k]); + } + pc.printf("\n operation:%d\t suit:%d\t face:%d\t player%d", k-6, playersuit[r][k], playerface[r][k], r+1); + } + } + } + break; + + //second round lay 3 cards on table + case 2 : + for(k=0; k<3; k++) { + communitys[k]=(rand()%4)+1; + communityf[k]=(rand()%13)+1; + pc.printf("\n Amount:%d\t card:%d\t face:%d\t suit:%d\t Operation:%d ", 0, k, communityf[k], communitys[k], 1); + //function to make sure no cards are the same + check = checkcard ( communitys[k], communityf[k], 0); + pc.printf("\nCheck 2= %d",check); + if(check==1) { + k--; + } else { + print_on_dealerlcd( k, communityf[k], communitys[k], 1); + pc.printf("\n Amount:%d\t card:%d\t face:%d\t suit:%d\t Operation:%d ", 0, k, communityf[k], communitys[k], 1); + wait(rand()%1); + } + } + break; + + //third round lay single card on table + case 3 : + for(k=0; k<1; k++) { + communitys[3]=(rand()%4)+1; + communityf[3]=(rand()%13)+1; + check = checkcard ( communitys[3], communityf[3], 0); + pc.printf("\n Amount:%d\t card:%d\t face:%d\t suit:%d\t Operation:%d ", 0, k, communityf[3], communitys[3], 1); + pc.printf("\nCheck 3= %d",check); + if(check==1) { + k--; + } else { + print_on_dealerlcd( 3, communityf[3], communitys[3], 1); + pc.printf("\n Amount:%d\t card:%d\t face:%d\t suit:%d\t Operation:%d ", 0, 3, communityf[3], communitys[3], 1); + wait(rand()%1); + } + } + break; + + //fourth round lay single card on table + case 4 : + for(k=0; k<1; k++) { + communitys[4]=(rand()%4)+1; + communityf[4]=(rand()%13)+1; + check = checkcard ( communitys[4], communityf[4], 0); + if(check==1) { + k--; + pc.printf("\nCheck 4= %d",check); + } else { + print_on_dealerlcd( 4, communityf[4], communitys[4], 1); + wait(rand()%1); + pc.printf("\n Amount:%d\t card:%d\t face:%d \t suit:%d\t Operation:%d ", 0, 4, communityf[4], communitys[4], 1); + } + } + break; + } + + //take bets from each player + if(round!=1) bet=0; + if(round==1) bet=blind; + temp = hand%p; + pc.printf("\ntemp:%d",temp); + n=0; + r=0; + bet2=0; + ID = temp; + while(r<p) { + while(ID <= (p-1) ) { + if(AP>1) { + if((m==1)&&(blind!=0)) { + print_on_lcd(playermoney[ID]-blind/2, ID, 0, -9); + } else { + print_on_lcd(playermoney[ID], ID, 0, -9); + } + print_on_dealerlcd( ID, 0, 0, 2); + pc.printf("\nr=%d",r); + pc.printf("\nstart while"); + if(AB[ID]!=1) { + //ID = temp; + //for(ID=hand%p; ID<p; ID++) { + pc.printf("\nin while"); + if((round==1)||(playerbet[ID]!=0)) { + if((round==1)&&(m==0)&&(blind!=0))playerbet[ID]=bet; + if((round==1)&&(m==1)&&(blind!=0))playerbet[ID]=bet/2; + } + if(playerbet[ID]==-2)playerbet[ID]=0; + pc.printf("\npot:%d player%dmoney:%d",pot, ID+1, playermoney[ID]); + pc.printf("\nplayer%d bet?", ID+1); + if(ID>1) { + if((m==0)&&(blind!=0)) { + n=-2; + } else { + n = secondary_players(ID, playermoney[ID],0); + } + } else { + if((m==0)&&(blind!=0)) { + n=-2; + } else { + print_on_lcd(bet-playerbet[ID], ID, 0, -8); + n=read_keypad(ID); + } + } + pc.printf("\nbet:%d player%dbet:%d",bet, ID+1,playerbet[ID]); + switch(n) { + case -2: + if(bet > 0) { + if((blind!=0)&&(m==0)) { + if(playermoney[ID]>playerbet[ID]) { + pot+=playerbet[ID]; + playermoney[ID]-=playerbet[ID]; + print_on_dealerlcd( pot, 0, 0, 3); + r--; + } + } else if((blind!=0)&&(m==1)) { + if(playermoney[ID]>blind) { + pot+=blind; + playermoney[ID]-=blind; + print_on_dealerlcd( pot, 0, 0, 3); + } + } else if(playerbet[ID]==0) { + if(bet<=playermoney[ID]) { + playerbet[ID] = bet; + pot += playerbet[ID]; + playermoney[ID] -= bet; + print_on_dealerlcd( pot, 0, 0, 3); + } else { + playerbet[ID]=0; + AB[ID]=1; + AP--; + if(ID<2) { + print_on_lcd(0, 0, 0, ID+2); + } else { + t=secondary_players(ID, 0, 0); + } + } + } else if(playerbet[ID]!=0) { + //if(m==1)playerbet[ID]=bet; + if(((bet-playerbet[ID])<=playermoney[ID])&&(playerbet[ID]<=bet)) { + bet2 = bet-playerbet[ID]; + pot += bet2 ; + playerbet[ID] = bet; + playermoney[ID] -= bet2; + pc.printf("\ntest"); + print_on_dealerlcd( pot, 0, 0, 3); + } else { + playerbet[ID]=0; + AB[ID]=1; + AP--; + if(ID<2) { + print_on_lcd(0, 0, 0, ID+2); + } else { + t=secondary_players(ID, 0, 0); + } + } + } + } + if(bet ==0)playerbet[ID]=-2; + break; + case 0: + if(bet==0) { + playerbet[ID]=-2; + pc.printf("\n#01 bet:%d player%dbet:%d",bet, ID+1,playerbet[ID]); + break; + } + playerbet[ID]=0; + if((m==1)&&(blind!=0)) { + playermoney[ID] -= bet/2; + pot += bet/2; + print_on_dealerlcd( pot, 0, 0, 3); + } + AB[ID]=1; + AP--; + if(ID<2) { + print_on_lcd(0, 0, 0, ID+2); + } else { + t=secondary_players(ID, 0, 0); + } + pc.printf("\n#02 bet:%d player%dbet:%d",bet, ID+1,playerbet[ID]); + break; + default: + if(playerbet[ID]==0) { + playerbet[ID]=n; + if((playerbet[ID]<=playermoney[ID])&&(playerbet[ID]>=bet)) { + //function to ask for bets and check bet amount + playermoney[ID] -= playerbet[ID]; + pot += playerbet[ID]; + bet = playerbet[ID]; + print_on_dealerlcd( pot, 0, 0, 3); + r=0; + } else { + pc.printf("\nplayer bet Incorrect!"); + ID--; + r--; + } + pc.printf("\ndef bet:%d player%dbet:%d",bet, ID+1,playerbet[ID]); + } else if(playerbet[ID]!=0) { + pc.printf("\ndef1 bet:%d player%dbet:%d pot:%d",bet, ID+1,playerbet[ID], pot); + if((n<=playermoney[ID])&&(n>=bet-playerbet[ID])) { + pot += n; + playerbet[ID] += n; + bet = playerbet[ID]; + playermoney[ID] -= n; + r=0; + print_on_dealerlcd( pot, 0, 0, 3); + } else { + pc.printf("\nplayer bet Incorrect!"); + ID--; + r--; + } + } + } + + + + } + } + print_on_lcd(bet-playerbet[ID], ID, 0, -8); + if(ID<2)print_on_lcd(playermoney[ID], ID, 0, -9); + r++; + ID++; + m++; + pc.printf("\nincrement"); + if(r>=p)break; + } + + for(ID=0; ID<temp; ID++) { + if(AP>1) { + if((m=1)&&(blind!=0)) { + print_on_lcd(playermoney[ID]-blind/2, ID, 0, -9); + } else { + print_on_lcd(playermoney[ID], ID, 0, -9); + } + print_on_dealerlcd( ID, 0, 0, 2); + pc.printf("\nr=%d",r); + pc.printf("\nstart for"); + if(AB[ID]!=1) { + //ID = temp; + //for(ID=hand%p; ID<p; ID++) { + pc.printf("\nin for"); + if((round==1)||(playerbet[ID]!=0)) { + if((round==1)&&(m==0)&&(blind!=0))playerbet[ID]=bet; + if((round==1)&&(m==1)&&(blind!=0))playerbet[ID]=bet/2; + } + if(playerbet[ID]==-2)playerbet[ID]=0; + pc.printf("\npot:%d player%dmoney:%d",pot, ID+1, playermoney[ID]); + pc.printf("\nplayer%d bet?", ID+1); + if(ID>1) { + if((m==0)&&(blind!=0)) { + n=-2; + } else { + n = secondary_players(ID, playermoney[ID],0); + } + } else { + if((m==0)&&(blind!=0)) { + n=-2; + } else { + print_on_lcd(bet-playerbet[ID], ID, 0, -8); + n=read_keypad(ID); + } + } + pc.printf("\nbet:%d player%dbet:%d",bet, ID+1,playerbet[ID]); + switch(n) { + case -2: + if(bet > 0) { + if((blind!=0)&&(m==0)) { + if(playermoney[ID]>playerbet[ID]) { + pot+=playerbet[ID]; + playermoney[ID]-=playerbet[ID]; + print_on_dealerlcd( pot, 0, 0, 3); + r--; + } + } else if((blind!=0)&&(m==1)) { + if(playermoney[ID]>blind) { + pot+=blind; + playermoney[ID]-=blind; + print_on_dealerlcd( pot, 0, 0, 3); + } + } else if(playerbet[ID]==0) { + if(bet<=playermoney[ID]) { + playerbet[ID] = bet; + pot += playerbet[ID]; + playermoney[ID] -= bet; + print_on_dealerlcd( pot, 0, 0, 3); + } else { + playerbet[ID]=0; + AB[ID]=1; + AP--; + if(ID<2) { + print_on_lcd(0, 0, 0, ID+2); + } else { + t=secondary_players(ID, 0, 0); + } + } + } else if(playerbet[ID]!=0) { + //if(m==1)playerbet[ID]=bet; + if(((bet-playerbet[ID])<=playermoney[ID])&&(playerbet[ID]<=bet)) { + bet2 = bet-playerbet[ID]; + pot += bet2 ; + playerbet[ID] = bet; + playermoney[ID] -= bet2; + pc.printf("\ntest"); + print_on_dealerlcd( pot, 0, 0, 3); + } else { + playerbet[ID]=0; + AB[ID]=1; + AP--; + if(ID<2) { + print_on_lcd(0, 0, 0, ID+2); + } else { + t=secondary_players(ID, 0, 0); + } + } + } + } + if(bet ==0)playerbet[ID]=-2; + break; + case 0: + if(bet==0) { + playerbet[ID]=-2; + pc.printf("\n#01 bet:%d player%dbet:%d",bet, ID+1,playerbet[ID]); + break; + } + playerbet[ID]=0; + if((m==1)&&(blind!=0)) { + playermoney[ID] -= bet/2; + pot += bet/2; + print_on_dealerlcd( pot, 0, 0, 3); + } + AB[ID]=1; + AP--; + if(ID<2) { + print_on_lcd(0, 0, 0, ID+2); + } else { + t=secondary_players(ID, 0, 0); + } + pc.printf("\n#02 bet:%d player%dbet:%d",bet, ID+1,playerbet[ID]); + break; + default: + if(playerbet[ID]==0) { + playerbet[ID]=n; + if((playerbet[ID]<=playermoney[ID])&&(playerbet[ID]>=bet)) { + //function to ask for bets and check bet amount + playermoney[ID] -= playerbet[ID]; + pot += playerbet[ID]; + bet = playerbet[ID]; + print_on_dealerlcd( pot, 0, 0, 3); + r=0; + } else { + pc.printf("\nplayer bet Incorrect!"); + ID--; + r--; + } + pc.printf("\ndef bet:%d player%dbet:%d",bet, ID+1,playerbet[ID]); + } else if(playerbet[ID]!=0) { + pc.printf("\ndef1 bet:%d player%dbet:%d pot:%d",bet, ID+1,playerbet[ID], pot); + if((n<=playermoney[ID])&&(n>=bet-playerbet[ID])) { + pot += n; + playerbet[ID] += n; + bet = playerbet[ID]; + playermoney[ID] -= n; + r=0; + print_on_dealerlcd( pot, 0, 0, 3); + } else { + pc.printf("\nplayer bet Incorrect!"); + ID--; + r--; + } + } + } + + + + } + } + print_on_lcd(bet-playerbet[ID], ID, 0, -8); + if(ID<2)print_on_lcd(playermoney[ID], ID, 0, -9); + r++; + //ID++; + m++; + pc.printf("\nincrement"); + if(r>=p)break; + } + } + + } + } + + //determine player's score + if(AP==1) { + for(k=0; k<p; k++) { + if(AB[k]==1)playerscore[k]=0; + if(AB[k]!=1)playerscore[k]=10; + } + } + if(AP>1) { + for (k=0; k<p; k++) { + spade=0; + heart=0; + diamond=0; + club=0; + suit=0; + for(i=0; i<14; i++) { + count[i]=0; + } + playerscore[k]=0; + if(playerbet[k]==0) { + playerscore[k]=0; + } else { + for (j=0; j<5; j++) { + handface[j] = communityf[j]; + handsuit[j] = communitys[j]; + } + handface[5] = playerface[k][0]; + handface[6] = playerface[k][1]; + handsuit[5] = playersuit[k][0]; + handsuit[6] = playersuit[k][1]; + if(playerface[k][0]>=playerface[k][1]) { + highcard[k]=playerface[k][0]; + } else { + highcard[k]=playerface[k][1]; + } + for(j=0; j<7; j++) { + pc.printf("\nplayer%d face:%d", k+1, handface[j]); + } + pc.printf("\nplayer%d highcard:%d",k+1, highcard[k]); + + //player score ranking + //Straight Flush = 9 + //Four of a kind = 8 + //Full House = 7 + //Flush = 6 + //Straight = 5 + //Threee of a kind = 4 + //Two pair = 3 + //One Pair = 2 + //High Card = 1 + //determine how many cards of each suit and face value there are + for(i=0; i<7; i++) { + if(handsuit[i] == 1)spade++; + if(handsuit[i] == 2)club++; + if(handsuit[i] == 3)heart++; + if(handsuit[i] == 4)diamond++; + } + for(r=0; r<7; r++) { + for(j=0; j<13; j++) { + if(handface[r]==j+1)count[j]++; + } + } + for(j=0; j<14; j++) { + pc.printf("\nplayer%d r=%d count=%d",k+1,j,count[j]); + } + count[13]=count[0]; + + //determine if four of a kind + for(r=0; r<13; r++) { + if(count[r]==4) playerscore[k] = 8; + } + pc.printf("\nfour of a kind:%d", playerscore[k]); + //determine if Full House + if(playerscore[k]==0) { + for(i=0; i<7; i++) { + if(count[i] == 3) { + for(j=0; j<7; j++) { + if(count[j] >= 2) { + playerscore[k]=7; + } + } + } + } + } + //Determine if flush + if((spade >= 5)&&((playersuit[k][1]== 1)||(playersuit[k][0] == 1))) { + playerscore[k] = 6; + suit = 1; + } + if((club >= 5)&&((playersuit[k][1]== 2)||(playersuit[k][0]==2))) { + playerscore[k] = 6; + suit = 2; + } + if((heart >= 5)&&((playersuit[k][1]== 3)||(playersuit[k][0]==3))) { + playerscore[k] = 6; + suit = 3; + } + if((diamond >= 5)&&((playersuit[k][1]== 2)||(playersuit[k][0]==2))) { + playerscore[k] = 6; + suit = 4; + } + pc.printf("\nplayer%d suit%d", k+1, suit); + //Determine if straight or straight flush + m=0; + for(i=0; i<14; i++) { + if((count[i]>=1)&&(count[i+1]>=1)) { + m++; + if(m>=4) { + if(((i-3<playerface[k][1])&&(playerface[k][1]<i+2))||((i-3<playerface[k][0])&&(playerface[k][0]<i+2))) { + if(playerscore[k]==6) { + if(((i-3<playerface[k][1])&&(playerface[k][1]<i+2)&&(playersuit[k][1]==suit))||((i-3<playerface[k][0])&&(playerface[k][0]<i+2)&&(playersuit[k][0]==suit))) { + playerscore[k]=9; + } + } else { + playerscore[k]=5; + } + } + } else { + m=0; + } + } + } + + + //Determine if three of a kind, two pair, or pair + m=0; + if(playerscore[k]==0) { + for(i=0; i<13; i++) { + if(count[i]==3) { + playerscore[k]=4; + } else { + if(count[i]==2) { + m++; + } + + } + } + if(m==2)playerscore[k]=3; + if(m==1)playerscore[k]=2; + } + + + //determine if only high card + if(playerscore[k] == 0) playerscore[k] = 1; + } + pc.printf("\nprelim player%d score:%d",k+1,playerscore[k]); + } + } +//determine winner based off player score + temp=0; + for(i=0; i<p; i++) { + if(temp<=playerscore[i]) { + temp=playerscore[i]; + } else { + playerscore[i]=0; + } + } + for(i=0; i<p; i++) { + if(playerscore[i]<temp)playerscore[i]=0; + } +//determine amount of winners + m=0; + for(i=0; i<p; i++) { + if(playerscore[i]>0) m++; + //pc.printf("\n amount of winners:%d", m); + } +//Determine high card if multiple winners + temp=0; + if(m>1) { + for(i=0; i<p; i++) { + if(temp<=highcard[i]) { + temp=highcard[i]; + } else { + highcard[i]=0; + } + } + for(i=0; i<p; i++) { + if(highcard[i]<temp)playerscore[i]=0; + } + } +//determine if two players have the same high card + m=0; + for(i=0; i<p; i++) { + if(playerscore[i]>0) m++; + //pc.printf("\n amount of winners:%d", m); + } +//distribute winnings + for(i=0; i<p; i++) { + pc.printf("\n player%dscore=%d",i+1,playerscore[i]); + if(playerscore[i]>0) { + playermoney[i] += pot/m ; + pc.printf("\n player%d won $%d",i+1, pot/m); + } + } + for(i=0; i<p; i++) { + playerscore[i]=0; + } + +//determine if player is out of money + for(i=0; i<p; i++) { + if(playermoney[i] == 0) p--; + } + if(p==1) { + pc.printf("Play Again?\nFold=No Call=Yes"); + m=read_keypad(0); + if(m==-2) main(); + if(m==-4) return 0; + } + } +} \ No newline at end of file