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

parent ae36ff73
......@@ -53,16 +53,19 @@ class Dificultad {
);
int generarNumero() => Random().nextInt(limite) + 1;
int generarPuntuacion(int intentos) {
// Si adivinas en menos de estos intentos es suerte
final intentosMinimos = log(limite) / log(2); // log2(limite)
int generarPuntuacion(int intentos, int pistas) {
// Cuanto más difícil más puntos
final intentosMinimos = log(limite) / log(2); // log2(limite)
final coeficienteDificultad = (intentosMinimos + 2)/_maxIntentos;
// En cuantos menos uses intentos mejor
// En cuantos menos intentos mejor
final coeficienteResultado = (_maxIntentos + intentosMinimos + 3) / (_maxIntentos + intentos);
final resultado = coeficienteDificultad * coeficienteResultado * 10;
// Para que el resultado acabe siempre en 0
return resultado.round()*10;
// Cuantas menos pistas mejor
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) {
......
......@@ -8,11 +8,7 @@ import 'package:peponator/modelo/listaDificultad.dart';
import 'package:peponator/modelo/peponator_record.dart';
import 'package:peponator/modelo/pista.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:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
......@@ -1007,8 +1003,12 @@ class _PantallaJuegoState extends State<PantallaJuego>
void _escribirRespuesta() async {
await Future.delayed(Duration(milliseconds: 600));
setState(() {
if(numeroEscogido! < numeroAdivinar){
intentos++;
if (intentos == maxIntentos) {
mensajes.add(PeponetorMensajeFactory.derrota());
}
else if(numeroEscogido! < numeroAdivinar){
mensajes.add(PeponetorMensajeFactory.respuesta(numeroEscogido!, numeroAdivinar));
limiteInferior = numeroEscogido! + 1;
_updateMaximum = false;
......@@ -1019,9 +1019,16 @@ class _PantallaJuegoState extends State<PantallaJuego>
_updateMaximum = true;
}
else {
mensajes.add(PeponetorMensajeFactory.victoria(intentos));
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){
posicion = records!.length;
......@@ -1031,11 +1038,6 @@ class _PantallaJuegoState extends State<PantallaJuego>
}
}
intentos++;
if (intentos == maxIntentos) {
mensajes.add(PeponetorMensajeFactory.derrota());
}
numeroEscogido = null;
espera = false;
......@@ -1060,7 +1062,7 @@ class _PantallaJuegoState extends State<PantallaJuego>
for (var prodJson in recordsJson) {
lista.add(PeponatorRecord.desdeJson(prodJson));
}
} on FileSystemException catch(e) {
} on FileSystemException {
lista.clear();
}
finally {
......
......@@ -307,12 +307,11 @@ class _PantallaRecordsState extends State<PantallaRecords> {
try {
final productosString = await file.readAsString();
print(productosString);
final List<dynamic> recordsJson = jsonDecode(productosString);
for (var prodJson in recordsJson) {
lista.add(PeponatorRecord.desdeJson(prodJson));
}
} on FileSystemException catch(e) {
} on FileSystemException {
lista.clear();
}
......
import 'package:flutter/material.dart';
import 'package:peponator/modelo/dificultad.dart';
import 'package:peponator/modelo/listaDificultad.dart';
import 'package:provider/provider.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 {
const PeponatorApp({super.key});
@override
Widget build(BuildContext context) {
// TODO: Escribir en preferencias los ajustes por defecto (presumo el modo Fácil)
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => ListaDificultad()),
......
......@@ -16,10 +16,13 @@ abstract class PeponetorMensajeFactory {
return PeponatorMensaje(message: sb.toString());
}
static PeponatorMensaje victoria(int numIntentos) {
return PeponatorMensaje(
message: "Felicidades! Lo has conseguido en $numIntentos intentos"
);
static PeponatorMensaje victoria(int numIntentos, int numPistas) {
String s1 = numIntentos > 1 ? "s" : "";
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() {
......
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