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

Gra w czwórki

0 głosów
834 wizyt
pytanie zadane 7 lipca 2016 w C i C++ przez SebekMakaron Obywatel (1,290 p.)
edycja 7 lipca 2016 przez Arkadiusz Waluk

Witam czy znajdę osobę pełną chęci żeby wytkneła mi błąd? Chodzi o funkcje "SprawdzPola" ,która nie zwraca false gdy pola zostaną zapełnione sprawdziłem pentlą pętlą wszystkie pola po zapełnieniu i wyszło mi ze są zapełnione a funkcja nwm dlaczego nie robi nic. Proszę o pomoc.

 

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

void RysujPlansze(int **plansza, int wysokosc, int szerokosc);
void Ruch(int **plansza, int wysokosc, int szerokosc, int &ktoryGracz);
bool SprawdzPola(int **plansza, int wysokosc, int szerokosc);

int main()
{
     srand(time(NULL));
     int szerokosc, wysokosc;
     bool gra;
     cout<<"Podaj wysokosc planszy: ";
     cin>>wysokosc;
     cout<<"Podaj szerokosc planszy: ";
     cin>>szerokosc;

     int **plansza = new int *[wysokosc];
     for(int i=0; i<wysokosc; i++)
          plansza[i] = new int[szerokosc];

     for(int i=0; i<wysokosc; i++)
     {
          for(int j=0; j<szerokosc; j++)
               plansza[i][j] = 0;
     }
     //Losowanie gracza
     int ktoryGracz = (rand()%2)+1;

     RysujPlansze(plansza, wysokosc, szerokosc);

     Ruch(plansza, wysokosc, szerokosc, ktoryGracz);

     return 0;
}

void RysujPlansze(int **plansza, int wysokosc, int szerokosc)
{
     for(int i=0; i<wysokosc; i++)
     {
          for(int j=0; j<szerokosc; j++)
          {
               if(plansza[i][j] == 2)
                    cout<<" 2 ";
               else if(plansza[i][j] == 1)
                    cout<<" 1 ";
               else
                    cout<<" - ";
          }
          cout<<endl;
     }
}

void Ruch(int **plansza, int wysokosc, int szerokosc, int &ktoryGracz)
{
     bool graj = true;
     int kolumna;

     while(graj)
     {
          if(ktoryGracz == 1)
          {
               cout<<"Ruch gracza drugiego "<<endl;
               ktoryGracz = 2;
          }else if(ktoryGracz == 2)
          {
               cout<<"Ruch gracza pierwszego "<<endl;
               ktoryGracz = 1;
          }
          cout<<"Wybierz kolumne: ";
          cin>>kolumna;

          if(kolumna < szerokosc+1 && kolumna > 0)
          {
               for(int i=0; i<wysokosc; i++)
               {
                    if(plansza[i][kolumna-1] == 0)
                    {
                         plansza[i][kolumna-1] = ktoryGracz;
                         break;
                    }
               }
          }
          RysujPlansze(plansza, wysokosc, szerokosc);
          graj = SprawdzPola(plansza, wysokosc, szerokosc);
     }
}

bool SprawdzPola(int **plansza, int wysokosc, int szerokosc)
{
     for(int i=0; i<wysokosc; i++)
     {
          for(int j=0; j<szerokosc; j++)
          {
               if(plansza[i][j] == 1 || plansza[i][j] == 2)
                    return true;
          }
     }
     return false;
}

 

1
komentarz 7 lipca 2016 przez niezalogowany
Pętlą jak coś nie pentlą

2 odpowiedzi

0 głosów
odpowiedź 7 lipca 2016 przez Michał Muzyka Pasjonat (24,080 p.)
Wyślij do funkcji tablice jako tablice a nie wskaźnik do wskaźnika na pierwszy element Wystarczy tak: bool sprawdzpola(int plansza[][]);
komentarz 7 lipca 2016 przez SebekMakaron Obywatel (1,290 p.)
edycja 7 lipca 2016 przez SebekMakaron

Kod jest błędny ponieważ nie wolno podać tablicy bez ilości elementów, znaczy można ale tylko jednowymiarową "tablica[]" a nie każdy kolejny wymiar należy uzupełnić "tablica[][1]", "tablica[][1][2]"

Może po prostu źle zrozumiałem. Wiec moje pytanie teraz brzmi jak podać wartość do tablicy dwuwymiarowej ale nie jako stała liczbę "tablica[][1]" bo teoretycznie nie wiem jaka szerokość wybierze gracz.

0 głosów
odpowiedź 7 lipca 2016 przez Corazzo Obywatel (1,040 p.)
98 linijka zmien warunki w ifie na: (plansza[i][j] != 1) || (plansza[i][j] != 2), dzięki temu powinno wszystko być ok, jeśli zwróci true, czyli będzie jakies wolne pole, petla dalej będzie sie wykonywała, a jeśli false to przerwie petle ( w funkcji ruch() ).

Podobne pytania

0 głosów
1 odpowiedź 330 wizyt
pytanie zadane 11 lipca 2017 w C i C++ przez Dooky Początkujący (480 p.)
0 głosów
1 odpowiedź 245 wizyt
pytanie zadane 19 kwietnia 2017 w C i C++ przez mo290103 Obywatel (1,860 p.)
0 głosów
2 odpowiedzi 731 wizyt

93,424 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...