Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno miny - zobrazení "prázdných" sousedních políček

Dobré odpoledne.

Chtěl jsem se zeptat, jak udělat, že když kliknu na prázdné políčko (myslím takové, které neudává počet min v okolí), tak se mi zobrazí všechny sousední takováto políčka? Radši to ještě upřesním obrázkem - na červeně začmárané políčko jsem kliknul a chci, aby se zobrazily všechny sousední "prázdná" políčka + jedno sousední udávající počet min v okolí:

http://img230.imageshack.us/my.php?image=minyvk2.gi f

Díky.

Předmět Autor Datum
V princípe ide o to, že kliknutie na prázdne políčko má za následok to isté, ako keby sa súčasne kli…
los 30.05.2008 20:37
los
Princip je mi jasný, ale nedokážu to "říct" počítači. Nenaznačil by si mi prosím ten postup pomocí z…
bujj22 30.05.2008 21:07
bujj22
Zasobnik (stack) je nieco ako kopa (alebo skor "stlpec") z ktoreho mozes brat len z vrchu (to co si…
MM.. 30.05.2008 21:25
MM..
To máš pravdu s tím zacyklením...musím si dát majzla, bych ověřoval pořád dokola.3-[ Děkuju všech z…
bujj22 30.05.2008 21:35
bujj22
Presne tak. Dokonca pri ukladaní na zásobník nemusíš nič overovať, stačí, že to overíš až pri spraco…
los 30.05.2008 22:48
los
Díky los. Už se mi to povedlo pomocí fronty. poslední
bujj22 31.05.2008 14:04
bujj22

Princip je mi jasný, ale nedokážu to "říct" počítači. Nenaznačil by si mi prosím ten postup pomocí zásobníku?

Zkusím nejdřív já:))....mám tedy nějaký zásobník, kam si napoprvé uložím políčko na které jsem kliknul -> ověřím, jestli má kolem sebe "prázdná" políčka a pokud ano, tak je uložím do zásobníku -> a takhle postupně než dojde k momentu, kdy už v zásobníku nic nebude = kolem políček nebudou další volná. Chápu to správně?

Zasobnik (stack) je nieco ako kopa (alebo skor "stlpec") z ktoreho mozes brat len z vrchu (to co si tam polozil ako posledne).
Princip si napisal vpodstate spravny. Naukladas si tam vsetkych susedov ktori prichadzaju do uvahy, a potom vyberas z vrchu zasobnika po jednom a ak to ma dalsich susedov tak ich zas naukladas do zasobnika. Samozrejme poziciu ktoru prave vysetrujes uz do zasobnika neukladas ptz. by sa to zacyklilo :-) len susedov ktori prichadzaju do uvahy.

Ak si na policku ktore nie je prazde (je v nom nejake cislo) tak neukladas do zasobnika nic.

P.S. ale pozor aby si si neukladal do zasobnika pole ktore si uz vysetroval resp ktore su uz "odkryte") ptz sa ti to zacykli. //edit: k tomu este doplnim ze do zasobnika ukladaj uz vysetrene (odkryte) pozicie, t.j. vysetruj vsetkych susedov pred ukladanim do zasobnika, lebo inac to nebude efektivne prip. sa to uplne zacykli.
Jednoduchsie je pouzit rekurziu. Nastuduj si aj algoritmy na ktore ti dal linky los.

To máš pravdu s tím zacyklením...musím si dát majzla, bych ověřoval pořád dokola.3-[

Děkuju všech za odpovědi, myslím, že mě to nasměrovalo lepším směrem a dám to už dohromady. Kdyby ne, tak se zeptám.:-)

Zatím se mějte.

Presne tak. Dokonca pri ukladaní na zásobník nemusíš nič overovať, stačí, že to overíš až pri spracovaní políčka zo zásobníka.

Napr. úplne primitívna implementácia by mohla vyzerať nejako takto:

stack.push(start)

while (!stack.empty) {
  cell = stack.pop();

  if (cell && !cell.visible) {
    cell.visible = true;

    if (cell.count == 0) {
      stack.push(cell.offset(-1,-1));
      stack.push(cell.offset( 0,-1));
      stack.push(cell.offset( 1,-1));
      stack.push(cell.offset(-1, 0));
      stack.push(cell.offset( 1, 0));
      stack.push(cell.offset(-1, 1));
      stack.push(cell.offset( 0, 1));
      stack.push(cell.offset( 1, 1));
    }
  }
}

Zpět do poradny Odpovědět na původní otázku Nahoru