Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: While loop problem X&O game  (Citit de 2302 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
bratiefanut
Strain
*

Karma: 3
Deconectat Deconectat

Mesaje: 39



Vezi Profilul
« : 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...  Brick wall

Cod:
#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;
}
« Ultima modificare: Iulie 05, 2013, 16:02:25 de către Bratie Fanut » Memorat
reking
Strain
*

Karma: 3
Deconectat Deconectat

Mesaje: 39



Vezi Profilul
« Răspunde #1 : 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)
Memorat
bratiefanut
Strain
*

Karma: 3
Deconectat Deconectat

Mesaje: 39



Vezi Profilul
« Răspunde #2 : Iulie 05, 2013, 19:08:09 »

 Surprised 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 Confused multumesc mult Smile daca mai observi ceva te rog posteaza un raspuns Embarassed
Memorat
reking
Strain
*

Karma: 3
Deconectat Deconectat

Mesaje: 39



Vezi Profilul
« Răspunde #3 : 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)
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #4 : Iulie 05, 2013, 20:46:18 »

Poti initializa matricea a linie cu linie, sa nu te chinui cu fiecare caracter in parte.
Memorat
bratiefanut
Strain
*

Karma: 3
Deconectat Deconectat

Mesaje: 39



Vezi Profilul
« Răspunde #5 : 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.
 Smile Multumesc. Voi reveni cu update-uri. peacefingers peace
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines