• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Porady do kodu Kolko Krzyzyk

Object Storage Arubacloud
0 głosów
336 wizyt
pytanie zadane 28 grudnia 2015 w C i C++ przez Zangariev Początkujący (290 p.)

Witam!

Stworzyłem program, który prowadzi rozgrywkę pomiędzy dwoma graczami w kółko krzyżyk. Moja prośba o przeglądniecie kodu i ewentualne wskazówki co można było zrobić lepiej, prościej. Proszę również o przetestowanie programu. Zakładam, że gracze podają tylko pola będące w obrębie tablicy. Czy można jakoś łatwiej zapisać daną współrzędną? Tj. zamiast pierwszego pola 0 i 0 to np. nazwę "lewy róg" etc.

Z góry dzięki za pomoc!

#include <time.h>
#include <iostream>

using namespace std;

enum PolePlanszyKolkoKrzyzyk{PPKK_Puste,PPKK_0,PPKK_X};

bool remis(int tablica[3][3])
{
    if(tablica[0][0]!=0&&tablica[0][1]!=0&&tablica[0][2]!=0&&tablica[1][0]!=0&&tablica[1][1]!=0&&tablica[1][2]!=0&&tablica[2][0]!=0&&tablica[2][1]!=0&&tablica[2][2]!=0)
    {
        return true;
    }
    return false;
}
void wypelnijTablice(int Plansza[3][3])
{
    for(int i=0;i<=3;i++)
    {
        for(int j=0;j<=3;j++)
        {
            Plansza[i][j]=0;
        }
    }
}

int wylosujGracza()
{
    int wybrany=rand()%PPKK_X+PPKK_0;
    string rozpoczynajacy;
    
    if(wybrany==1)
    {
        cout<<"Zaczyna kolko"<<endl;
    }
    else
    {
        cout<<"Zaczyna krzyzyk"<<endl;
    }
    return wybrany;
}

bool czyWygrana(int tablica[3][3])
{
    if((tablica[0][0]==1&&tablica[0][1]==1&&tablica[0][2]==1) || (tablica[0][0]==2&&tablica[0][1]==2&&tablica[0][2]==2) ||(tablica[1][0]==1&&tablica[1][1]==1&&tablica[1][2]==1) || (tablica[1][0]==2&&tablica[1][1]==2&&tablica[1][2]==2)||(tablica[2][0]==1&&tablica[2][1]==1&&tablica[2][2]==1) || (tablica[2][0]==2&&tablica[2][1]==2&&tablica[2][2]==2))
    {
        return true;
    }
    else if ((tablica[0][0]==1&&tablica[1][0]==1&&tablica[2][0]==1) || (tablica[0][0]==2&&tablica[1][0]==2&&tablica[2][0]==2) || (tablica[0][1]==1&&tablica[1][1]==1&&tablica[2][1]==1) || (tablica[0][1]==2&&tablica[1][1]==2&&tablica[2][1]==2)||(tablica[0][2]==1&&tablica[1][2]==1&&tablica[2][2]==1) || (tablica[0][2]==2&&tablica[1][2]==2&&tablica[2][2]==2))
    {
        return true;
    }
    else if ((tablica[0][0]==1&&tablica[1][1]==1&&tablica[2][2]==1) || (tablica[0][0]==2&&tablica[1][1]==2&&tablica[2][2]==2) || (tablica[0][2]==1&&tablica[1][1]==1&&tablica[2][0]==1) || (tablica[0][2]==2&&tablica[1][1]==2&&tablica[2][0]==2))
    {
        return true;
    }
    
    return false;
}

