C++ piskvorky

Programovacie jazyky, rady, poradňa...
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Príspevok od používateľa reDo »

mam taketo piskovrky ale nefunguje mi tam kopa veci ako napr nevypisuje to zadaj poziciu dalej TO JE PROTI PRAVIDLAM dalej nwm zastavit aby mi vypisal to kto vyhral pls poradte

Kód: Vybrať všetko

#include <iostream>
#include <stdio.h>

using namespace std;


void znak(int pom1, int pom2, int tah,char plocha[][4]);
void vytvor(char plocha[][4]);
int over(char plocha[][4]);
void hra(void);



int main()
{

hra();

return 0;
}

void hra()
{
char plocha[4][4];
int tah=0;
int pom1,pom2;
for(int i=0;i<4;i++)
for(int m=0;m<4;m++)
plocha[i][m]='.';

vytvor(plocha);
while(1)
{
cout<<"Zadaj poziciu: \n";
cin>>pom1>>pom2;
znak(pom1, pom2, tah, plocha);
if(over(plocha)==1) {
cout<<"X vyhrali\n";
system("pause");
break; 
}
else if(over(plocha)==2) {
cout<<"O vyhrali\n";
system("pause");
break; 
}
else if(tah==8) {
cout<<"Remiza\n";
system("pause");
break; 
}
system("pause");
system("pause");
tah++;
}
return;
}


void vytvor(char plocha[][4])
{
for(int i=0;i<4;i++)
for(int m=0;m<4;m++) {
cout<<plocha[i][m];
if(i%2==0&&i!=0)
cout<<endl;
}
return;
}

void znak(int pom1, int pom2, int tah, char plocha[][4])
{

if(plocha[pom1][pom2]!='.')
cout<<"TO JE PROTI PRAVIDLAM!\n";
if(tah%2==0)
plocha[pom1][pom2]='X';
else
plocha[pom1][pom2]='O';
return;
}


int over(char plocha[][4])
{
if(plocha[1][1]=='X'&&plocha[1][2]=='X'&&plocha[1][3]=='X')
return 1;
else if(plocha[1][1]=='X'&&plocha[2][1]=='X'&&plocha[3][1]=='X')
return 1;
else if(plocha[2][1]=='X'&&plocha[2][2]=='X'&&plocha[2][3]=='X')
return 1;
else if(plocha[3][1]=='X'&&plocha[3][2]=='X'&&plocha[3][3]=='X')
return 1;
else if(plocha[1][2]=='X'&&plocha[2][2]=='X'&&plocha[3][2]=='X')
return 1;
else if(plocha[1][3]=='X'&&plocha[2][3]=='X'&&plocha[3][3]=='X')
return 1;
else if(plocha[1][1]=='X'&&plocha[2][2]=='X'&&plocha[3][3]=='X')
return 1;
else if(plocha[1][3]=='X'&&plocha[2][2]=='X'&&plocha[3][1]=='X')
return 1;


if(plocha[1][1]=='O'&&plocha[1][2]=='O'&&plocha[1][3]=='O')
return 2;
else if(plocha[1][1]=='O'&&plocha[2][1]=='O'&&plocha[3][1]=='O')
return 2;
else if(plocha[2][1]=='O'&&plocha[2][2]=='O'&&plocha[2][3]=='O')
return 2;
else if(plocha[3][1]=='O'&&plocha[3][2]=='O'&&plocha[3][3]=='O')
return 2;
else if(plocha[1][2]=='O'&&plocha[2][2]=='O'&&plocha[3][2]=='O')
return 2;
else if(plocha[1][3]=='O'&&plocha[2][3]=='O'&&plocha[3][3]=='O')
return 2;
else if(plocha[1][1]=='O'&&plocha[2][2]=='O'&&plocha[3][3]=='O')
return 2;
else if(plocha[1][3]=='O'&&plocha[2][2]=='O'&&plocha[3][1]=='O')
return 2;

return 0;
}


audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

skús sa formatovať kod podľa normy, a takýmto chybám sa vyhneš (minimálne ich bude menej). Kto sa v tom má vyznať keď je to maximálne neprehľadné napísané?

//autoeditácia príspevku ( 21 Nov 2009, 18:10 )
budem ti to postupne opravovať, takže:

1)

Kód: Vybrať všetko

void vytvor(char plocha[][4]) {
    for (int i = 0; i < 4; i++){ //chýbala zátvorka
        for (int m = 0; m < 4; m++) { 
            printf("%c", plocha[i][m]);
            //if (i % 2 == 0 && i != 0)
                //cout << endl;
        }
        cout << endl;  //endl má byť tu a nie tam kde si ho mal
	} //chýbala zátvorka
    return;
}


//autoeditácia príspevku ( 21 Nov 2009, 18:11 )
2)

Kód: Vybrať všetko

