Titlul: While loop problem X&O game
Scris de: Bratie Fanut din Iulie 05, 2013, 14:53:38
Am incercat sa fac un joc de X si O in C++ si este aproape gata, subliniez aproape. Am o problema cu acel ciclu. In mod normal ar trebui sa se opreasca la k=9 dar ceva este gresit si nu se opreste.. in rest totul merge bine deocamdata, daca cineva pune 3 x sau 3 o in linie se opreste, dar cand nu castiga nimeni jocul continua mai mult decat trebuie. Care este problema? Am incercat si cu for() dar tot aia este... ](*,) #include <iostream> #include <stdio.h> #include <windows.h> #include <conio.h>
using namespace std;
int opt, rez[3][3], casuta,casuta1,k=0; char player1[11], player2[11], a[8][13];
int main() { a[1][1]='-';a[1][2]='-';a[1][3]='-';a[1][4]='-';a[1][5]='-';a[1][6]='-';a[1][7]='-';a[1][8]='-';a[1][9]='-';a[1][10]='-';a[1][11]='-';a[1][12]='-';a[1][13]='-'; a[2][1]='|';a[2][2]=' ';a[2][3]='x';a[2][4]=' ';a[2][5]='|';a[2][6]=' ';a[2][7]='x';a[2][8]=' ';a[2][9]='|';a[2][10]=' ';a[2][11]='o';a[2][12]=' ';a[2][13]='|'; a[3][1]='-';a[3][2]='-';a[3][3]='-';a[3][4]='-';a[3][5]='-';a[3][6]='-';a[3][7]='-';a[3][8]='-';a[3][9]='-';a[3][10]='-';a[3][11]='-';a[3][12]='-';a[3][13]='-'; a[4][1]='|';a[4][2]=' ';a[4][3]='o';a[4][4]=' ';a[4][5]='|';a[4][6]=' ';a[4][7]='x';a[4][8]=' ';a[4][9]='|';a[4][10]=' ';a[4][11]='x';a[4][12]=' ';a[4][13]='|'; a[5][1]='-';a[5][2]='-';a[5][3]='-';a[5][4]='-';a[5][5]='-';a[5][6]='-';a[5][7]='-';a[5][8]='-';a[5][9]='-';a[5][10]='-';a[5][11]='-';a[5][12]='-';a[5][13]='-'; a[6][1]='|';a[6][2]=' ';a[6][3]='x';a[6][4]=' ';a[6][5]='|';a[6][6]=' ';a[6][7]='o';a[6][8]=' ';a[6][9]='|';a[6][10]=' ';a[6][11]='o';a[6][12]=' ';a[6][13]='|'; a[7][1]='-';a[7][2]='-';a[7][3]='-';a[7][4]='-';a[7][5]='-';a[7][6]='-';a[7][7]='-';a[7][8]='-';a[7][9]='-';a[7][10]='-';a[7][11]='-';a[7][12]='-';a[7][13]='-';
cout<<"== X & O game =="<<endl; cout<<" created by Bratie Fanut"<<endl<<endl;
for(int i=1;i<=7;i++) { for(int j=1;j<=13;j++) cout<<a[i][j]; cout<<endl; }
cout<<endl; cout<<"1. Joc Nou"<<endl; cout<<"2. Instructiuni"<<endl; cout<<"3. Scor"<<endl; cout<<"4. Iesire"<<endl;
cout<<endl;
cout<<"Introduceti optiunea dumneavoastra:"; cin>>opt;
if(opt == 1) {
a[2][3]=' '; a[2][7]=' '; a[2][11]=' '; a[4][3]=' '; a[4][7]=' '; a[4][11]=' '; a[6][3]=' '; a[6][7]=' '; a[6][11]=' ';
cout<<"Jocul va incepe dupa ce ambii jucatori si-au introdus numele"<<endl; cout<<"Introduceti numele, Player1:"<<endl; cin>>player1; cout<<"Introduceti numele, Player2:"<<endl; cin>>player2;
cout<<endl<<"LOADING..............."; system("cls"); cout<<"Jocul a inceput!"<<endl<<endl;
for(int i=1;i<=7;i++) { for(int j=1;j<=13;j++) cout<<a[i][j]; cout<<endl; }
while(k<=9) { cout<<player1<<" sunteti cu ,,X''. Introduceti numarul casutei dorite."; cin>>casuta; switch(casuta) { case 1: a[2][3]='X',rez[1][1]=1,k++; break;
case 2: a[2][7]='X',rez[1][2]=1,k++; break;
case 3: a[2][11]='X',rez[1][3]=1,k++; break;
case 4: a[4][3]='X',rez[2][1]=1,k++; break;
case 5: a[4][7]='X',rez[2][2]=1,k++; break;
case 6: a[4][11]='X',rez[2][3]=1,k++; break;
case 7: a[6][3]='X',rez[3][1]=1,k++; break;
case 8: a[6][7]='X',rez[3][2]=1,k++; break;
case 9: a[6][11]='X',rez[3][3]=1,k++; break; }
system("cls"); for(int i=1;i<=7;i++) { for(int j=1;j<=13;j++) cout<<a[i][j]; cout<<endl; }
if((rez[1][1]==1 && rez[1][2]==1 && rez[1][3]==1) || (rez[2][1]==1 && rez[2][2]==1 && rez[2][3]==1) || (rez[3][1]==1 && rez[3][2]==1 && rez[3][3]==1) || (rez[1][3]==1 && rez[2][2]==1 && rez[3][1]==1)) { cout<<player1<<" A CASTIGAT!!!"<<endl<<endl; exit(1);getch(); }
cout<<player2<<" sunteti cu ,,O''. Introduceti numarul casutei dorite."; cin>>casuta1; switch(casuta1) { case 1: a[2][3]='O',rez[1][1]=2,k++; break;
case 2: a[2][7]='O',rez[1][2]=2,k++; break;
case 3: a[2][11]='O',rez[1][3]=2,k++; break;
case 4: a[4][3]='O',rez[2][1]=2,k++; break;
case 5: a[4][7]='O',rez[2][2]=2,k++; break;
case 6: a[4][11]='O',rez[2][3]=2,k++; break;
case 7: a[6][3]='O',rez[3][1]=2,k++; break;
case 8: a[6][7]='O',rez[3][2]=2,k++; break;
case 9: a[6][11]='O',rez[3][3]=2,k++; break; } system("cls"); for(int i=1;i<=7;i++) { for(int j=1;j<=13;j++) cout<<a[i][j]; cout<<endl; } if((rez[1][1]==2 && rez[1][2]==2 && rez[1][3]==2) || (rez[2][1]==2 && rez[2][2]==2 && rez[2][3]==2) || (rez[3][1]==2 && rez[3][2]==2 && rez[3][3]==2) || (rez[1][3]==2 && rez[2][2]==2 && rez[3][1]==2)) { cout<<player2<<" A CASTIGAT!!!"<<endl<<endl; exit(1); getch(); }
}
cout<<"EGALITATE!!"<<endl;
}
if(opt==4) exit(0);
cout<<endl<<endl; return 0; }
Titlul: Răspuns: While loop problem X&O game
Scris de: Cretu Bogdan din Iulie 05, 2013, 16:23:24
Nu-ti calculeaza mereu k-ul bine (nu imi dau seama de ce) ... ca sa te convingi pune dupa fiecare switch (la sfarsit desigur) cout<<k; sa vezi. Incearca sa faci cu if - mi se pare mai in regula. spre exemplu daca selectez casutele 1 2 3 4 5 6 8 7 9 - pana la 6 numara corect dupa cand dau 8 k-ul devine 2 (chiar nu-mi pot da seama de ce) cand dau 7 devine 3 si cand dau 9 devine 4. PS: incearca sa folosesti functii...e mai usor de depistat greseala si sunt si mai accesibile. Daca nu reusesti da-mi un pm si o sa incerc sa ti-l fac eu (nu stiu daca il termin azi - sunt putin ocupat)
Titlul: Răspuns: While loop problem X&O game
Scris de: Bratie Fanut din Iulie 05, 2013, 19:08:09
:o multumesc. asa am observat si eu ca k-ul ala e cam ciudat.. am incercat cu if-uri dar tot asa se comporta.. trebuie sa reusesc.. daca nu merge rescriu cu functii :? multumesc mult :) daca mai observi ceva te rog posteaza un raspuns :oops:
Titlul: Răspuns: While loop problem X&O game
Scris de: Cretu Bogdan din Iulie 05, 2013, 19:31:03
Am observat ca ai zis ca nu e gata...dar iti zic niste chestii pe care le-am observat asa...succint uitandu-ma: 1.nu ai luat in calcul toate variantele de a castiga - in total sunt 8 pentru fiecare player (linie 1,2,3 coloana 1,2,3 diagonala principala diagonala secundara) 2.dupa un anumit numar de mutari player 2 (parca) devine caracterul cu codul ASCII 2 3.se poate alege o casuta mai mare ca 9 4.daca player 1 a mutat in casuta 2, dupa asta si player 2 poate muta in casuta 2. 5.la inceputul jocului cand alegi 'NEW GAME' si ce mai are nu sunt compelctate cazurile (2 si 3) 5'.La sfarsit in loc de if (p==4) pune if (p!=1 || p!=2 || p!=3) unde p e varbiabila opt (a ta)
Titlul: Răspuns: While loop problem X&O game
Scris de: George Marcus din Iulie 05, 2013, 20:46:18
Poti initializa matricea a linie cu linie, sa nu te chinui cu fiecare caracter in parte.
Titlul: Răspuns: While loop problem X&O game
Scris de: Bratie Fanut din Iulie 06, 2013, 10:44:31
Am observat ca ai zis ca nu e gata...dar iti zic niste chestii pe care le-am observat asa...succint uitandu-ma: 1.nu ai luat in calcul toate variantele de a castiga - in total sunt 8 pentru fiecare player (linie 1,2,3 coloana 1,2,3 diagonala principala diagonala secundara) 2.dupa un anumit numar de mutari player 2 (parca) devine caracterul cu codul ASCII 2 3.se poate alege o casuta mai mare ca 9 4.daca player 1 a mutat in casuta 2, dupa asta si player 2 poate muta in casuta 2. 5.la inceputul jocului cand alegi 'NEW GAME' si ce mai are nu sunt compelctate cazurile (2 si 3) 5'.La sfarsit in loc de if (p==4) pune if (p!=1 || p!=2 || p!=3) unde p e varbiabila opt (a ta)
Multumesc 1. Stiu ca nu am luat in calcul toate variantele. Ieri dupa ce am mai testat un pic mi-am dat seama. 2. Am observat ca devine acel smile din ASCII.. De ce se intampla asta? e foarte ciudat... 3. M-am gandit sa rezolv mai intai partea in care se introduc datele corect, ca apoi sa ma ocup de exceptii. 4. Inca ma mai gandesc la asta. Cred ca o sa bifez intr-un vector completat/necompletat. Daca o casuta este completata, respectiv daca nu. 5. Cazurile 2 si 3 le completez acum. 5'. Asa voi face. :) Multumesc. Voi reveni cu update-uri. :peacefingers: peace
|