#include #include typedef struct karta { int vrednost, znak, stih, indexuspilu, isused; char ispis; } karta; int round(float x){ float pocetna=x; float razlika; while(x>=1.0) x-=1; if(x>=0.5) razlika=1.0-x; else razlika=-x; return (int)(pocetna+razlika); }; int rnd_karta(){ return (int) 52*(rand() / (RAND_MAX + 1.0)); }; void conv_d2b (int x, int *c) { int i; for (i=0;i<20; i++) *(c++) = (x>> i) & 0x1; } char* odredi_simbol(int znak){ switch(znak) { case 1: return "♠"; break; case 2: return "\033[22;31m♦\033[22;37m"; break; case 3: return "♣"; break; case 4: return "\033[22;31m♥\033[22;37m"; break; }; }; void iscrtaj_znak(int xpos, int ypos, int znak){ int i,j; if (znak==1) { gotoxy(xpos+4, ypos+2); printf("Q"); gotoxy(xpos+3, ypos+3); printf("QQQ"); gotoxy(xpos+2, ypos+4); printf("QQQQQ"); gotoxy(xpos+2, ypos+5); printf("Q Q Q"); gotoxy(xpos+4, ypos+6); printf("Q"); }; //pik if (znak==2) {printf("\033[22;31m"); gotoxy(xpos+4, ypos+2); printf("Q"); gotoxy(xpos+3, ypos+3); printf("QQQ"); gotoxy(xpos+2, ypos+4); printf("QQQQQ"); gotoxy(xpos+3, ypos+5); printf("QQQ"); gotoxy(xpos+4, ypos+6); printf("Q"); printf("\033[22;37m"); }; //karo if (znak==3) { gotoxy(xpos+4, ypos+2); printf("Q"); gotoxy(xpos+2, ypos+3); printf("(QQQ)"); gotoxy(xpos+4, ypos+4); printf("Q"); gotoxy(xpos+4, ypos+5); printf("Q"); gotoxy(xpos+3, ypos+6); printf("QQQ"); }; //pik if (znak==4) {printf("\033[22;31m"); gotoxy(xpos+3, ypos+2); printf("Q Q"); gotoxy(xpos+2, ypos+3); printf("QQQQQ"); gotoxy(xpos+3, ypos+4); printf("QQQ"); gotoxy(xpos+4, ypos+5); printf("Q"); printf("\033[22;37m"); }; //herc }; /* XXXXXXXXXXX X X X Q X X QQQ X X QQQQQ X X Q Q Q X X Q X X X XXXXXXXXXXX XXXXXXXXXXX X X X X X X XXX X X XXXXX X X XXX X X X X X X XXXXXXXXXXX XXXXXXXXXXX X X X X X Q X X (QQQ) X X Q X X Q X X X XXXXXXXXXXX XXXXXXXXXXX X X X Q Q X X QQQQQ X X QQQ X X Q X X X XXXXXXXXXXX */ int iscrtaj_kartu(int xpos, int ypos, int vrednost, int znak, int limit){ int i,j,k; if(limit==0) limit=7; gotoxy(xpos, ypos); printf("┌"); for(i=1; i<9; i++) {gotoxy(xpos+i, ypos); printf("─");}; gotoxy(xpos+8, ypos); printf("┐"); for(i=1; i3) {gotoxy(xpos, ypos+limit); printf("└"); for(i=1; i<8; i++) {gotoxy(xpos+i, ypos+limit); printf("─");}; gotoxy(xpos+8, ypos+limit); printf("┘");} gotoxy(xpos+1,ypos+1); printf("%d", vrednost); if (limit>3) {if(vrednost>=10) gotoxy(xpos+6,ypos+6); else gotoxy(xpos+7, ypos+6);printf("%d", vrednost);}; gotoxy(xpos+1,ypos+2); printf("%s", odredi_simbol(znak)); if (limit>3) {gotoxy(xpos+7, ypos+5); printf("%s", odredi_simbol(znak));}; if (limit>3) iscrtaj_znak(xpos, ypos, znak); } int count_talon(karta *niz){ int i=0; while(niz[i].vrednost!=-1) i++; return i; } int count_odnete(karta *niz){ int i=0; while(niz[i].vrednost!=-1) i++; return i; } void spakuj_talon(karta *talon){ //skidanje nula iz talona; int i,j,k=0, duzina; duzina=count_talon(talon); for(i=0; i=10)||((spil[i].vrednost==2)&&(spil[i].znak==3))) spil[i].stih=1; if((spil[i].vrednost==10)&&(spil[i].znak==2)) spil[i].stih=2; if(spil[i].vrednost==1) spil[i].stih=1; count++; } } void podeli(karta *igrac, karta *spil){ //deljenje igracima int i,k; for(i=0; i<6; i++){ k=rnd_karta(); while(spil[k].isused==1) {k=rnd_karta();}; igrac[i]=spil[k]; igrac[i].indexuspilu=k; spil[k].isused=1; } } void na_talon(karta *talon, karta *spil){ //pocetno deljenje na talon int i,k; for(i=0; i<4; i++){ k=rnd_karta(); while(spil[k].isused==1) {k=rnd_karta();}; talon[i]=spil[k]; spil[k].isused=1; }; for(i=4; i<20; i++) talon[i].vrednost=-1; } int izaberi_kartu(karta *igrac, int *brojkarata){ int i, vr, br_karata=*brojkarata; char znak; while(br_karata==*brojkarata){ printf("Karte: "); for(i=0; i<6; i++){ printf("%d%c ", (igrac[i].vrednost==0)?0:igrac[i].vrednost, (igrac[i].vrednost==0)?' ':igrac[i].ispis); } printf(" Izbor (vrednost, boja): "); scanf("%d %c", &vr, &znak); if(vr==0) exit(1); for(i=0; i<6; i++){ if((igrac[i].vrednost==vr)&&(igrac[i].ispis==znak)) { (*brojkarata)--; return igrac[i].indexuspilu; } } gotoxy(2,14); printf("Ne posedujete tu kartu!\n"); gotoxy(2,15); printf(" "); gotoxy(2,15); } } int broj_bodova(karta *odnete, int table){ int i=0, zbir=0, count=0, bonus=0; for(i=0; i<52; i++) {zbir=zbir+odnete[i].stih; if (odnete[i].vrednost>0) count++;}; if (count>26) bonus=3; return zbir+table+bonus; } int izaberi_kombinaciju(int broj_kombinacija, karta *talon, karta *spil, int *komb, int *broj_komb, int indeks){ int duzina, izbor, ispravan=0, x=0, zbir=0, proizvod=0, ima_kec=0; duzina=count_talon(talon); int j,k, broj_nosenja=0, i=0, izabrane[duzina], bin[20], provera[duzina], za_brisanje[duzina], brojac=0, count=0, indikator=0; char znakovi[duzina]; for(i=0; i10)&&(zbir+10<=spil[indeks].vrednost)) { za_brisanje[brojac]=j; brojac++; }; for(k=0; k=0) {x=za_brisanje[j]; provera[x]=0;} } else { for(k=0; k0) {iscrtaj_kartu(2+15*brojac, y, talon[i].vrednost, talon[i].znak, 0); brojac++; if(brojac>=5) {brojac=0; y+=3;}; }; } void iscrtaj_niz(karta *niz){ int i, duzina, brojac=0, y=22; for(i=0; i<6; i++) if(niz[i].vrednost>0) {iscrtaj_kartu(2+12*i, y, niz[i].vrednost, niz[i].znak, 3);}; } void intro(){ int i=0; char c; system("clear"); iscrtaj_kartu(2, 2, 10, 1, 0); iscrtaj_kartu(2, 10, 2, 3, 0); iscrtaj_kartu(20, 15, 13, 4, 0); iscrtaj_kartu(40, 15, 14, 2, 0); gotoxy(25,10); printf("T A B L I C I"); gotoxy(2, 25); c=getchar(); clrscr(); system("clear"); } void iscrtaj(karta *talon, karta *niz){ iscrtaj_talon(talon); iscrtaj_niz(niz); } // ----------------------funkcije int main() { srand((unsigned)time(NULL)); karta prvi[6], drugi[6], talon[20], odnete1[53], odnete2[53], spil[53]; int table1, table2, prvi_brojkarata=6, drugi_brojkarata=6, broj_u_spilu=48; //broj_u_spilu bez talona int indeks=0, pomocni[100], izbor,i=0, broj_kombinacija=0, kombinacija[20]; int max_bodova, p_izbor=0, count=0, br_igraca=0; intro(); system("clear"); system("clear"); clrscr(); gotoxy(2, 15); printf("Do koliko poena se igra (0 za izlaz): "); scanf("%d", &max_bodova); if(max_bodova<1) {clrscr(); ;} for(i=0; i<53;i++) {odnete1[i].vrednost=-1; odnete1[i].stih=0; odnete2[i].vrednost=- 1; odnete2[i].stih=0;}; while((broj_bodova(odnete1, table1)0){ system("clear"); gotoxy(50, 2); printf("Prvi: %d Drugi: %d\n\n\n", broj_bodova(odnete1, table1), broj_bodova(odnete2, table2)); for(i=0; i<100; i++) pomocni[i]=0; i=0; izbor=0; iscrtaj(talon, prvi); gotoxy(2, 15); izbor=0; indeks=izaberi_kartu(prvi, &prvi_brojkarata); (talon, spil, indeks, pomocni, &broj_kombinacija); izbor=izaberi_kombinaciju(broj_kombinacija, talon, spil, kombinacija, &broj_kombinacija, indeks); gotoxy(2,15); while(izbor==-1) { system("clear"); iscrtaj(talon, prvi); gotoxy(2,13); printf("Neispravna kombinacija. Izaberite drugu! \n\n"); izbor=izaberi_kombinaciju(broj_kombinacija, talon, spil, kombinacija, &broj_kombinacija, indeks); }; if(izbor!=0) p_izbor=1; obrada_izbora(izbor, talon, prvi, indeks, pomocni, spil, odnete1, &table1, kombinacija, broj_kombinacija); system("clear"); for(i=0; i<100; i++) pomocni[i]=0; i=0; izbor=0; spakuj_talon(talon); system("clear"); iscrtaj(talon, drugi); gotoxy(50, 2); printf(" Prvi: %d Drugi: %d\n\n\n", broj_bodova(odnete1, table1), broj_bodova(odnete2, table2)); gotoxy(2,15); indeks=izaberi_kartu(drugi, &drugi_brojkarata); izbor=izaberi_kombinaciju(broj_kombinacija, talon, spil, kombinacija, &broj_kombinacija, indeks); obrada_izbora(izbor, talon, drugi, indeks, pomocni, spil, odnete2, &table2, kombinacija, broj_kombinacija); i=0; if(izbor!=0) p_izbor=2; if(drugi_brojkarata==0) { if(p_izbor==1) {count=count_odnete(odnete1); for(i=0; i=max_bodova) printf("\n\n Pobedio prvi igrac "); else printf("\n\n Pobedio drugi igrac"); return 1; };