Skocz do zawartości

[C] Pokerowy kalkulator


xao

Polecane posty

Witam!

 

Piszę sobie program do obliczeń szans w pokerze texas hold'em ale mam 2 problemy:

 

1. Program się wysypuje przy dodawaniu gracza do listy.

 

2. Zastanawiam się jak wprowadzić karty do programu, żeby można było po zczytaniu jakichś znaków do z klawy przypiąć je do structu gracza. Pomysły mam dwa : ) Albo jakoś je wrzucić w tablice albo zrobić sobie structy z kartami. W załączonym kodzie wersja ze structami ( nie wprowadzilem wszystkich, bo nie wiem czy dobrze mysle, a troche roboty z tym jest) . Fajnie by było, gdyby ktoś ten pomysł ocenił i ew. coś podpowiedział.

 


//main.c #####

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "poker.h"



int main(){     
       struct gracz **head= NULL;      
       char a; 
       int i = 0, iloscGraczy= 0;      
       printf("Witaj w programie Poker Odds Calculator!\n\n\n co chcesz zrobic?\n 1. Rozpocznij obliczenia dla nowej rozgrywki\n 2. Zakoncz program\n");
       scanf( "%c", &a);
       if (a>=1 && a<=3) {
               switch(a) {
                       case 49:
                               printf("Podaj ilosc graczy\n");
                               scanf("%d", &iloscGraczy);      
                               for( i=0; i<iloscGraczy; ++i) {                                                                         
                                       dodaj( head);
                               }
                       default: break;
               }
       }
       else
return 0;
}


//  poker.c ##### 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "poker.h"



void dodaj(struct gracz **glowa) {
    char nazwa2[300];

        getchar();
    printf("Podaj nazwe: ");
    gets(nazwa2);

        dodajGracza(glowa, nazwa2);
        printf("Gracz dodany\n\n");
}


void dodajGracza(struct gracz **glowa, char * nazwa) {
       int i = 1;
       struct gracz *player;
       player=(struct gracz*)malloc(sizeof(struct gracz));
       if(player==NULL)
               printf("Nie udalo sie zaalokowac pamieci");
       else
       {
               player->nazwa = malloc(strlen(nazwa)+1); 
               if(player->nazwa==NULL)
               {
                       printf("Nie udalo sie zaalokowac pamieci");
                       free(player); 
               }
               else
               {
                       strcpy(player->nazwa, nazwa);
                       player->id=i;
                       i++;
                       player->next=(*glowa);
                       (*glowa)=player;
               }
       }
}

void wprowadzKarty(struct gracz **glowa) {
       if (glowa!=NULL) {      
               printf("Podaj karty gracza: ",(**glowa).nazwa);
               //scanf(); do zczytywania kart
               //scanf(); --||--
       }
       else
               break; // ten brejk nie dziala, nie wiem czemu?
}

//  poker.h #####

#ifndef poker_h
#define poker_h

typedef
struct karty {
       char kolor[6];
       int wartosc;
};


typedef 
struct gracz {
       char * nazwa;
       int id;
       struct karty karta1;
       struct karty karta2;
       struct gracz * next;
};



void dodajGracza(struct gracz **glowa, char *nazwa);
void dodaj(struct gracz **glowa);
void wprowadzKarty(struct gracz **glowa);

#endif

// karty.h #####

#include <stdlib.h>
#include <stdio.h>
#include "poker.h"

#ifndef karty_h
#define karty_h

typedef
struct karty dwojka_czerwien {
       char *kolor[6] = czerwo;
       int wartosc = 02;
};

typedef
struct karty trojka_czerwien {
       char *kolor[6] = czerwo;
       int wartosc = 03;
};

typedef
struct karty czworka_czerwien {
       char * kolor[6] = czerwo;
       int wartosc = 04;
};

typedef
struct karty piatka_czerwien {
       char * kolor[6] = czerwo
       int wartosc = 05;
};

typedef
struct karty szostka_czerwien {
       char * kolor[6] = czerwo
       int wartosc = 06;
};

typedef
struct karty siodemka_czerwien {
       char * kolor[6] = czerwo
       int wartosc = 07;
};

typedef
struct karty osemka_czerwien {
       char * kolor[6] = czerwo
       int wartosc = 08;
};

#endif

Link do komentarza
Udostępnij na innych stronach

