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.