Salta el contingut

Joc del Pescamines

alt text

Objectiu

Este joc es basa en un tauler on s’amaguen una certa quantitat de mines. L’objectiu és identificar on estan.

Regles del joc

Es preguntarà les dimensions del tauler (files i columes) i la quantitat de mines i després s’anirà preguntant l’acció a fer en un bucle que acabarà quan guanye o perda:

  1. Picar en una posició. Podrà passar que:
    1. Hi ha una mina i el joc s’acaba. Es mostra el tauler amb les mines.
    2. No hi ha mina:
    3. Es mostra en eixa cel·la un número: la quantitat de mines que hi ha adjacents a eixa cel·la (serà un número entre 1 i 8).
    4. Si hi ha 0 mines adjacents, vol dir que en cap de les adjacents hi ha mina. Per tant, es destaparan totes les adjacents, recursivament.
  2. Posar una bandereta en una posició (marcar-la com possible candidata a mina). Aleshores, a la que marquem se li posa una bandereta (caràcter P). Si posem una bandera on ja n’hi havia una, la llevarem. També es pot picar damunt d’una cel·la amb bandereta.

En diversos moments del joc, el tauler pot ser:

alt text

Juga un poc al pescamines que té el Linux o Windows per vore què et farà falta.

Disseny

  • Dissenya les estructures de dades necessàries per al joc del buscamines.
  • Posa noms coherents.
  • Documenta la informació que contindran i el seu significat.
  • Pensa que et caldrà un tauler on representar la informació que no es veu: les mines; i altre tauler per a representar la informació que es veu: la quantitat d’adjacents, si la cel·la està destapada, banderetes de bombes, etc.

Funcions

Funció Paràmetres Retorn Descripció
minar() - Quantitat mines posades - Inicia matrius
- Demana la quantitat de mines i les posa aleatòriament
minat(int f, int c) Posició Si hi ha mina o no Retorna cert si a la posició (f,c) hi ha mina, fals en cas contrari
incorrecte(int f, int c) Posició Si la posició és vàlida o no Retorna cert si la posició (f,c) és vàlida dins del tauler, fals en cas contrari
qma(int f, int c) Posició Quantitat de mines adjacents - Retorna la quantitat de mines adjacents a la posició (f,c)
destapat(int f, int c) Posició Si la posició està destapada o no Retorna cert si la posició (f,c) està destapada, fals en cas contrari
qdestapats() - Quantitat de cel·les destapades Retorna la quantitat de cel·les que estan destapades per comprovar si acaba el joc
mostrar_tauler(boolean m) Si volem mostrar mines o no - - Mostra el tauler, amb els números de files i columnes als 4 costats del tauler.
- Tapat : X
- Bandereta: P
- Res : _
-Separador : |
Bomba: ¤ (ALT+207)
picar(int f, int c) Posició Si ha picat una mina o no Si no hi ha mina, destapa la posició cridant a destapar()
bandera(int f, int c) Posició - Posem o llevem una bandereta a la posició (f,c)
destapar(int f, int c) Posició - Destapa la posició (f,c), cas de no haver mina. És una funció recursiva:
- Casos base:
- Posició incorrecta
- Ja destapat
- Bandereta
- Té mines adjacents
Cas genèric:
- Posar la quantitat d’adjacents en eixa cel·la
- Destapar les 8 cel·les adjacents

Observacions:

  • No s’ha de repetir codi: si una funció fa una cosa determinada, cal cridar a eixa funció.
  • Per comoditat, posarem les matrius com a globals, per a no passar-les a totes les funcions com a paràmetres. Però no hi haurà més variables globals.
  • Usa constants simbòliques per a representar els possibles valors del tauler (TAPAT,BANDERA,RES,MINA)