Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: HRSLASH en 21 Febrero 2011, 21:29 PM

Título: Poker[C]
Publicado por: HRSLASH en 21 Febrero 2011, 21:29 PM
Hola gente del foro!! Dejo un codigo de poker al que le puse todas las funciones para determinar el punto de la mano.. Espero comentarios!! Saludos!!



#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void shuffle(int [][13]);
void deal(int [][13], const char *[], const char *[]);
void bubble(int n[], int size);

main()
{
    srand(time(NULL));
    int i, j, desk[4][13] = {0};
    const char *suit[4] = {"Corazones", "Diamantes", "Trebol", "Espadas"};
    const char *faces[13] = {"As", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete",
                             "Ocho", "Nueve", "Diez", "Jack", "Reina", "Rey"};

    shuffle(desk);
    deal(desk, suit, faces);

    return 0;
}





void shuffle(int d[][13])
{
    int row, column, card;

    for (card = 1; card < 53; card++){
        row = rand() % 4;
        column = rand() % 13;
        while (d[row][column] != 0){
            row = rand() % 4;
            column = rand() % 13;
        }
        d[row][column] = card;
    }
}

void deal(int d[][13], const char *s[], const char *f[])
{
    int deck2[4][13] = {0};
    int row, column, card, pnt = 0, i;
    int royalFlush(const int [][13]);
    int straightFlush(const int [][13]);
    int poker(const int [][13]);
    int fullHouse(const int [][13]);
    int flush(const int [][13]);
    int straight(const int [][13]);
    int threeOfAKind(const int [][13]);
    int twoPair(const int [][13]);
    int pair(const int [][13]);
    int (*pokerArray[9])(const int) = {royalFlush, straightFlush, poker, fullHouse, flush,
                                       straight, threeOfAKind, twoPair, pair};
    void point(int);


    for (card = 1; card < 6; card++){
        for (row = 0; row < 4; row++){
            for (column = 0; column < 13; column++){
                if (d[row][column] == card){
                    printf("%-6s de %-8s\n", f[column], s[row]);
                    deck2[row][column] = 1;
                }
            }
        }
    }

    for (i = 0; i < 9; i++){
        pnt = (*pokerArray[i])(deck2);
        if (pnt != 0)
            break;
    }
    point(pnt);
}





int royalFlush(const int d2[][13])
{
    int i, j, k = 0, cont = 0, card[5],
        royal[5] = {0, 9, 10, 11, 12};

    if (flush(d2) == 5)
        for (i = 0; i < 4; i++){
            for (j = 0; j < 13; j++){
                if (d2[i][j] == 1){
                    card[k] = j;
                    k++;
                }
            }
        }
    bubble(card, 5);

    for (i = 0; i < 5; i++)
        if (card[i] == royal[i])
            cont++;

    if (cont == 5)
        return 1;

    return 0;
}

int straightFlush(const int d2[][13])
{
    if (flush(d2) == 5)
        if (straight(d2) == 6)
            return 2;

    return 0;
}

int poker(const int d2[][13])
{
    int i, j, incr, cont;

    for (incr = 0; incr < 13; incr++){
        cont = 0;
        for (i = 0; i < 4; i++){
            for (j = incr; j <= incr; j++){
                if (d2[i][j] == 1)
                cont++;
            }
        }
        if (cont == 4)
            return 3;
    }
    return 0;
}

int fullHouse(const int d2[][13])
{
    if (threeOfAKind(d2) == 7)
        if (pair(d2) == 9)
            return 4;

    return 0;
}

int flush(const int d2[][13])
{
    int i, j, cont;

    for (i = 0; i < 4; i++){
        cont = 0;
        for (j = 0; j < 13; j++){
            if (d2[i][j] == 1)
                cont++;
        }
        if (cont == 5)
            return 5;
    }
    return 0;
}

int straight(const int d2[][13])
{
    int i, j, k = 0, temp, num[5];

    for (i = 0; i < 4; i++){
        for (j = 0; j < 13; j++){
            if (d2[i][j] == 1){
                num[k] = j;
                k++;
            }
        }
    }
    bubble(num, 5);
    temp = num[0];
    for (i = 1; i < 5; i++){
        if (num[i] != temp + 1)
            return 0;
        temp = num[i];
    }
    return 6;
}


int threeOfAKind(const int d2[][13])
{
    int i, j, incr, cont;

    for (incr = 0; incr < 13; incr++){
        cont = 0;
        for (i = 0; i < 4; i++){
            for (j = incr; j <= incr; j++){
                if (d2[i][j] == 1)
                cont++;
            }
        }
        if (cont == 3)
            return 7;
    }
    return 0;
}

int twoPair(const int d2[][13])
{
    int i, j, incr, cont, pairCont = 0;

    for (incr = 0; incr < 13; incr++){
        cont = 0;
        for (i = 0; i < 4; i++){
            for (j = incr; j <= incr; j++){
                if (d2[i][j] == 1)
                cont++;
            }
        }
        if (cont == 2)
            pairCont++;
    }
    if (pairCont == 2)
        return 8;

    return 0;
}

int pair(const int d2[][13])
{
    int i, j, incr, cont;

    for (incr = 0; incr < 13; incr++){
        cont = 0;
        for (i = 0; i < 4; i++){
            for (j = incr; j <= incr; j++){
                if (d2[i][j] == 1)
                cont++;
            }
        }
        if (cont == 2)
            return 9;
    }
    return 0;
}

void point(int p)
{
    switch (p){
            case 1:
                printf("\nROYAL FLUSH\n");
                break;
            case 2:
                printf("\nSTRAIGHT FLUSH\n");
                break;
            case 3:
                printf("\nPOKER\n");
                break;
            case 4:
                printf("\nFULL HOUSE\n");
                break;
            case 5:
                printf("\nFLUSH\n");
                break;
            case 6:
                printf("\nSTRAIGHT\n");
                break;
            case 7:
                printf("\nTHREE OF A KIND\n");
                break;
            case 8:
                printf("\nTWO PAIR\n");
                break;
            case 9:
                printf("\nPAIR\n");
                break;
            default:
                printf("\nHIGH CARD\n");
    }
}

void bubble(int n[], int size)
{
    int i, j, temp;

    for (i = 0; i < size - 1; i++){
        for (j = i + 1; j < size; j++){
            if (n[i] > n[j]){
                temp = n[i];
                n[i] = n[j];
                n[j] = temp;
            }
        }
    }
}