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

Porady do kodu Kolko Krzyzyk

VPS Starter Arubacloud
0 głosów
355 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,216 wizyt
pytanie zadane 14 sierpnia 2015 w C i C++ przez dasad33 Użytkownik (710 p.)
0 głosów
1 odpowiedź 150 wizyt
pytanie zadane 15 maja 2017 w C i C++ przez somix12 Nowicjusz (190 p.)
+1 głos
6 odpowiedzi 2,563 wizyt
pytanie zadane 16 kwietnia 2018 w C i C++ przez macias17 Nowicjusz (190 p.)

92,841 zapytań

141,781 odpowiedzi

320,857 komentarzy

62,173 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...