Diskuze: Vyplnění prázných míst v 2d poli
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
					Tvůrce				
			Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Asi pořádně nechápu co chceš, ale nešlo by to udělat tak že bys
prošel každej prvek v tom poli a měnil jejich hodnotu na základě nějaký
podmínky?
// Tak to asi ne nevšiml jsem si tvého druhého příspěvku
Ne né, to chce něco propracovanějšího, protože by to jezírko byla akorát směť čísel
Projdeš mapu normálně po řádku a sloupci a od daného prvního prvku v jezírku projdeš rekurzivně prvky okolo něj a očísluješ si je. Pak se logicky z metody vrátíš z5 k procházení po řádku a sloupci dokud nenarazíš na neočíslované jezírko.
Hele když to budeš vyhodnocovat tak můžeš porovnat všechny prvky který s nim sousedi například takto:
If(mapa[x-1,y] = 0 || mapa[x, y-1] = 0)
 mapa[x,y] = pocetJezirek;
else
{
pocetJezirek++;
mapa[x,y] = pocetJezirek;
}
					Co projet cyklem to pole a když narazíš na nulu, tak si vybrat nějaký
náhodný číslo (nebo popořadě) a pak cyklem while hledat ve 4 směrech
další nuly a zapisovat tvoje vybraný číslo?
Zkusil jsem něco napsat (takovým prasáckým způsobem 
)
Random r = new Random();
for(int x = 0; x<32;x++)
            {
                for(int y = 0; y < 32; y++)
                {
                    if(pole[x,y] == 0)
                    {
                        int posX = x;
                        int posY = y;
                        byte num = (byte)r.Next(2,6);
                        pole[posX, posY] = num;
                        while(true)
                        {
                                if (posX < 31 && pole[posX + 1, posY] == 0)
                                {
                                    posX++;
                                    pole[posX, posY] = num;
                                }
                                else if (posX > 0 && pole[posX - 1, posY] == 0)
                                {
                                    posX--;
                                    pole[posX, posY] = num;
                                }
                                else if (posX < 32 && pole[posX, posY + 1] == 0)
                                {
                                    posY++;
                                    pole[posX, posY] = num;
                                }
                                else
                                    break;
                        }
                    }
                }
            }
// Jan Vargovský byl dřív 
private byte cisloJezirka = 2;
       private void NaplnJezera(byte[,] pole)
       {
           for (int x = 0; x < 32; x++)
           {
               for (int y = 0; y < 32; y++)
               {
                   if (pole[x,y] == 0 )  // je prazdne :)
                   {
                       pole[x, y] = cisloJezirka;
                       najdiSousedniVodu(x, y, cisloJezirka);
                       cisloJezirka++;
                   }
               }
           }
       }
       private void najdiSousedniVodu(int x, int y, byte cisloJezirka)
       {
           //+ osetreni jestli nejsem mimo index
           if (pole[x + 1, y] == 0)
           {
               pole[x + 1, y] = cisloJezirka;
               najdiSousedniVodu(x + 1, y, cisloJezirka);
           }
           if (pole[x - 1, y] == 0)
           {
               pole[x - 1, y] = cisloJezirka;
               najdiSousedniVodu(x - 1, y, cisloJezirka);
           }
           if (pole[x, y + 1] == 0)
           {
               pole[x, y + 1] = cisloJezirka;
               najdiSousedniVodu(x, y + 1, cisloJezirka);
           }
           if (pole[x, y - 1] == 0)
           {
               pole[x, y - 1] = cisloJezirka;
               najdiSousedniVodu(x, y - 1, cisloJezirka);
           }
       }
Něco takovéhleho?
						Tady je ještě jeden jak by to mělo ve finále vypadat:
STP
Díky, funguje
//Edit: Jen jsem u metody naplnjezera musel přidat parametr pole
Zobrazeno 11 zpráv z 11.