Poker code for primary Mbed

Dependencies:   NokiaLCD mbed

main.cpp

Committer:
wjenkins7
Date:
2013-12-11
Revision:
0:b9eebf731cbe

File content as of revision 0:b9eebf731cbe:

#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;
        }
    }
}