xao Napisano Lipiec 25, 2010 Zgłoś Share Napisano Lipiec 25, 2010 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 More sharing options...
Adam27 Napisano Lipiec 25, 2010 Zgłoś Share Napisano Lipiec 25, 2010 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 More sharing options...
5corpio Napisano Lipiec 25, 2010 Zgłoś Share Napisano Lipiec 25, 2010 Fajny pomysł ;P chociaż jest sporo już programów do liczenia Pot Odds ale jak napiszesz dobry to chętnie będe korzystał 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 ) 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 More sharing options...
xao Napisano Lipiec 25, 2010 Autor Zgłoś Share Napisano Lipiec 25, 2010 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 More sharing options...
Edward Napisano Lipiec 26, 2010 Zgłoś Share Napisano Lipiec 26, 2010 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 More sharing options...
5corpio Napisano Lipiec 26, 2010 Zgłoś Share Napisano Lipiec 26, 2010 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 Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Edward Napisano Lipiec 30, 2010 Zgłoś Share Napisano Lipiec 30, 2010 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 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 More sharing options...
xao Napisano Sierpień 24, 2010 Autor Zgłoś Share Napisano Sierpień 24, 2010 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 More sharing options...
5corpio Napisano Sierpień 25, 2010 Zgłoś Share Napisano Sierpień 25, 2010 Jakbyś jeszcze powiedział jakie błędy i w których linijkach to byłoby wyśmienicie;) bo takto ciężko się wróży. Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
xao Napisano Sierpień 26, 2010 Autor Zgłoś Share Napisano Sierpień 26, 2010 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 More sharing options...
sazian Napisano Sierpień 26, 2010 Zgłoś Share Napisano Sierpień 26, 2010 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 More sharing options...
xao Napisano Sierpień 26, 2010 Autor Zgłoś Share Napisano Sierpień 26, 2010 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 More sharing options...
Adam27 Napisano Sierpień 27, 2010 Zgłoś Share Napisano Sierpień 27, 2010 Znasz angielski? Jeżeli tak, to sobie przetłumacz błąd, przejdź do linijki w której się on znajduje i go popraw. A jeżeli nie znasz, to się naucz. Nie oczekuj, że ktoś ci będzie poprawiał każdy błąd jaki ci wywala kompilator. Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.