<div class="page">
<div class="cover text-center">
<img class="mx-auto" src=/itb/images/logo_mislata.png alt="logo">
# Proves d'objectes
<div class="text-end fit-content ms-auto my-3 mt-auto pt-3">
<p><strong>Autor:</strong> Joan Puigcerver Ibáñez</p>
<p><strong>Correu electrònic:</strong> j.puigcerveribanez@edu.gva.es</p>
<p><strong>Curs:</strong> 2024/2025</p>
</div>
<div>
<p class="fw-bold mb-0">Llicència: BY-NC-SA</p>
<p class="d-none d-md-block">(Reconeixement - No Comercial - Compartir Igual)</p>
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ca" target="_blank">
<img class="mx-auto" src="/itb/images/license.png" alt="Licence"/>
</a>
</div><!--license-->
</div><!--cover-->
</div><!--page-->
{:toc}
## Persona
Implementa la classe `Persona` amb els següents atributs:
- `String` Nom
- `String` Cognoms
- `int` Edat
- `int` Altura (cm)
- `double `Pes (kg)
Implementa els mètodes:
- Getters i setters.
- `String nomComplet()`: Retorna el cognom i el nom separats per una coma.
```
Cognom, Nom
```
- `void aniversari()`: Augmenta el 1 l'edat.
- `boolean esMajorEdat()`: Retorna `true` si la persona té 18 anys o més; `false` en qualsevol altre cas.
- `double imc()`: Retorna l'[Índex de Massa Corporal (IMC)](https://ca.wikipedia.org/wiki/%C3%8Dndex_de_massa_corporal) de la persona.
## Producte i LlistaCompra
### Product
Implementa la classe `Producte` amb els següents atributs:
- `String` Nom
- `double` Preu
- `int` Unitats
Implementa els mètodes:
- Getters i setters.
- `String toString()`: Retorna una cadena amb el nom i el preu del producte.
```
ÂNom: Preu
```
### LlistaCompra
Implementa la classe `LlistaCompra` amb els següents atributs:
- `String` Nom
- `List<Producte>` Productes
Implementa els mètodes:
- Getters i setters.
- `void afegirProducte(Producte producte)`: Afegeix un producte a la llista.
- `double total()`: Retorna el preu total de la llista de la compra.
### Proves
Implementa les proves de les classes `Producte` i `LlistaCompra`.
## TicTacToe
### TicTacToeMoviment
Implementa la classe `TicTacToeMoviment` amb els següents atributs:
- `int` fila: Fila del tauler on es vol posar la fitxa.
- `int` columna: Columna del tauler on es vol posar la fitxa.
- `int` jugador: Jugador que fa el moviment.
Implementa els següents mètodes:
- Getters i setters.
### TicTacToeTauler
Implementa la classe `TicTacToeTauler` amb els següents atributs:
- `int[][]` tauler: Tauler de 3x3 on es guardaran les fitxes del joc.
- __0__: casella buida
- __1__: fitxa del jugador 1
- __2__: fitxa del jugador 2
- `TicTacToeMoviment` ultimaJugada: Últim moviment que s'ha fet.
- `int` __nombreJugades__: Nombre de jugades que s'han fet.
- `int` __guanyador__: Jugador que ha guanyat la partida.
- `boolean` __acabat__: Indica si la partida ha acabat.
Implementa el constructor `TicTacToeTauler()` que inicialitza el tauler a 0 i els altres atributs a valors per defecte.
Implementa els següents mètodes:
- Getters i setters.
- `boolean esMovimentValid(TicTacToeMoviment moviment)`: Retorna `true` si el moviment és vàlid; `false` en qualsevol altre cas.
Un moviment és vàlid si la posició (fila, columna) éstà dins del tauler i la posició indicada no està ocupada per un altra fitxa.
- `void actualitzaTauler(TicTacToeMoviment moviment)`: Actualitza el tauler amb el moviment que s'ha fet.
- `void render()`: Mostra el tauler per pantalla en el següent format:
```
-------------
| | 1 | |
-------------
| | 2 | |
-------------
| 2 | 1 | |
-------------
```
- `void comprovaAcabada()`: Comprova si la partida ha acabat i comprova si hi ha un guanyador.
Aquest mètode comprova si s'ha aconseguit un 3 en ratlla en alguna de les direccions possibles
utilitzant els següents mètodes privats:
- `private boolean comprovaFila()`: Comprova si hi ha un 3 en ratlla a la fila de l'últim moviment.
- `private boolean comprovaColumna()`: Comprova si hi ha un 3 en ratlla a la columna de l'últim moviment.
- `private boolean comprovaDiagonal()`: Comprova si hi ha un 3 en ratlla a la diagonal de l'últim moviment.
- `private boolean comprovaDiagonalInversa()`: Comprova si hi ha un 3 en ratlla a la diagonal inversa de l'últim moviment.
També comprova si s'han fet 9 jugades i no hi ha guanyador, en aquest cas la partida acaba en empat.
Aquest lloc web utilitza galetes per millorar l'experiència de l'usuari