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

Problem z grą kółko i krzyzyk.

Object Storage Arubacloud
0 głosów
1,141 wizyt
pytanie zadane 14 sierpnia 2015 w C i C++ przez dasad33 Użytkownik (710 p.)
Witam, jestem początkującym programistą . Chciałem spróbować stworzyć własne kółko i krzyżyk. Po moich staraniach ostatecznie nie udało mi się ukończyć mojego dzieła więc skorzystałem z pomocy w internecie. Znalazłem tam fragment kodu który podany jest niżej. Niby wszystko fajnie tylko nie wiem za bardzo o co w nim biega i w jaki sposób on działa. Teraz proszę o szczegółową analizę i pomoc mi w jego ogarnięciu.

O kodzie:
1) Nie rozumiem dlaczego muszę użyć funkcji bool. Przecież ona daje tylko to czy warunek jest prawdziwy czy nie i bez niej powinien się wykonać kod przynajmniej raz.
2) Jakim cudem na tablicę w mainie działa funkcja ruch(). Przecież ona nawet nie jest w środku tej tablicy (w forach).
3) O co chodzi z tą funkcją plansza(). Przecież ona jest jakby 2 tablicą więc jakim cudem wszystko działa na tą jedną tablicę która jest wyświetlana.

BARDZO PROSZĘ o  dokładne wyjaśnienie tego kodu najlepiej linijka po linijce.
Z góry dziękuję :D

#include <iostream>

#include <windows.h>

using namespace std;

 

 

 

void plansza(char tab[3][3], int i,int j);

void ruch(char tablica[3][3],int a, int b,int c,int d);

 

int main()

{

    bool petla = true;

    char tab[3][3]={};

    int i, j;

    int a;

    int b;

    int c;

    int d;

 

    for(i=0; i<3; i++)

    {

 

        for(j=0; j<3; j++)

        {

 

            tab[i][j]=' ';

        }

    }

 

while(petla)

{

plansza(tab,i,j);

 

cout<<endl;

ruch(tab,a,b,c,d);

}

    return 0;

}

 

 

 

void plansza(char tab[3][3], int i,int j)

{

    for(i=0; i<3; i++)

    {

        cout<<endl;

        for(j=0; j<3; j++)

        {

 

            cout<<tab[j][i]<<" | ";

        }

    }

}

 

 

 

 

void ruch(char tablica[3][3],int a, int b, int c,int d)

{

  cout<<"Podaj liczbe (1-3)"<<endl;

  cin>>a;

cout<<"Podaj liczbe (1-3)"<<endl;

    cin>>b;

system("cls");

a--;

    b--;

 

    tablica[a][b]='X';

 

}

4 odpowiedzi

+1 głos
odpowiedź 14 sierpnia 2015 przez Rogulix Obywatel (1,850 p.)
przywrócone 14 sierpnia 2015 przez Rogulix

Gdybyś umieścił ten kod za pomocą narzędzia "code" byłoby łatwiej smiley

0 głosów
odpowiedź 14 sierpnia 2015 przez criss Mędrzec (172,590 p.)
1. To nie jest funkcja bool, po prstu zmienna bool. Chodzi ci while(petla), tak? Nie widze zeby gdziekolwiek w kodzie byla zmieniana wartosc zmiennej petla wiec ten while robi tyle co while(true) czyli nieskończona pętla.

2. Nie mam pojęcia o ci chodzi. Jakich forach? Funkcja ruch dziala na na tab bo w mainie jest wywolanie ruch z przekazaną tab jako argument.

3. Nie mam pojęcia co to znaczy ze funkcja jest tablicą ale domyslam ze ze chodzi ci o to samo co w ruchu(). Plansza dostaje jako argument tablice.

Mam wrażenie ze kompletnie nie ogarniasz co to jest argument funkcji. Po prstu poczytaj troche nt. funkcji.
Btw. - co to za praktyka po każdej linijce 20 enterów? :| Jak wchodzisz pierwszy raz na forum i zakladasz swój pierwszy temat, to polecam przeczytać jakieś podstawowe zasady korzystania z forum. Chociaż dziwi mnie to ludzie nawet nie podejrzewają ze wpier***enie kodu na chama jest nieestetyczne i ciężko się to czyta. Nie ogarniam.Anyway - na dole strony masz ładnie wypisane zasady.
0 głosów
odpowiedź 14 sierpnia 2015 przez Szykem2 Nałogowiec (29,510 p.)
void plansza(char tab[3][3], int i,int j);

void ruch(char tablica[3][3],int a, int b,int c,int d);

 //deklaracje funkcji plansza wypisuje a ruch daje możliwość ustawienia X na planszy

int main()

{

    bool petla = true;          //zmienne nie funkcja typu bool używana w petli chociaż nie jest konieczna

    char tab[3][3]={};          //tablica symbolizująca planszę 

    int i, j;

    int a;

    int b;

    int c;

    int d;

 //deklaracje zmiennych chociaż nie wiem po co aż tyle

    for(i=0; i<3; i++)

    {
        for(j=0; j<3; j++)

        {
            tab[i][j]=' ';         //powiedzmy że inicjalizacja tablicy bez tych pętli też byłoby dobrze tylko przy deklaracji trzeba by dać ={''}
        }

    }

 

while(petla)          //główna ptla gry

{

plansza(tab,i,j);    //wypisuje plansze

 

cout<<endl;          //odstęp

ruch(tab,a,b,c,d);  //wprowadzenie zmiennej do tablicy(dziwnie zrobiona jest to funkcja

}

    return 0;           //kończenie maina

}

 

 

 

void plansza(char tab[3][3], int i,int j)

{

    for(i=0; i<3; i++)

    {

        cout<<endl;

        for(j=0; j<3; j++)

        {
            cout<<tab[j][i]<<" | ";       //dwie petle wypisują tablice oddzielając kolumny |

        }

    }

}


void ruch(char tablica[3][3],int a, int b, int c,int d) //zmienne cd w ogóle nie wykorzystywane a i b mogłyby być lokalne

{

    cout<<"Podaj liczbe (1-3)"<<endl;

    cin>>a;                 //pobieranie współżędnej x punktu

    cout<<"Podaj liczbe (1-3)"<<endl;

    cin>>b;                 //pobieranie współżędnej y punktu

    system("cls");       //czyszczenie konsoli

    a--;                       //dekrementacja zmiennych bo tablice indeksowane są od 0

    b--;

 

    tablica[a][b]='X';    //przypisanie wartości X dla danego pola tablicy

 

}

Brakuje tu jakieś funkcji przerywającej jak już będą X-y w prostej lini i obsługi drugiego grasza, jest wiele niepotrzebnych zmiennych.

0 głosów
odpowiedź 14 sierpnia 2015 przez Rogulix Obywatel (1,850 p.)

1) Bool to nie funkcja tylko typ zmiennej logicznej. Przyjmuje on wartość true żeby można ją było użyć przy wykonaniu pętli while. W sumie ta zmienna nie musi istniec poniewaz w warunku petli while wystarczyłoby wpisać po prostu true. Dlatego że jest to pętla nieskonczona to będzie działac w nieskonczonosc. Najlepiej w warunku tej petli wstawic taki warunek ktory by sparwdzal czy w ktoryms rzedzie nie sa zapelnione wszystkie pola. I wtedy zaleznie od warunku kontynuowal gre lub ją przerywal.

Po tym co widze to chyba fragment tego kodu bo brakuje polecenia wyswietlania kółka.

Pętla while na początek wywoluje funkcje plansza, ktora wyswietla zawartosc tablicy tab a obok niej pionową kreske. Przy uzyciu dwoch petli for otrzymamy cos co bedzie mniej wiecej przypominalo plansze do kolka i krzyżyk. Oczywiscie przy pierwszym obiegu petli for tablica tab nie ma żadnych wartości więc plansza będzie pusta.

Następnie pod spodem pojawiają sie dwa pola do wpisywania liczb. Sluża one do wybierania pola do wpisywania kółka bądź krzyżyka. Pierwsza liczba określa numer pola chyba w poziomie a druga w pionie , chyba że jest na odwrót. Następnie zawartość ekranu jest czyszczona, a od zmiennych a i b odejmuje sie jeden poniewaz uzytkownik wpisuje liczbe 1-3 a tablice numeruje sie od zera wiec miejsca 0-2. Wtedy w danym miejscu w tablicy wpisuje sie X czyli krzyżyk.

Następnie zmienna while robi kolejny obrot i wywoluje funkcje plansza. Tym razem funkcja ma do wypisania wartosc z tablicy, bo wpisalismy do niej X w ktoryms miejscu za pomocą funkcji ruch. Teraz funkcja plansza wyswietla plansze ale z wpisanym do niej X w wybranym wczesniej miejscu. Potem znowu sie wpisuje X w innym miejscu itd.

 

Czego mi brakuje w tym kodzie?

Kodu ktory sprawdza czy w danym rzedzie nie ma wystarczająco krzyzykow czy kolek i wtedy konczy gre oraz okresla zwyciezce

Kodu ktory sprawdza czy dane miejsce w tablicy (na planszy) nie zostalo jeszce zajete, jezeli tak to uzytkownik musi wybrac miejsce jescze raz

Kodu ktory wypisuje naprzemian kolko i krzyzyk

No i wlasciwie tylesmiley

Podobne pytania

0 głosów
2 odpowiedzi 336 wizyt
pytanie zadane 28 grudnia 2015 w C i C++ przez Zangariev Początkujący (290 p.)
+1 głos
6 odpowiedzi 2,443 wizyt
pytanie zadane 16 kwietnia 2018 w C i C++ przez macias17 Nowicjusz (190 p.)
0 głosów
3 odpowiedzi 545 wizyt
pytanie zadane 15 grudnia 2015 w C i C++ przez Munvik Dyskutant (9,350 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 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!

...