Co do tego "brejka", który nie działa: brejki są do wychodzenia z pętli, do wychodzenia z funkcji służy "return". Poza tym nie rozumiem, po co w ogóle dodałeś ten else, jeżeli warunek nie zostanie spełniony, to program sam wyjdzie z funkcji, bo nie będzie więcej instrukcji do wykonania. Co do reszty to nie znam C na tyle, żeby Ci pomóc.

Etharnion - 2D RPG

Szukam grafika chętnego do współpracy przy projekcie.

Link do komentarza
Udostępnij na innych stronach

Fajny pomysł ;P chociaż jest sporo już programów do liczenia Pot Odds ale jak napiszesz dobry to chętnie będe korzystał :P bo póki co jak muszę to liczę pot-y w pamięci hehe.

 

Poza tym po co masz metody do dodawania graczy? Zamierzasz wprowadzić ew. uwzględnianie co przeciwnicy przy stoliku mogą mieć na ręku? Przecież przy prostym liczeniu samych pot oddsów pomija się ew. uwzględnianie czy przeciwnicy mogą mieć którąś z kart, która jest naszym outem.

 

 

Poza tym jakoś nie specjalnie te struktury do kart zrobiłeś. Wydaje mi się, że opisywanie każdej karty osobną strukturą jest trochę nie trafione i pomyślałbym nad jakimś prostrzym rozwiązaniem tego ( bo w obecnej wersji to będziesz musiał zrobić 52struktury!? - bo robisz dla każdej karty osobną)

 

 

A jak już będziesz pisał ten program to postaraj się zrobić tak by używanie go wymagało jak najmniej czasu... bo wiadomo, że na ruch zwykle jest niewiele czasu a określenie swoich kart policzenie outów i uwzględnienie czasem innych aspektów(pozycji itp.) wymaga chwili zastanowienia się - chodźby dlatego nie korzystam już z darmowych kalulatorów niektórych ponieważ w pamięci nieraz jest się w stanie policzyć to co one nam podadzą (co innego gdybyś zrobił coś jak Calculatem Pro... ale to inna bajka :P)

 

 

Edit: Wg. mnie pisanie takiego programu jako konsolowego odpada z tego powodu co podałem wcześniej: musi być maksymalnie intuicyjny i prosty w obsłudze.

 

Edit2: Nie wnikałem bardzo w kod ale: po co bawisz się w jakieś dodawanie graczy, wpisywanie ich imion czy tam nicków. Zrób jak najprościej by nie było problemu w obsłudze tzn.: wybór 2własnych kart wprowadzanie kart z flopa, turn'a i żeby ew. ręczne wybranie out-ów i żeby od razu liczył pot odds'y. Bo zabawa w wybór ilości graczów, podawanie ich nicków jest bez sensu wg. mnie - jak się gra to nie ma czasu na takie pierdoły.

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

Kiedyś możne napisze coś niekonsolowego :) Na razie kończę we wrześniu 2 semestr infy stąd tak, a nie inaczej. Program muszę napisać na zaliczenie :) Pisze to tylko dla tego, że snake czy O/X zostało już wcześniej zajęte. Tak czy inaczej dzięki za uwagi i mile widziane następne :)

Link do komentarza
Udostępnij na innych stronach

Wydaje mi się że nie tędy droga. Nie znam tego typu pokera, ale obserwowałem w TV turnieje i wydaje mi się że z grubsza wiem o co chodzi. Mamy 52 karty w talii i na początek rozdajemy je po dwie losowo pośród N graczy odsłaniając je. Uważam, że ilość graczy N na początku gry jest ustalona. Podaj algorytm gry, postaram się pomóc.

Link do komentarza
Udostępnij na innych stronach

Masz rację ilość graczy jest ustalona. Ale jego program ma liczyć Pot Odds-y w przypadku, których nie bierze się pod uwagę ilości graczy tylko liczy się: karty dające nam zwycięzki układ i karty, które pozostały w talii nie dające nam "zwycięstwa" + uwzględnia się wysokość zbudowanej puli by sprawdzić czy zagranie w długim okresie czasu przyniesie nam korzyści. Tzn. jeśli pot oddsy są za małe nie należy "grać" jeśli są wystarczające w długim przedziale czasu dane zagranie zapewni nam przyrost $$

 

 

graczy odsłaniając je
Nie odsłania się ich :P

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

