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

c++ Gra w warcaby, bicie pionków.

0 głosów
2,148 wizyt
pytanie zadane 8 stycznia 2019 w C i C++ przez Łukasz_P Nowicjusz (120 p.)

Witam wszystkich serdecznie, 

Od dość niedawna zacząłem uczyć się programowania, swoją przygodę zacząłem z językiem c++, uczę się z książki "c++ przewodnik dla początkujących". W rozdziale z funkcjami miałem do napisania prostą grę w warcaby. Problem którego nie potrafię rozwiązać znajduję się w funkcji bicie. 

void bicie(char plansza[][8],char wybor,int a, int b)
{
    int ruch;
    if(plansza[a-1][b-1]!=wybor ||plansza[a-1][b+1]!=wybor ||
       plansza[a+1][b-1]!=wybor ||plansza[a+1][b+1]!=wybor )
    {
        if(plansza[a-2][b-2]==' ' ||plansza[a-2][b+2]==' ' ||
           plansza[a+2][b-2]==' ' ||plansza[a+2][b+2]==' ' )
        {
            char tymczas_a,tymczas_b,tymczas_c,tymczas_d;
            tymczas_a = plansza[a-2][b-2];
            tymczas_b = plansza[a-2][b+2];
            tymczas_c = plansza[a+2][b-2];
            tymczas_d = plansza[a+2][b+2];

            if(b>0 && b<7 && plansza[a-2][b-2]==' ' && plansza[a-1][b-1]!=wybor && plansza[a-1][b-1]!=' ')
            {
                plansza[a-2][b-2]='a';
            }
            if(b>0 && b<7 && plansza[a-2][b+2]==' ' && plansza[a-1][b+1]!=wybor && plansza[a-1][b+1]!=' ')
            {
                plansza[a-2][b+2]='b';
            }
            if(b>0 && b<7 && plansza[a+2][b-2]==' ' && plansza[a+1][b-1]!=wybor          && plansza[a+1][b-1]!=' ')
            {
                plansza[a+2][b-2]='c';
            }
            if(b>0 && b<7 && plansza[a+2][b+2]==' ' && plansza[a+1][b+1]!=wybor && plansza[a+1][b+1]!=' ')
            {
                plansza[a+2][b+2]='d';
            }
            rysuj_plansze(plansza,wybor);
            cout << "gdzie bicie? "<< endl;
            //// oddaje tymczasowe ////////////////////
          //  plansza[a-2][b-2] = tymczas_a;
          //  plansza[a-2][b+2] = tymczas_b;
          //  plansza[a+2][b-2] = tymczas_c;
          //  plansza[a+2][b+2] = tymczas_d;
            /////////////////////////////////////////////
        }
    }

   W momencie gdy czerwony pionek ma możliwość zbicia białego jest wszystko w porządku, pojawia się wybór w które miejsca mogę przesunąć pionek, natomiast gdy tylko nadarzy się możliwość kiedy to biały pionek powinien mieć możliwość zbić pionek czerwony opcje wyboru nie pojawiają się na ekranie. Wydaje się to tak jakby biały pionek nie spełniał warunku który zaznacza na planszy możliwość wyboru, ale nie rozumiem dlaczego.
 

Oto link do całości https://pastebin.com/NReMAF8e. Z góry dziękuję za pomoc.

komentarz 8 stycznia 2019 przez DragonCoder Nałogowiec (36,500 p.)
Przydalby sie komentarze, co robisz przy danym ifie itd
komentarz 11 stycznia 2019 przez Łukasz_P Nowicjusz (120 p.)
Jasne, dodałem komentarze do swojego kodu https://pastebin.com/xHmEVJLp

1 odpowiedź

0 głosów
odpowiedź 8 stycznia 2019 przez amited Początkujący (470 p.)
jeżeli nie wiesz który if może mieć problem to opcja jest prosta, w każdym daj cout w którym piszesz sobie co się dzieje, skoro dla czerwonego działa git a dla białego nie to w taki sposób ogarniesz jaki if mu przeszkadza, odpaliłem twój kod ale nie potrafię ogarnać co tam się dzieje ;d
komentarz 11 stycznia 2019 przez Łukasz_P Nowicjusz (120 p.)
Właśnie wiem w którym if'ie jest problem natomiast nie rozumiem dlaczego. Postawiłem 3 pionki w kodzie żeby sprawdzić bicie. Aby ruszyć się pionkiem musisz podać 2 liczby najlepiej oddzielone spacją. Pierwsza z nich odpowiada za długość na planszy a druga za szerokość.
komentarz 12 stycznia 2019 przez amited Początkujący (470 p.)
skoro wiesz to napisz co to za if ktory dziala dla czerwonego ale dla bialego juz nie
komentarz 12 stycznia 2019 przez Łukasz_P Nowicjusz (120 p.)
            if(b>0 && b<7 && plansza[a-2][b-2]==' ' && plansza[a-1][b-1]!=wybor && plansza[a-1][b-1]!=' ')
            {
                plansza[a-2][b-2]='a';
            }
            if(b>0 && b<7 && plansza[a-2][b+2]==' ' && plansza[a-1][b+1]!=wybor && plansza[a-1][b+1]!=' ')
            {
                plansza[a-2][b+2]='b';

Te dwa ify zaznaczają poprawnie miejsca do którego może ruszyć się pionek czerwony

 

            if(b>0 && b<7 && plansza[a+2][b-2]==' ' && plansza[a+1][b-1]!=wybor          && plansza[a+1][b-1]!=' ')
            {
                plansza[a+2][b-2]='c';
            }
            if(b>0 && b<7 && plansza[a+2][b+2]==' ' && plansza[a+1][b+1]!=wybor && plansza[a+1][b+1]!=' ')
            {
                plansza[a+2][b+2]='d';
            }


Natomiast te dwa ify są ignorowane przez kompilator. A sprawdzają one czy pionek nie znajduje się przy krawędzi planszy czy  pole za pionkiem do zbicia jest puste oraz czy pionek który należy zbić na pewno jest pionkiem przeciwnika. Więc wszystko powinno grać, niestety kompilator je pomija.  
 

Podobne pytania

0 głosów
1 odpowiedź 1,328 wizyt
pytanie zadane 8 grudnia 2017 w C i C++ przez alskard Nowicjusz (120 p.)
+1 głos
1 odpowiedź 3,789 wizyt
pytanie zadane 9 sierpnia 2018 w C i C++ przez Bondrusiek Maniak (61,460 p.)
–3 głosów
0 odpowiedzi 166 wizyt

93,720 zapytań

142,648 odpowiedzi

323,266 komentarzy

63,270 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...