Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Josef Kuchař - Pepa489:19.12.2014 14:02

Ahoj, mám pole byte[,] o velikosti 32x32 a v něm vygenerovanou mapu jako na obrázku, zelená představuje v poli 1 a prázdná místa 0 a potřebuji každé prázdné místo("jezírko") vyplnit jiným číslem, jen nevím jak na to, možná, že by to šlo algoritmem vlny, ale absolutně nevím jak.
Napíšete mi prosím kód, odkaz(y) nebo jenom jak na to?
Děkuju všem
Pepa489

Odpovědět
19.12.2014 14:02
2x piš, jednou debuguj
Avatar
Josef Kuchař - Pepa489:19.12.2014 14:05

A zde ještě obrázek pro lepší pochopení

Nahoru Odpovědět
19.12.2014 14:05
2x piš, jednou debuguj
Avatar
Ondřej Štorc
Tvůrce
Avatar
Ondřej Štorc:19.12.2014 14:06

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

Editováno 19.12.2014 14:07
Nahoru Odpovědět
19.12.2014 14:06
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Odpovídá na Ondřej Štorc
Josef Kuchař - Pepa489:19.12.2014 14:17

Ne né, to chce něco propracovanějšího, protože by to jezírko byla akorát směť čísel

Nahoru Odpovědět
19.12.2014 14:17
2x piš, jednou debuguj
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Josef Kuchař - Pepa489
Jan Vargovský:19.12.2014 14:48

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.

Editováno 19.12.2014 14:48
 
Nahoru Odpovědět
19.12.2014 14:48
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na Josef Kuchař - Pepa489
Ondřej Štorc:19.12.2014 14:50

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;
}
Nahoru Odpovědět
19.12.2014 14:50
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Odpovídá na Josef Kuchař - Pepa489
Lukáš Křehula:19.12.2014 14:51

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 :D)

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 :)

Editováno 19.12.2014 14:52
 
Nahoru Odpovědět
19.12.2014 14:51
Avatar
STP
Člen
Avatar
STP:19.12.2014 14:56
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?

Editováno 19.12.2014 14:56
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
19.12.2014 14:56
Když umřít, tak online!!!
Avatar
Josef Kuchař - Pepa489:19.12.2014 15:00

Tady je ještě jeden jak by to mělo ve finále vypadat:

Editováno 19.12.2014 15:01
Nahoru Odpovědět
19.12.2014 15:00
2x piš, jednou debuguj
Avatar
Odpovídá na STP
Josef Kuchař - Pepa489:19.12.2014 15:12

STP
Díky, funguje
//Edit: Jen jsem u metody naplnjezera musel přidat parametr pole

Editováno 19.12.2014 15:13
Nahoru Odpovědět
19.12.2014 15:12
2x piš, jednou debuguj
Avatar
STP
Člen
Avatar
Odpovídá na Josef Kuchař - Pepa489
STP:19.12.2014 15:12

Jo mělo by to projít tak jak chceš :)

Nahoru Odpovědět
19.12.2014 15:12
Když umřít, tak online!!!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.