#include #include enum Symbolid{sNone, sRist, sRing}; enum ManguSeisud{msNone,msVoit,msViik}; enum ErrNumbrid{enNone,enKohtKinni,enValeKoht} const true = -1; const false = 0; int TTT[3][3]; //trips-traps-trulli lahinguväli void PuhastaLahinguvali(void){ int i, j; for(i=0;i<3;i++){ for(j=0;j<3;j++){ TTT[i][j]=sNone; } } return; } void JoonistaSymbol(int Sym){ switch(Sym){ case sNone: printf(" "); break; case sRist: printf("><"); break; case sRing: printf("()"); break; } return; } void JoonistaRuudustik(void){ int i, j; system("cls"); for(i=0;i<3;i++){ for(j=0;j<3;j++){ JoonistaSymbol(TTT[i][j]); if(j<2){ printf("|"); } } printf("\n"); if(i<2){ printf("--------\n"); } } return; } int TeeNumbriks(char Chr){ return Chr - 49; } int OnNumber(char Chr){ if(Chr>=49 && Chr<=51){ return true; }else{ return false; } } int ManguSeis(void){ int i,j; // kontrollime horisontaale for(i=0;i<3;i++){ if(TTT[i][0]>sNone && TTT[i][0]==TTT[i][1] && TTT[i][0]==TTT[i][2]){ return msVoit; } } // kontrollime vertikaale for(i=0;i<3;i++){ if(TTT[0][i]>sNone && TTT[0][i]==TTT[1][i] && TTT[0][i]==TTT[2][i]){ return msVoit; } } // kontrollime diagonaale // diagonaal 1 if(TTT[0][0]>sNone && TTT[0][0]==TTT[1][1] && TTT[0][0]==TTT[2][2]){ return msVoit; } // diagonaal 2 if(TTT[0][2]>sNone && TTT[0][2]==TTT[1][1] && TTT[0][2]==TTT[2][0]){ return msVoit; } // kontrollime viiki for(i=0;i<3;i++){ for(j=0;j<3;j++){ if(TTT[i][j]==sNone){ // kui on kasvõi üks tühi lahter, siis viiki pole return msNone; } } } // kui kõik lahtrid olid täis, siis on viik return msViik; } void Voit(int Symbol){ if(Symbol==sRist){ printf("Esimene m2ngija v6itis!\n"); }else{ printf("Teine m2ngija v6itis!\n"); } return; } void Viik(void){ printf("M2ng j2i viiki...\n"); return; } int VastandSymbol(int Symbol){ if(Symbol==sRist){ return sRing; }else{ return sRist; } } void KirjutaKelleKaik(int Symbol){ if(Symbol==sRist){ printf("Esimese mängija käik.\n"); }else{ printf("Teise mängija käik.\n"); } return; } void KirjutaVeateade(ErrNo){ switch(ErrNo){ case enKohtKinni: printf("Sinna kohta ei saa k2jja - see on juba kinni.\n"); break; case enValeKoht: printf("Sisestasid vale sümboli. Ainult arvud 1 kuni 3 on lubatud.\n"); printf("Sisestus olgu kujul 'xy' kus x on reanumber ja y veerunumber.\n"); break; } return; } int main(int argc, char *argv[]) { char RidaChr, VeergChr, Enter; int x,y; int AktiivneSymbol=sRist; int Seis; int ErrNo=enNone; PuhastaLahinguvali(); while(true){ JoonistaRuudustik(); KirjutaVeateade(ErrNo); KirjutaKelleKaik(AktiivneSymbol); printf("Sisesta rida ja veerg: "); scanf("%c%c%c", &RidaChr, &VeergChr, &Enter); // kontrollime sisendi õigsust if(OnNumber(RidaChr) && OnNumber(VeergChr)){ y = TeeNumbriks(RidaChr); x = TeeNumbriks(VeergChr); // kontrollime, kas väli on tühi if(TTT[y][x]==sNone){ // kirjutame väljale TTT[y][x]=AktiivneSymbol; // leiame mängu seisu Seis = ManguSeis(); if(Seis==msVoit){ JoonistaRuudustik(); Voit(AktiivneSymbol); break; } if(Seis==msViik){ JoonistaRuudustik(); Viik(); break; } AktiivneSymbol = VastandSymbol(AktiivneSymbol); ErrNo = enNone; }else{ ErrNo = enKohtKinni; } }else{ ErrNo = enValeKoht; } } system("PAUSE"); return 0; }