Problem z DataGridView + Butto

0

Witam.
Mamy zrobić na zaliczenie program ( grę) polegającą na przesuwaniu bloczków za pomocą przycisków.
111.png
Przesuwamy czerwony bloczek, po natrafieniu na zielony mają być przesuwane obydwa. Przesuwanie w dół i prawo działa, Natomiast gdy przesuwam w lewo lub w górę czerwonym i napotkam na zielony od razu klocki znajdują się przy krawędzie (górnej lub lewej) . Nie wiem dlaczego, sam czerwony działa poprawnie. Gdyby ktoś mógł mi podpowiedzieć w czym jest błąd.
Druga sprawa, jak zrobić aby dało się przesuwać kilka zielonych na raz. Mogę sprawdzać 5 kolejnych komórek, bo liczba bloczków jest stała, ale trochę długi kod by był i pewnie dało by się krócej. Próbowałem pętlą while ale coś mi to nie wychodziło.
Dziękuję bardzo za pomoc i pozdrawiam.
Poniżej kod:

private void btnDown_Click(object sender, EventArgs e)
        {
            for (int w=0;w<=W-1;w++)
                for (int k=0;k<=K-1;k++)
                {
                    int wartosc = plansza[w, k];
                    if (wartosc==1)
                    {
                        if (w >= W - 1)  
                            return;
                        if (plansza[w + 1, k] != 2)
                        {
                            plansza[w, k] = 0;
                            w++;
                            plansza[w, k] = wartosc;
                            pokaz_plansze();
                        }
                        else
                        {             
                                                                                   
                            if (w+1 >= W - 1)
                                return;
                            plansza[w, k] = 0;
                            w++;
                            plansza[w, k] = wartosc;
                            w++;                            
                            plansza[w, k] = wartosc + 1;                            
                            pokaz_plansze();                      
                          
                           
                        }                       
                    }
                }
        }

        private void btnUp_Click(object sender, EventArgs e)
        {
            for (int w = 0; w <= W - 1; w++)
                for (int k = 0; k <= K - 1; k++)
                {
                    int wartosc = plansza[w, k];
                    if (wartosc == 1)
                    {
                        if (w <= 0)
                            return;
                        if (plansza[w - 1, k] != 2)
                        {
                            plansza[w, k] = 0;
                            w--;
                            plansza[w, k] = wartosc;
                            pokaz_plansze();
                        }
                        else
                        {
                            if (w - 1 <= 0)
                                return;
                            plansza[w, k] = 0;
                            w--;
                            plansza[w, k] = wartosc;
                            w--;
                            plansza[w, k] = wartosc + 1;
                            pokaz_plansze();
                        }

                    }

                }

        }

0
Wojciech Nieckarz napisał(a):

Próbowałem pętlą while ale coś mi to nie wychodziło.

Nieudany kod, jak chcesz pomocy, też trzeba dać.

Rózne zachowanie dla czerwonych i zielonych moim zdaniem jest wynikiem zbyt prymitywnego zakodowania koloru jako liczba 1 lub inna (nawet nie chce mi się czytać jaki jest warunek przeciwny)
Bardziej eleganckie, i o gram trudniejsze do popełniania błędów, jest użycie enum

0

Kod gdzie mam zwiększanie wiersza, kolumny działa poprawnie. Nie działa, nie wiem dlaczego tam gdzie mam zmniejszenie. od razu czerwony i zielony blok przesuwa mi do samej krawędzi.
Gdy przesuwam samym czerwonym, wszystko działa ok. Problem gdy napotykam zielony bloczek. Kody w lewo i prawo są praktycznie takie same - różnica w jednym mam k++, w drugim k--Podobnie zakodowanie koloru mieliśmy na zajęciach w saperze, więc tym się sugerowałem. Nie mam kierunku stricte informatycznego. C## mam dwa semestry + jeden metody numeryczne.

0

Problem rozwiązałem. Temat do zamknięcia

1 użytkowników online, w tym zalogowanych: 0, gości: 1