Llicència
Pots copiar i redistribuir aquest material seguint la llicència Attribution-NonCommercial-ShareAlike 4.0 International CC BY-NC-SA 4.0, indicant-ne autors originals, l'origen (aquesta web), sense fins comercials i mantenint-ne aquesta la llicència
Autors:
Exercicis de funcions
- Usa el mateix projecte que l'usat als exercicis
- Crea un package cat.itb.elteuusuari(*).dam.m03.uf2.modularitat
- La classe de cada exercici ha de ser el nom de l'exercici
elteuusuari correspon a la direcció de correu eltectrònic del centre, sense punts, fins a @itb.cat
Sumari
Buscamines
L'objectiu d'aquest exercici és desenvolupar el joc buscamines fent servir una metodologia bottom-up.
Cell
Volem fer una classe anomenada Cell
- Una cel·la és una casella que es pot localitazar en la posicióI i posicióJ d'un taulell del buscamines.
- Ha de tenir un indicador de si la casella o cel·la conté una bomba (per defecte serà false)
- Ha de tenir un indicador de destapada per poder gestionar les cel·les que l'usuari ha descobert (per defecte serà false)
- Una propietat adjacència que indica la quantitat de bombes que hi ha adjacents a la casella. Inicialment quan creem una casella ha de ser -1, es modificarà el valor a posteriori
showInformation
Afegeix un mètode a la classe Cell que retorni un string que indiqui:
X : si no ha estat oberta
B : si ha estat oberta i conté una bomba
3 : si ha estat oberta mostra el valor de bombes adjacents (valor -1 .. 8)
Fes el testing d'aquest mètode
Board
Volem fer una classe anomenada Board (taulell)
- Per crear un objecte (instància) d'aquest tipus necessitarem indicar quina mida tindrà el nostre taulell n (serà quadrat) i la quantitat de bombes que contindrà. (Suposarem que bombes < n*n , es a dir que les bombes caben en el taulell)
- Tindrà una propietat matriu que serà el llistat de caselles. Fes ús de la classe Cell creada anteriorment
var matrix = MutableList(n) { i -> MutableList(n) { j -> Cell(i, j) } }
addBombs
- Afegeix una member function anomenada addBombs, que donada una llista de Cells marca les cel·les de la matriu indicant que contenen una bomba
Fes el testing d'aquest mètode
generateBombsList
Fes un mètode anomenat GenerateBombsList que generi una posició i aleatòria
(0..n - 1).random()
i una posició j per cada bomba que contindrà el Board. Assegura't que aquesta llista no conté repeticions
A aquest mètode no se li pot fer testing!
calculateAdjacencies
Fes un mètode que per cada casella d'un taulell de buscamines calculi quantes bombes adjacents té
Per exemple donat aquest taulell:
X X X
B 3 B
X X B
La casella cell=[1,1] té tres bombes adjacents per tant cell.adjacent = 3
Fes el testing!
prepareBoard
Fes un mètode que afegeixi les bombes de forma aleatòria i calculi les adjacencies.
openCell
Fes un mètode que donada una pocició x,y obri la cel·la i que retorni true si hi ha una bomba a la cel·la.
showInformation
- Fes un mètode que retorni un string que mostri el taulell segons la informació de les cel·les
- També et serà útil fer el mètode showHidedCells que mostra el contingut de les cel·les encara que aquestes no hagin estat descobertes. Pots afegir mètode a la classe Cell si és necessari
Fes el testing!
complete
Fes un mètode que retorni true si el jugador ha completat el taulell
Fes el testing!
UI
Fes la classe user interface, aquesta classe s'encarrega de mostrar i recollir les dades de l'usuari.
Necessitarà fer ús de l'scanner (un únic scanner per tot el projecte) per entrar les dades. Per tant l'scanner serà un atribut de la classe.
Play
- Aquest mètode ha d'anar llegint la posició a la que juga l'usuari, fins que s'acabi el joc.
- El joc s'acabarà quan es destapi una bomba "Bomb!"
- Quan no quedin més caselles per destapar "You win!"
Fes ús dels mètodes show per anar mostrant el taulell
Main
fun main() {
var board = Board(5,5)
var ui = Ui(board)
ui.play()
}