Feladat: I.358 Korcsoport: - Nehézségi fok: -
Füzet: 2014/november, 485 - 486. oldal  PDF  |  MathML 

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

Az aknakereső játék célja az N×N (2N50) négyzet alakú mezőn lévő K (0KN×N/2) akna megtalálása, illetve azok elkerülése. A cellák tartalma eredetileg el van rejtve, de ha kiválasztjuk, akkor megismerjük a tartalmát. Ha a cellában akna volt, akkor vége van a játéknak, különben egy 0 és 8 közötti szám jelenik meg. A szám azt adja meg, hogy hány akna van a választott cella nyolc szomszédjában összesen.
Ha a felfedett cella szomszédságában nincs akna, akkor az összes szomszédja is felfedetté válik, és ez rekurzívan folytatódik a szomszédok szomszédjaival is. Győzelemmel akkor fejeződik be a játék, ha felfedtünk minden olyan mezőt, amely alatt nincs akna.
A következő példában egy játék egy lépését láthatjuk:

 
Aktuális állásA következő lépésA rejtett aknák   112...112........*..2.....2....*.*.*......113...............002......*........002......*.*......001........*Sor: 5Oszlop: 2

 
Készítsünk programot i358 néven, amely az aknamezőt előállítja és a felhasználóval a játékot levezeti.
1.Olvassuk be N és K értékét, és azok felhasználásával oldjuk meg a következő feladatokat.
2.Állítsuk elő a játék pályáját, amelyen véletlenszerű cellákban K darab akna legyen. ,,*'' jelöli az aknát és ,,.'' az üres cellát.
3.Programunk kipróbálása, tesztelése miatt állítsuk be, hogy Teszt és Játék üzemmódból választani lehessen. A Teszt üzemmódban az aknák látszódjanak, míg a Játék-ban maradjanak rejtve.
4.Olvassuk be a pálya egy sor és oszlop koordinátáját és a cella tartalma alapján jelenítsük meg a választ.
a)Ha a cellában akna volt, akkor írjuk ki, Bumm! és a program álljon le.
b)Amennyiben a cellában nem volt akna, akkor jelenítsük meg a pályán a szabályok szerinti eddigi információkat a felfedett és a még nem ismert cellákkal.

5.Folytassuk a tippek beolvasását addig, amíg az összes üres cella szomszédjainak számát a felhasználó meg nem határozza a játékkal. Ha ez sikerül, akkor abban az esetben írjuk ki, hogy Nyertél!
6.Minden tippelés előtt jelenítsük meg, hogy még hány fel nem derített üres cella van a pályán és hányadik tippelés következik éppen.

Beküldendő egy tömörített i358.zip állományban a program forráskódja (i358.pas, i358.cpp, ...) és rövid dokumentációja (i358.txt, i358.pdf, ...), amely tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztő környezetben fordítható.