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.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
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
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ě?

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