Masz rację ilość graczy jest ustalona. Ale jego program ma liczyć Pot Odds-y w przypadku, których nie bierze się pod uwagę ilości graczy tylko liczy się: karty dające nam zwycięzki układ i karty, które pozostały w talii nie dające nam "zwycięstwa" + uwzględnia się wysokość zbudowanej puli by sprawdzić czy zagranie w długim okresie czasu przyniesie nam korzyści. Tzn. jeśli pot oddsy są za małe nie należy "grać" jeśli są wystarczające w długim przedziale czasu dane zagranie zapewni nam przyrost $$

Nie odsłania się ich :P

Fatalnie śię wyraziłem, ja podglądam swoje karty, nikt inny ich nie widzi, ja również nie widzę kart przeciwników. Czyli analizować trzeba wszystkie możliwości biorąc pod uwagę aktualnie odsłonięte karty.

Link do komentarza
Udostępnij na innych stronach

  • 4 weeks later...

Witam ponownie :) Napisałem troche więcej. Kompilator jednak wywala mi parę błędów, które cięzko mi przeskoczyć i iść dalej. Może ktoś je przejrzeć ?

 


//#### main.c ####

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "poker.h"




int main(){     
       struct gracz **head= NULL;      
       char a; 
       int i = 0, iloscGraczy= 0;      
       printf("Witaj w programie Poker Odds Calculator!\n\n\n co chcesz zrobic?\n 1. Rozpocznij obliczenia dla nowej rozgrywki\n 2. Zakoncz program\n");
       scanf( "%c", &a);
       if (a>=1 && a<=3) {
               switch(a) {
                       case 49:
                               printf("Podaj ilosc graczy\n");
                               scanf("%d", &iloscGraczy);      
                               for( i=0; i<iloscGraczy; ++i) {                                                                         
                                       dodaj( head);
                               }
                       default: break;
               }
       }
       else
return 0;
}



//#### poker.c ####

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "poker.h"



void dodaj(struct gracz **glowa) {
    char nazwa2[300];

    printf("Podaj nazwe: ");
    gets(nazwa2);

        dodajGracza(glowa, nazwa2);
        printf("Gracz dodany\n\n");
}


void dodajGracza(struct gracz **glowa, char * nazwa) {
       int i = 1;
       struct gracz *player;
       player=(struct gracz*)malloc(sizeof(struct gracz));
       if(player==NULL)
               printf("Nie udalo sie zaalokowac pamieci");
       else
       {
               player->nazwa = malloc(strlen(nazwa)+1); 
               if(player->nazwa==NULL)
               {
                       printf("Nie udalo sie zaalokowac pamieci");
                       free(player); 
               }
               else
               {
                       strcpy(player->nazwa, nazwa);
                       player->id=i;
                       i++;
                       player->next=(*glowa);
                       player->kartyGracza=NULL;
                       (*glowa)=player;
               }
       }
}

void dodajKarte(struct karta **glowa) {
       struct karta * card;
       int nKolor = 0, nWartosc = 0;
       card=(struct karta*)malloc(sizeof(struct karta));
       atoi(nKolor);
       card->kolor = nKolor;
       atoi(nWartosc);
       card->wartosc = (nWartosc);
}


void wprowadzKartyGracza(struct gracz **glowa) {        
       while (glowa!=NULL) {           
               int i = 0;              
                       printf("Podaj karty gracza: ", (*glowa)->nazwa);
                       for(i = 0; i<2; ++i) {                          
                               printf("Podaj kolor karty nr", "%d" , &i,  "1- kier, 2- pik, 3- karo, 4- trefl");                       
                               printf("Podaj wartosc karty nr", "%d", &i, " 2- dwójka, 1 lub 14- as, itd." );                                  
                               glowa->*kartyGracza = dodajKarte(glowa);                        
                       }
       }

}

void wprowadzKartyStol( struct karta **glowa, int iloscKartStol) {
       struct karta * card;
       int i;
       for ( i = 0; i < iloscKartStol; ++i)
       dodajKarte(glowa)
;

}