int wybierzPole(int tablica[3][3],int gracz)
{
    int wsA,wsB;
    bool test;
    
    do
    {
        do
        {
            cout<<"Podaj wspolrzedne pola"<<endl;
            cout<<"Wspolrzedna A: ";
            cin>>wsA;
            cout<<"Wspolrzedna B: ";
            cin>>wsB;
        
            if(tablica[wsA][wsB]==PPKK_Puste)
            {
                tablica[wsA][wsB]=gracz;
                cout<<"Wybrano Pole: "<<"["<<wsA<<"]"<<"["<<wsB<<"]"<<endl;
                test=true;
            }
            else
            {
                cout<<"Pole zajete przez: "<<tablica[wsA][wsB]<<endl;
                cout<<"Sprobuj jeszcze raz!"<<endl;
                test=false;
            }
        }while(test==false);
        
        
        if(czyWygrana(tablica)==true)
        {
            break;
            return gracz;
        }
        if(remis(tablica)==true)
        {
            gracz=0;
            break;
        }
        if(gracz==1)
        {
            gracz=2;
            cout<<"Teraz Krzyzyk"<<endl;
        }
        else if(gracz==2)
        {
            gracz=1;
            cout<<"Teraz Kolko"<<endl;
        }
    }while(czyWygrana(tablica)==false);
    
    
    return gracz;
}



int main()
{
    srand(time(NULL));
    
    int Plansza[3][3];
    int gracz=0;
    
    wypelnijTablice(Plansza);
    
    int zaczynajacy=0;
    
    zaczynajacy=wylosujGracza();
    
    gracz=wybierzPole(Plansza,zaczynajacy);
    
    if(gracz==1)
    {
        cout<<"Wygrywa kolko!"<<endl;
    }
    else if(gracz==2)
    {
        cout<<"Wygrywa krzyzyk!"<<endl;
    }
    else
    {
        cout<<"Remis!"<<endl;
    }
    return 0;
}

 

2 odpowiedzi

+3 głosów
odpowiedź 28 grudnia 2015 przez Grzyboo Nałogowiec (28,860 p.)
wybrane 28 grudnia 2015 przez Zangariev
 
Najlepsza

 Czy można jakoś łatwiej zapisać daną współrzędną? Tj. zamiast pierwszego pola 0 i 0 to np. nazwę "lewy róg" etc.

Tak, do tego służy enum.

 

komentarz 28 grudnia 2015 przez Zangariev Początkujący (290 p.)

czyli przykładowo:
 

enum Plansza{Plansza[0][0],Plansza[0][1], itd};

będę mógł się do nich odwołać używając kolejno 0 , 1 itd, ale ich wartości jakie będą miały to na początku 0?

komentarz 28 grudnia 2015 przez Grzyboo Nałogowiec (28,860 p.)
enum Pole {
LEWY_GORNY,
SRODKOWY_GORNY,
PRAWY_GORNY,
LEWY_SRODKOWY,
SRODKOWY_SRODKOWY,
PRAWY_SRODKOWY,
LEWY_DOLNY,
SRODKOWY_DOLNY,
PRAWY_DOLNY 
}

I wtedy musisz stworzyć jednowymiarową tablicę, a potem odwołanie wygląda tak:

Plansza[PRAWY_DOLNY]

 

W Twoim przypadku, aby za bardzo nie mieszać wypadałoby zrobić tak:

enum Horizontal {
LEWO,
SRODEK,
PRAWO
}

enum Vertical {
GORNY,
SRODKOWY,
DOLNY
}

i odwoływać się tak:

Plansza[LEWO][GORNY];

komentarz 28 grudnia 2015 przez Zangariev Początkujący (290 p.)
super, teraz rozumiem :). dzięki bardzo!
+1 głos
odpowiedź 28 grudnia 2015 przez Michał628496 Pasjonat (17,340 p.)
A jakby ktoś chciał zagrać ponownie ?

Musiałby uruchomić grę jeszcze raz

Podobne pytania

0 głosów
4 odpowiedzi 1,141 wizyt
pytanie zadane 14 sierpnia 2015 w C i C++ przez dasad33 Użytkownik (710 p.)
0 głosów
1 odpowiedź 139 wizyt
pytanie zadane 15 maja 2017 w C i C++ przez somix12 Nowicjusz (190 p.)
+1 głos
6 odpowiedzi 2,438 wizyt
pytanie zadane 16 kwietnia 2018 w C i C++ przez macias17 Nowicjusz (190 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...