int znak(int pom1, int pom2, int tah, char plocha[][4]) { //radšej nech má návratový typ, inak nevieme či bol ťah platný

    if (plocha[pom1][pom2] != '.'){
        cout << "TO JE PROTI PRAVIDLAM!\n";
        return 0; //chýbal return /ak je zlý ťah, treba ukončiť a nie pokračovať lebo sa potiahne/
	}
    if (tah % 2 == 0)
        plocha[pom1][pom2] = 'X';
    else
        plocha[pom1][pom2] = 'O';
    return 1;
}
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Príspevok od používateľa reDo »

dakujem posnazim sa das sem kompletny kod este s nejakymi upravami ak by sa ziadali? pls a zase mi nefunguje to TO JE PROTI PRAVIDLAM a ani to zadaj poziciu sa nezmenilo a tiez to nezastvi pls pomozte
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

#include <iostream>
#include <stdio.h>

using namespace std;


int znak(int pom1, int pom2, int tah, char plocha[][4]);
void vytvor(char plocha[][4]);
char over(char plocha[][4], int tah);
void hra(void);

int main() {

    hra();

    return 0;
}

void hra() {
    char plocha[4][4];
    int tah = 0;
    int pom1, pom2;
    for (int i = 0; i < 4; i++)
        for (int m = 0; m < 4; m++)
            plocha[i][m] = '.';

    vytvor(plocha);
    while (1) {
        cout << "Zadaj poziciu: \n";
        cin >> pom1 >> pom2;
        tah += znak(pom1, pom2, tah, plocha); //ťah zvyšujem iba ak je platný
        if (char x = over(plocha, tah)) {
            cout << x << " vyhrali\n";
            system("pause");
            break;
        } else if (tah == 8) { //na toto si ako preboha prišiel?
            cout << "Remiza\n";
            system("pause");
            break;
        }


        //tah++; toto by ti bralo ťah aj keby ťahám neplatne a pokazí sa poradie hráčov
        vytvor(plocha);  //chýbalo znovuvykreslenie
    }
    return;
}

void vytvor(char plocha[][4]) {
    for (int i = 0; i < 4; i++){ //chýbala zátvorka
        for (int m = 0; m < 4; m++) { 
            printf("%c", plocha[i][m]);
            //if (i % 2 == 0 && i != 0)
                //cout << endl;
        }
        cout << endl;  //endl má byť tu a nie tam kde si ho mal
	} //chýbala zátvorka
    return;
}

int znak(int pom1, int pom2, int tah, char plocha[][4]) { //radšej nech má návratový typ, inak nevieme či bol ťah platný

    if (plocha[pom1][pom2] != '.'){
        cout << "TO JE PROTI PRAVIDLAM!\n";
        return 0; //chýbal return /ak je zlý ťah, treba ukončiť a nie pokračovať lebo sa potiahne/
	}
    if (tah % 2 == 0)
        plocha[pom1][pom2] = 'X';
    else
        plocha[pom1][pom2] = 'O';
    return 1;
}

//tú poslednú funkciu sa mi nechce prerábať, ale je poriadne chaotická
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Príspevok od používateľa johny3212 »

audiotrack ked uz si taaky inciativny, tak mu tam poopravuj aj tie napoli kopirovacie polia vo volaniach funkcii void (char plocha[][4]) ; ono ti to rezaz mozno ako tak funguje aj takto, ale je to zle pochopene redom. Mne sa mu to nechce robit. Ja som mu tam hodil aj ukazku v programatorskom kutiku, nech sa clapec uz konecne nauci programovat :).

Redo alebo to sprav obiektovo a vtedy ti odpadaju vsetky tie problemy s ukazovatelmi. :).
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

johny3212 napísal:audiotrack ked uz si taaky inciativny, tak mu tam poopravuj aj tie napoli kopirovacie polia vo volaniach funkcii void (char plocha[][4]) ; ono ti to rezaz mozno ako tak funguje aj takto, ale je to zle pochopene redom. Mne sa mu to nechce robit. Ja som mu tam hodil aj ukazku v programatorskom kutiku, nech sa clapec uz konecne nauci programovat :).

Redo alebo to sprav obiektovo a vtedy ti odpadaju vsetky tie problemy s ukazovatelmi. :).
mne sa tiež nechce, a tvoja ukážka bola zmes céčka a c++ takže zas tak hrdý na ňu nemusíš byť :)
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Príspevok od používateľa johny3212 »

zmes cecka a c++ ? :DDD,sak to je jedno. Ja som zvyknuty v c++ pouzivat na vypis do konzoli prikazy z C, 80% kniznic pre c++ je kodenych v c :D . neak moc hrdy na ten kod?, sak ma pak riadkov, ide tam iba o tie pointre, iny vyznam ten kod nemal.

//audiotrack: to že môžeš v c++ používať príkazy z c ešte neznamená že je to to isté
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Príspevok od používateľa reDo »

nehadajte sa ja nechodim do skoly aby som sa ucil programovat ale doma z knih ty chces aby som pouzil OOP? no to este nwm skoda :(
Napísať odpoveď