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

Gra w czwórki

Object Storage Arubacloud
0 głosów
596 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ź 306 wizyt
pytanie zadane 11 lipca 2017 w C i C++ przez Dooky Początkujący (480 p.)
0 głosów
1 odpowiedź 217 wizyt
pytanie zadane 19 kwietnia 2017 w C i C++ przez mo290103 Obywatel (1,860 p.)
0 głosów
2 odpowiedzi 483 wizyt

92,583 zapytań

141,434 odpowiedzi

319,669 komentarzy

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

...