#include #include #include #include "hra.h" #include "hrac.h" HRA *prvni = NULL; const int POCET_HRACU = 2; int pocet_her = 0; int pocet_malloc = 0; int pocet_free = 0; HRA *vytvor_hru(int pocet_hracu){ pocet_her++; HRA *pom = (HRA *)malloc(sizeof(HRA)); if(pom == NULL){ printf("Malo pameti\n"); exit(1); } pom->id = pocet_her; pom->ceka_na_hrace = 1; pom->hraje_se = 0; pom->ukoncena = 0; pom->prvni = NULL; pom->dalsi = NULL; pom->pocet_hracu = pocet_hracu; pocet_malloc++; /*if(pocet_her == 2){ prvni->ceka_na_hrace = 1; }*/ printf("Vytvarim novou hru - id = %d, pocet hracu = %d\n",pocet_her,pom->pocet_hracu); return pom; } void pridej_hru(int pocet_hracu){ HRA *pom = vytvor_hru(pocet_hracu); HRA *ukazatel; if(prvni == NULL){ prvni = pom; } else{ ukazatel = prvni; while(ukazatel != NULL){ if(ukazatel->dalsi == NULL){ ukazatel->dalsi = pom; break; } ukazatel = ukazatel->dalsi; } } printf("Pridavam hru do seznamu\n"); } int pocet_hracu(SEZNAM_HRACU *prvni){ int pocet = 0; SEZNAM_HRACU *ukazatel = prvni; while(ukazatel != NULL){ pocet++; ukazatel = ukazatel->dalsi; } return pocet; } void vypis_seznam(){ HRA *ukazatel = prvni; printf("Seznam her:\n"); while(ukazatel != NULL){ printf("id - %d, pocet hracu = %d\n",ukazatel->id,ukazatel->pocet_hracu); vypis_seznam_hracu(ukazatel->prvni); ukazatel = ukazatel->dalsi; } } void vypis_hru(HRA *hra){ printf("Hra:\n"); printf("id - %d\n",hra->id); printf("cekac_na_hrace - %d\n",hra->ceka_na_hrace); printf("pocet_hracu - %d\n",hra->pocet_hracu); printf("hraje_se - %d\n",hra->hraje_se); printf("ukoncena - %d\n",hra->ukoncena); } void start_hry(HRA *hra){ if(pocet_hracu(hra->prvni) == hra->pocet_hracu){ printf("Startruju hru %d\n",hra->id); hra->ceka_na_hrace = 0; hra->hraje_se = 1; vypis_hru(hra); } } void prirad_hre_hrace(HRAC *hrac, HRA *hra){ SEZNAM_HRACU *ukazatel = hra->prvni; if(ukazatel == NULL){ hra->prvni = vytvor_polozku(hrac); printf("Pridavam prvniho hrace do hry\n"); printf("Pridal sem hrace do seznamu hry - hrac %d\n",hrac->socket); } else{ while(ukazatel != NULL){ if(ukazatel->dalsi == NULL){ ukazatel->dalsi = vytvor_polozku(hrac); printf("Pridal sem hrace do seznamu hry - hrac %d\n",hrac->socket); start_hry(hra); break; } ukazatel = ukazatel->dalsi; } } } void pridej_hrace_do_hry(HRAC *hrac){ HRA *ukazatel = prvni; if(ukazatel == NULL){ pridej_hru(POCET_HRACU); prirad_hre_hrace(hrac,prvni); } else{ while(ukazatel != NULL){ if(pocet_hracu(ukazatel->prvni) < ukazatel->pocet_hracu){ prirad_hre_hrace(hrac, ukazatel); break; } else if((pocet_hracu(ukazatel->prvni) == ukazatel->pocet_hracu) && (ukazatel->dalsi == NULL)){ pridej_hru(POCET_HRACU); ukazatel = ukazatel->dalsi; } else{ ukazatel = ukazatel->dalsi; } } } } /* * Existuje v rozehranej hre - 1; * Existuje ale neceka se na nej - 2; * Neexistuje - 0; */ int existujici_hrac(HRAC *hrac){ HRA *ukazatel = prvni; SEZNAM_HRACU *seznam; HRAC * pom; while(ukazatel != NULL){ seznam = ukazatel->prvni; while(seznam != NULL){ /*if((strcmp(hrac->jmeno,seznam->hrac->jmeno) == 0) && (ukazatel->hraje_se == 1) && (ukazatel->ceka_na_hrace == 1)){ pom = seznam->hrac; seznam->hrac = hrac; hrac->skore = pom->skore; ukazatel->ceka_na_hrace = 0; smaz_hrace(&pom); printf("Obnovuju hrace - %s\n",hrac->jmeno); return 1; }*/ /*else*/ if((strcmp(hrac->jmeno,seznam->hrac->jmeno) == 0)){ printf("Tento hrac jiz existuje\n"); return 2; } seznam = seznam->dalsi; } ukazatel = ukazatel->dalsi; } return 0; } void *zarazeni_hrace(void *arg){ HRAC *hrac = (HRAC *) arg; char *jmeno = (char *)malloc(50*sizeof(char)); char zadost[] = "J;;"; int vse_ok = 0; int existujici = 0; while(vse_ok == 0){ bzero(jmeno,50); /*if(send(hrac->socket, zadost,strlen(zadost),0)>0){ if(recv(hrac->socket, jmeno, 50, 0)>0){ strcpy(hrac->jmeno,jmeno); vypis_hrace(hrac); existujici = existujici_hrac(hrac); if(existujici == 0){ pridej_hrace_do_hry(hrac); vse_ok = 1; } /*else if(existujici == 1){ vse_ok = 1; }*/ /*else if(existujici == 2){ printf("Zadam nove jmeno\n"); vse_ok = 0; } vypis_seznam(); }*/ if(recv(hrac->socket, jmeno, 50, 0)>0){ strcpy(hrac->jmeno,jmeno); printf("aaa%sbbb\n",hrac->jmeno); vypis_hrace(hrac); existujici = existujici_hrac(hrac); if(existujici == 0){ pridej_hrace_do_hry(hrac); vse_ok = 1; } else if(existujici == 2){ printf("Zadam nove jmeno\n"); vse_ok = 0; if(send(hrac->socket, zadost, 3*sizeof(char),0)<0){ printf("Ztrata spojeni pri odesilani - mazani hrace\n"); smaz_hrace(&hrac); vse_ok = 1; } else{printf("poslano %s\n",zadost);} } vypis_seznam(); } else{ printf("Ztrata spojeni pri prijmu - mazani hrace\n"); smaz_hrace(&hrac); vse_ok = 1; } } free(jmeno); } /*void *obsluha(void *arg){ HRAC *hrac = (HRAC *)arg; while(1){ } }*/