int znajdzNajlepszyUklad(struct karta **glowa) {
       struct karta * pom;
       int i = 0; 
       int z = 0;
       while (glowa != NULL) {
               if (&glowa->kolor== &glowa->next->kolor) { 
                       for (i=0; i<5, glowa==NULL; ++i) { // sprawdzamy czy mamy kolor 
                               if (&glowa->wartosc == &glowa->next->wartosc+1 || &glowa->next->wartosc-1) { // sprawdzamy czy mamy pokera
                                       z++;
                                       if (z== 4) return 10;
                               }
                               if (i==4) return 6;
                       }

               }
               else {
                       while (glowa != NULL) {
                               if (&glowa->wartosc == &glowa->next->wartosc) {  // sprawdzamy czy mamy czworke
                                       (*glowa)=(*glowa)->next;
                                       ++i;
                                       if (i==4) return 8;
                               }
                       }
               }
               else { //sprawdzamy czy mamy pare/ trójke
                       while (glowa != NULL) {
                               if (&glowa->wartosc == &glowa->next->wartosc) {
                               glowa->uzyta = 1;
                               glowa->next->uzyta = 1;
                               i++;
                               if (i==2) return 2;
                               else 
                                       if (i==3) return 3;
                               else 
                                       if (i==4) return 4;
                               }
                       }

               }

       }

}

// #### poker.h ####

#ifndef poker_h
#define poker_h

typedef
struct karta {
       int kolor;
       int wartosc;
       int uzyta;
       struct karta * next;
};


typedef 
struct gracz {
       char * nazwa;
       int id;
       struct karty *kartyGracza;
       struct gracz * next;
};

void dodajGracza(struct gracz **glowa, char *nazwa);
void dodaj(struct gracz **glowa);
void dodajKarte( struct karta **glowa);
void wprowadzKartyGracza(struct gracz **glowa);
void wprowadzKartyStol(struct karta **glowa, int iloscKartStol);
int znajdzNajlepszyUklad(struct kartyGracza **glowa);
int obliczOdds(struct gracz **glowa);


#endif 

 

z góry dzięki za pomoc.

Link do komentarza
Udostępnij na innych stronach

Error8error C2059: syntax error : '('poker.c63poker odds calculator

Error10error C2059: syntax error : '('poker.c84poker odds calculator

Error11error C2143: syntax error : missing ';' before ')'poker.c85poker odds calculator

Error12error C2059: syntax error : '}'poker.c93poker odds calculator

Error13error C2059: syntax error : 'else'cpoker.c103poker odds calculator

Error14error C2059: syntax error : '}'poker.c117poker odds calculator

 

proszę :) Mi te błędy specjalnie nic nie mówią :\

Link do komentarza
Udostępnij na innych stronach

linia 63: glowa->(*kartyGracza) = dodajKarte(glowa);

powinno chyba być glowa->*kartyGracza = dodajKarte(glowa);

linia 84: if (((glowa)->(&kolor)) == (glowa)->next->(&kolor))) {

ja bym dał

if (&glowa->kolor) == &glowa->next->kolor) {

85:

for (i=0; i, glowa==NULL; ++i) {

coś mi się to nie podoba,tylko nie wiem czemu :)

do bym to sprawdzał ifem + break

 

w pozostałych sprawdź czy klamry są dobrze pozamykane

Link do komentarza
Udostępnij na innych stronach

W ostatnim poście z kodem wrzuciłem kod po zmianach. Zmodyfikowałem jeszcze pare rzeczy , bo gdzieniegdzie zamiast karta miałem karty i takie tam. Teraz za to mam takie fajne rzeczy :\

 

Error7error C2059: syntax error : '*'poker.c63poker odds calculator

Error9error C2223: left of '->kolor' must point to struct/unionpoker.c84poker odds calculator

Error10error C2223: left of '->next' must point to struct/unionpoker.c84poker odds calculator

Error11error C2223: left of '->wartosc' must point to struct/unionpoker.c86poker odds calculator

Error12error C2223: left of '->next' must point to struct/unionpoker.c86poker odds calculator

Error13error C2223: left of '->next' must point to struct/unionpoker.c86poker odds calculator

Error14error C2223: left of '->wartosc' must point to struct/unionpoker.c96poker odds calculator

Error15error C2223: left of '->next' must point to struct/unionpoker.c96poker odds calculator

Error16error C2181: illegal else without matching if poker.c103poker odds calculator

Error17error C2223: left of '->wartosc' must point to struct/unionpoker.c105poker odds calculator

Error18error C2223: left of '->next' must point to struct/unionpoker.c105poker odds calculator

Error19error C2223: left of '->uzyta' must point to struct/unionpoker.c106poker odds calculator

Error20error C2223: left of '->next' must point to struct/unionpoker.c107poker odds calculator

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Gość
Temat jest zablokowany i nie można w nim pisać.
×
×
  • Utwórz nowe...