Piškvorky v C

Programovacie jazyky, rady, poradňa...
Tripmaster
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 278
Registrovaný: 09 feb 2006, 21:39
Bydlisko: L.Mikuláš
Kontaktovať používateľa:

Piškvorky v C

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

Zdravím, mám za úlohu spraviť piškvorky, ale neviem prísť na to, ako zistím rovnakú trojicu a teda víťaza. Tie IF podmienky na konci sú len naivný pokus...

Kód: Vybrať všetko

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main()
{
    char hrac[4][4];
    char c;
    int i=-1,x=0,y=0,win=0;
    
    for (int k=1;k<=3;k++) //"vyBlank-ovanie" pozicii
    {
        for (int l=1;l<=3;l++)
        {
            hrac[k][l]=32;
        }
    }


    srand(time(NULL));
    while (win!=1)
    {
        int sem=0;
        i++;
        if ((i%2)==0)
        {
            while (sem!=1)
            {
                printf("\nZadajte polohu: \n");
                scanf("%c",&c);
                scanf("%d",&y);
                switch (c)
                {
                    case 'A':x=1;
                    break;
                    case 'B':x=2;
                    break;
                    case 'C':x=3;
                    break;
                }
                printf("\n|%d%d|\n",x,y);
                if (hrac[x][y]==32)
                {
                    hrac[x][y]=88;
                    sem=1;
                }else
                {
                    sem=0;
                    printf("\n<<Zla suradnica>>\n");
                }
            }
        }else
        {
            while (sem!=1)
            {
                x=rand()%2+1;
                y=rand()%2+1;
                if (hrac[x][y]==32)
                {
                    hrac[x][y]=79;
                    sem=1;
                }else
                {
                    sem=0;
                }
            }
        }


        printf("    1   2   3  \n");
        printf("  +---+---+---+\n");
        printf("A | %c | %c | %c |\n",hrac[1][1],hrac[1][2],hrac[1][3]);
        printf("  +---+---+---+\n");
        printf("B | %c | %c | %c |\n",hrac[2][1],hrac[2][2],hrac[2][3]);
        printf("  +---+---+---+\n");
        printf("C | %c | %c | %c |\n",hrac[3][1],hrac[3][2],hrac[3][3]);
        printf("  +---+---+---+\n");

        //mam pocit, ze tie if-y neberie ani do uvahy
        //if (hrac[1][1]==(hrac[1][2]==hrac[1][3]) || hrac[2][1]==(hrac[2][2]==hrac[2][3]) || hrac[3][1]==(hrac[3][2]==hrac[3][3]) || hrac[1][1]==(hrac[2][2]==hrac[3][3]) || hrac[3][1]==(hrac[2][2]==hrac[1][3]) || hrac[1][1]==(hrac[2][1]==hrac[3][1]) || hrac[1][2]==(hrac[2][2]==hrac[3][2]) || hrac[1][3]==(hrac[2][3]==hrac[3][3]))
        //{
        //    win=1;
        //}
    }
    switch (hrac[x][y])
    {
        case 88:printf("\n\nYou win");
        break;
        case 79:printf("\n\nGame Over");
        break;
    }


    return 0;
}
Neviete o dobrom spôsobe ako to vyriešiť?
Vopred ďakujem a PF2012 :P
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: Piškvorky v C

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

vnorene cykly for
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: Piškvorky v C

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

Tak vies ze mozu nastat pripady kedy moze hrac vyhrat, ak su 3 rovnake znaky

1. v stlpci
2. v riadku
3. na hlavnej diagonale
4. na vedlajsej diagonale

reDo tu spomenul vnoreny cyklus for, ano, prve 2 pripady by som riesil tak a na zrychlenie programu by som breakoval vnoreny cyklus ak by narazil na iny znak

co sa tyka 3 a 4 moznosti, tak v pripade hracieho pola 3x3 je mozne to len zpodmienkovat natvrdo, pokial by si vsak uz volil vacsie herne pole a vyherna by bola stale len trojica, tak tam uz treba zvolit iny postup, ktory sa da riesit len cez 1 cyklus, ale to uz necham na teba.
Napísať odpoveď