Nadesłany przez Kamil Konieczka, 26 czerwca 2010 04:46
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
xo v1.5.cpp:
// (c) 2010 Kamil Konieczka // www.algorytm.org // XO v1.5 // Program napisany na początku edukacji, także proszę o wyrozumiałość // Grę najlepiej obsługiwać numlockiem. Plansza pokrywa się z cyframi #include <iostream> #include <string> #include <conio.h> #include <stdlib.h> using namespace std; /******** FUNKCJE ***************************/ void plansza(); void pole(int x,int y); void czysc(); void start(); void move(int g); void rezultat(int win); void rank(); int rozp(); int spr(); int gracze(); /************************************************/ int tab[3][3]; int wyb, win, g, gstat=0, pkt_g1=0, pkt_g2=0, tmp; string gracz1, gracz2; float v=1.5; /************************************************/ main() { while(1) { win=0; start(); cout<<"1. Nowa gra\n2. Wprowadz graczy\n0. Koniec\n\n"; rank(); cout<<"\n\nTwoj wybor: ";cin>>wyb; switch(wyb){ case 1: if(gstat!=0) { start(); g=rozp(); while(1) { plansza(); move(g); plansza(); win=spr(); if(win!=0)break; g++; } rezultat(win); getch(); break; } else { cout<<"Najpierw prowadz graczy"; getch(); break; } case 2: gstat=gracze(); break; case 0: return 0; default : cout<<"Brak opcji..."; getch(); } czysc(); } } /************** SOURCES *****************************/ int rozp() { cout<<"Kto rozpoczyna?\n1. "<<gracz1<<"\n2. "<<gracz2<<"\n\nTwoj wybor:"; cin>>g; return g; } //************** //************** int gracze() { start(); cout<<"Podaj nazwe gracza X\n\n"; cin>>gracz1; start(); cout<<"Podaj nazwe gracza O\n\n"; cin>>gracz2; return 1; } //************** void rezultat(int win) { if(win==1) { if(g%2) { cout<<"\nWygrywa gracz: "<<gracz1; pkt_g1++; } else { cout<<"\nWygrywa gracz: "<<gracz2; pkt_g2++; } } else cout<<"Remis"; } //************** void move(int g) { int m,x,y,bl; do{ if(g%2)cout<<"\n"<<gracz1<<" wybierz pole: "; else cout<<"\n"<<gracz2<<" wybierz pole: "; cin>>m; if(m>9||m<1) { cout<<"\nBrak podanego pola na plaszy użytkowniku..."; getch(); bl=0; plansza(); } else { /*A*/if(m<4&&m>0){y=(m-1);x=2;bl=1;} /*B*/if(m<7&&m>3){y=(m-4);x=1;bl=1;} /*C*/if(m<10&&m>6){y=(m-7);x=0;bl=1;} if(tab[x][y]!=0) { cout<<"\nPole zajete użytkowniku..."; getch(); bl=0; plansza(); } } }while(bl!=1); if(g%2) tab[x][y]=1; else tab[x][y]=2; } //************** void pole(int x,int y){ if(tab[x][y]==0)cout<<" "; if(tab[x][y]==1)cout<<"X"; if(tab[x][y]==2)cout<<"O";} //************** int spr(){ for(int c=0;c<3;c++){ if(((tab[c][0]==1)&&(tab[c][1]==1)&&(tab[c][2]==1))||((tab[c][0]==2)&&(tab[c][1]==2)&&(tab[c][2]==2)))return 1; if(((tab[0][c]==1)&&(tab[1][c]==1)&&(tab[2][c]==1))||((tab[0][c]==2)&&(tab[1][c]==2)&&(tab[2][c]==2)))return 1;} if(((tab[0][0]==1)&&(tab[1][1]==1)&&(tab[2][2]==1))||((tab[0][0]==2)&&(tab[1][1]==2)&&(tab[2][2]==2)))return 1; else{ if(((tab[0][2]==1)&&(tab[1][1]==1)&&(tab[2][0]==1))||((tab[0][2]==2)&&(tab[1][1]==2)&&(tab[2][0]==2)))return 1; tmp=9;for(int c=0;c<3;c++){for(int d=0;d<3;d++){if((tab[c][d]==1)||(tab[c][d]==2))tmp--;}}if(tmp==0)return 2; else return 0;}} //************** void plansza() { start(); cout<<"\n\n"; for(int x=0;x<3;x++) { cout<<"\t"; for(int y=0;y<3;y++) { //cout<<tab[x][y]; pole(x,y); if(y<2)cout<<"|"; } cout<<"\n"; if(x<2)cout<<"\t-----\n"; } cout<<"\n\n"; rank(); } //************** void rank(){cout<<"\nAktualny ranking:\n\n"<<gracz1<<"\t- "<<pkt_g1<<" pkt\n"<<gracz2<<"\t- "<<pkt_g2<<" pkt\n";} void start(){system("cls");cout<<" KOLKO I KRZYZYK v"<<v<<" \n-------------------------\n";} void czysc(){for(int a=0;a<3;a++)for(int b=0;b<3;b++)tab[a][b]=0;} //**************