Añadida las pistas al sistema de puntuación y limpiado con dart fix

parent ae36ff73
...@@ -53,16 +53,19 @@ class Dificultad { ...@@ -53,16 +53,19 @@ class Dificultad {
); );
int generarNumero() => Random().nextInt(limite) + 1; int generarNumero() => Random().nextInt(limite) + 1;
int generarPuntuacion(int intentos) { int generarPuntuacion(int intentos, int pistas) {
// Si adivinas en menos de estos intentos es suerte
final intentosMinimos = log(limite) / log(2); // log2(limite)
// Cuanto más difícil más puntos // Cuanto más difícil más puntos
final intentosMinimos = log(limite) / log(2); // log2(limite)
final coeficienteDificultad = (intentosMinimos + 2)/_maxIntentos; final coeficienteDificultad = (intentosMinimos + 2)/_maxIntentos;
// En cuantos menos uses intentos mejor
// En cuantos menos intentos mejor
final coeficienteResultado = (_maxIntentos + intentosMinimos + 3) / (_maxIntentos + intentos); final coeficienteResultado = (_maxIntentos + intentosMinimos + 3) / (_maxIntentos + intentos);
final resultado = coeficienteDificultad * coeficienteResultado * 10;
// Para que el resultado acabe siempre en 0 // Cuantas menos pistas mejor
return resultado.round()*10; final coeficientePistas = pistas == 0 ? 1.25 : 1-(pistas*0.1);
final resultado = coeficienteDificultad * coeficienteResultado * coeficientePistas * 10;
return resultado.round()*10; // Para que el resultado acabe siempre en 0
} }
factory Dificultad.copia(Dificultad otro) { factory Dificultad.copia(Dificultad otro) {
......
...@@ -8,11 +8,7 @@ import 'package:peponator/modelo/listaDificultad.dart'; ...@@ -8,11 +8,7 @@ import 'package:peponator/modelo/listaDificultad.dart';
import 'package:peponator/modelo/peponator_record.dart'; import 'package:peponator/modelo/peponator_record.dart';
import 'package:peponator/modelo/pista.dart'; import 'package:peponator/modelo/pista.dart';
import 'package:peponator/paginas/paginas.dart'; import 'package:peponator/paginas/paginas.dart';
import 'package:peponator/widgets/pantalla_pausa.dart';
import 'package:peponator/widgets/peponator_mensaje.dart';
import 'package:peponator/widgets/teclado_numerico.dart';
import 'package:peponator/widgets/tu_mensaje.dart';
import 'package:peponator/widgets/widgets.dart'; import 'package:peponator/widgets/widgets.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
...@@ -1007,8 +1003,12 @@ class _PantallaJuegoState extends State<PantallaJuego> ...@@ -1007,8 +1003,12 @@ class _PantallaJuegoState extends State<PantallaJuego>
void _escribirRespuesta() async { void _escribirRespuesta() async {
await Future.delayed(Duration(milliseconds: 600)); await Future.delayed(Duration(milliseconds: 600));
setState(() { setState(() {
intentos++;
if(numeroEscogido! < numeroAdivinar){
if (intentos == maxIntentos) {
mensajes.add(PeponetorMensajeFactory.derrota());
}
else if(numeroEscogido! < numeroAdivinar){
mensajes.add(PeponetorMensajeFactory.respuesta(numeroEscogido!, numeroAdivinar)); mensajes.add(PeponetorMensajeFactory.respuesta(numeroEscogido!, numeroAdivinar));
limiteInferior = numeroEscogido! + 1; limiteInferior = numeroEscogido! + 1;
_updateMaximum = false; _updateMaximum = false;
...@@ -1019,9 +1019,16 @@ class _PantallaJuegoState extends State<PantallaJuego> ...@@ -1019,9 +1019,16 @@ class _PantallaJuegoState extends State<PantallaJuego>
_updateMaximum = true; _updateMaximum = true;
} }
else { else {
mensajes.add(PeponetorMensajeFactory.victoria(intentos));
victoria = true; victoria = true;
puntuacion = dificultad.generarPuntuacion(intentos);
int numPistasUsadas = 0;
for (Pista pista in pistas) {
if (pista.estado.desbloqueada()) {
++numPistasUsadas;
}
}
mensajes.add(PeponetorMensajeFactory.victoria(intentos, numPistasUsadas));
puntuacion = dificultad.generarPuntuacion(intentos, numPistasUsadas);
if(records != null){ if(records != null){
posicion = records!.length; posicion = records!.length;
...@@ -1031,11 +1038,6 @@ class _PantallaJuegoState extends State<PantallaJuego> ...@@ -1031,11 +1038,6 @@ class _PantallaJuegoState extends State<PantallaJuego>
} }
} }
intentos++;
if (intentos == maxIntentos) {
mensajes.add(PeponetorMensajeFactory.derrota());
}
numeroEscogido = null; numeroEscogido = null;
espera = false; espera = false;
...@@ -1060,7 +1062,7 @@ class _PantallaJuegoState extends State<PantallaJuego> ...@@ -1060,7 +1062,7 @@ class _PantallaJuegoState extends State<PantallaJuego>
for (var prodJson in recordsJson) { for (var prodJson in recordsJson) {
lista.add(PeponatorRecord.desdeJson(prodJson)); lista.add(PeponatorRecord.desdeJson(prodJson));
} }
} on FileSystemException catch(e) { } on FileSystemException {
lista.clear(); lista.clear();
} }
finally { finally {
......
...@@ -307,12 +307,11 @@ class _PantallaRecordsState extends State<PantallaRecords> { ...@@ -307,12 +307,11 @@ class _PantallaRecordsState extends State<PantallaRecords> {
try { try {
final productosString = await file.readAsString(); final productosString = await file.readAsString();
print(productosString);
final List<dynamic> recordsJson = jsonDecode(productosString); final List<dynamic> recordsJson = jsonDecode(productosString);
for (var prodJson in recordsJson) { for (var prodJson in recordsJson) {
lista.add(PeponatorRecord.desdeJson(prodJson)); lista.add(PeponatorRecord.desdeJson(prodJson));
} }
} on FileSystemException catch(e) { } on FileSystemException {
lista.clear(); lista.clear();
} }
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:peponator/modelo/dificultad.dart';
import 'package:peponator/modelo/listaDificultad.dart'; import 'package:peponator/modelo/listaDificultad.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:peponator/paginas/paginas.dart'; import 'package:peponator/paginas/paginas.dart';
import 'package:peponator/paginas/pantalla_dificultad.dart';
import 'package:peponator/paginas/pantalla_juego.dart';
class PeponatorApp extends StatelessWidget { class PeponatorApp extends StatelessWidget {
const PeponatorApp({super.key}); const PeponatorApp({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// TODO: Escribir en preferencias los ajustes por defecto (presumo el modo Fácil)
return MultiProvider( return MultiProvider(
providers: [ providers: [
ChangeNotifierProvider(create: (context) => ListaDificultad()), ChangeNotifierProvider(create: (context) => ListaDificultad()),
......
...@@ -16,10 +16,13 @@ abstract class PeponetorMensajeFactory { ...@@ -16,10 +16,13 @@ abstract class PeponetorMensajeFactory {
return PeponatorMensaje(message: sb.toString()); return PeponatorMensaje(message: sb.toString());
} }
static PeponatorMensaje victoria(int numIntentos) { static PeponatorMensaje victoria(int numIntentos, int numPistas) {
return PeponatorMensaje( String s1 = numIntentos > 1 ? "s" : "";
message: "Felicidades! Lo has conseguido en $numIntentos intentos" String s2 = numPistas > 1 ? "s" : "";
); StringBuffer sb = StringBuffer("Felicidades! Lo has conseguido en $numIntentos intento$s1");
sb.write(numPistas == 0 ? "y sin pistas!" : "usando $numPistas pistas$s2");
return PeponatorMensaje(message: sb.toString());
} }
static PeponatorMensaje derrota() { static PeponatorMensaje derrota() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment