Rozdawanie kart poker

0

Dobry, zależy mi, aby dowiedzieć się co zmienić w tak napisanym programie rozdawania kart, aby zasady były stricte pod pokera, czyli głównie n>2 graczy i oczywiście rozdanie max 5 kart na turę.

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

const char kolor[ 4 ] = { '\003', '\004', '\005', '\006' };
void tasuj( int[][ 13 ] );
void talia( int[][ 13 ] );
void rozdaj( int[] );

int main()
{
    int karty[ 4 ][ 13 ] = { 0 };
    srand( time( 0 ) );
    tasuj( karty );
    talia( karty );
    rozdaj( karty[ 0 ] );
    getche();
    return 0;
}

void tasuj( int tkarty[][ 13 ] )
{
    int kolor, walor;
    for( int karta = 1; karta <= 52; karta++ )
    {
        do { kolor = rand() % 4;
            walor = rand() % 13;
        }
        while( tkarty[ kolor ][ walor ] != 0 );
       
        tkarty[ kolor ][ walor ] = karta;
    }
}

void talia( int tkarty[][ 13 ] )
{
    printf( "\n As 2 3 4 5 6" );
    printf( " 7 8 9 10 W D K\n" );
    for( int w = 0; w <= 3; w++ )
    {
        printf( "\n %c", kolor[ w ] );
        for( int k = 0; k <= 12; k++ )
             printf( " %3d ", tkarty[ w ][ k ] );
       
    }
}

void rozdaj( int tkarty[] )
{
    const char * walor[ 13 ] = { "as", "dwojka",
        "trojka", "czworka", "piatka",
        "szostka", "siodemka", "osemka", "dziewiatka",
        "dziesiatka", "walet", "dama", "krol" };
    printf( "\n\n N W S E \n" );
    for( int i = 1; i <= 52; i++ )
    {
        for( int j = 0; j < 52; j++ )
        {
            if( tkarty[ j ] == i )
                 printf( " %c %10s ", kolor[ j / 13 ], walor[ j % 13 ] );
           
        }
        if( i % 4 == 0 ) printf( "\n" );
       
    }
}
3

Spróbuj kliknąć ten przycisk zanim wrzucisz swój kod. Dzięki temu będzie pokolorowany i zachowane będą wcięcia.
screenshot-20220702170408.png

1
Kvakva napisał(a):

Dobry, zależy mi, aby dowiedzieć się co zmienić w tak napisanym programie rozdawania kart, aby zasady były stricte pod pokera, czyli głównie n>2 graczy i oczywiście rozdanie max 5 kart na turę.

Chyba niemal wszystko zaczynając od poprawienia posta i wrzucenia sformatowanego kodu.
W swoim programie w ogóle nie masz czegoś takiego jak karty, które tasujesz.
Twoja funkcja tasuj nie tasuje tylko losuje a to ogromna różnica.

void tasuj( int tkarty[][ 13 ] )
{
  int kolor, walor;
  for( int karta = 1; karta <= 52; karta++ ) {
    do {
      kolor = rand() % 4;
      walor = rand() % 13;
    }
  while( tkarty[ kolor ][ walor ] != 0 ){  
      tkarty[ kolor ][ walor ] = karta;
  }
}

Już pomijając, że powyższe i tak nie zadziała to w Twoim pokerze może się okazać, że ktoś dostanie na rękę 5 asów PIK co jest bez sensu.
Każda karta może występować tylko raz.

Szczerze mówiąc to jakieś totalne masło maślane...

1

Jakieś dziesięć lat, albo i dalej, temu zmajstrowałem prymitywnego, ale działającego pokera. Możesz sobie podejrzeć https://github.com/pdy/blast_from_the_past/tree/main/PrimitivePoker
Losowanie i rozdawanie odbywa się w Deck.cpp

1
katakrowa napisał(a):

W swoim programie w ogóle nie masz czegoś takiego jak karty, które tasujesz.

To mu google podało. na kwerendę jaką umiał zadać.
Kol wyczerpał czas / energię / umiejętności do samodzielnej pracy.
Z teraz frajerzy zmieńcie mi przypadkowy kod, żeby dopasować do zadania.

Kod

void tasuj( int tkarty[][ 13 ] )
{
    int kolor, walor;
    for( int karta = 1; karta <= 52; karta++ )
    {
        do { kolor = rand() % 4;
            walor = rand() % 13;
        }
        while( tkarty[ kolor ][ walor ] != 0 );
       
        tkarty[ kolor ][ walor ] = karta;
    }
}

się odnajduje w google, i są to wpisy z 2015 2017 roku - kolega go zaledwie zerżnął, nawet nie czytając

1 użytkowników online, w tym zalogowanych: 0, gości: 1