Arreglado cosillas con la dificultad y el peponator. Hecho que mantener borrar…

Arreglado cosillas con la dificultad y el peponator. Hecho que mantener borrar en teclado borre todo
parent a51d34d9
......@@ -11,31 +11,21 @@ import 'dart:math';
/// La penalización por tener pistas debería de ser mayor cuanto
/// mayor sea la dificultad.
class Dificultad {
final int limiteInferior;
final int limiteSuperior;
final int intentos;
// TODO: SISTEMA PARA CALCULAR PUNTUACIÓN. Pensar en log2(limite)
const Dificultad({
required this.limiteInferior,
required this.limiteSuperior,
required this.intentos
});
final int _limite;
final int _maxIntentos;
static final Dificultad facil = const Dificultad(
limiteInferior: 1,
limiteSuperior: 100,
intentos: 20
);
static final Dificultad normal = const Dificultad(
limiteInferior: 1,
limiteSuperior: 500,
intentos: 35,
);
static final Dificultad dificil = const Dificultad(
limiteInferior: 1,
limiteSuperior: 1000,
intentos: 50
);
const Dificultad({required limite, required maxIntentos}):
_limite = limite, _maxIntentos = maxIntentos;
int get limite => _limite;
int get maxIntentos => _maxIntentos;
int generarNumero() => Random().nextInt(limiteSuperior) + limiteInferior;
static const Dificultad facil = Dificultad(limite: 100, maxIntentos: 7+1);
static const Dificultad normal = Dificultad(limite: 500, maxIntentos: 9+1);
static const Dificultad dificil = Dificultad(limite: 1000, maxIntentos: 10+1);
int generarNumero() => Random().nextInt(limite) + 1;
int generarPuntuacion(int intentos) => (maxIntentos-intentos)*100;
}
\ No newline at end of file
......@@ -6,8 +6,9 @@ import 'package:peponator/modelo/dificultad.dart';
class Partida {
final Dificultad dificultad;
final int objetivo;
final int intentos;
final int puntuacion;
Partida({required this.dificultad}):
objetivo = dificultad.generarNumero(), puntuacion = 0;
objetivo = dificultad.generarNumero(), intentos = 0, puntuacion = 0;
}
\ No newline at end of file
......@@ -3,6 +3,7 @@ import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:peponator/modelo/dificultad.dart';
import 'package:peponator/modelo/peponator_record.dart';
import 'package:peponator/modelo/pista.dart';
import 'package:peponator/paginas/paginas.dart';
......@@ -17,8 +18,10 @@ import 'package:peponator/widgets/tu_mensaje.dart';
class PantallaJuego extends StatefulWidget {
final bool fromHome;
final Dificultad dificultad;
const PantallaJuego({Key? key, required this.fromHome}): super(key: key);
const PantallaJuego({super.key, required this.fromHome,
required this.dificultad});
@override
State<PantallaJuego> createState() => _PantallaJuegoState();
......@@ -69,8 +72,7 @@ class _PantallaJuegoState extends State<PantallaJuego>
super.initState();
_loadRecords();
// TODO: Cargar el máximo de intentos
maxIntentos = 21;
maxIntentos = widget.dificultad.maxIntentos;
recordTextController.addListener(() =>
setState(() {
......@@ -79,7 +81,7 @@ class _PantallaJuegoState extends State<PantallaJuego>
);
_controller = AnimationController(
duration: Duration(milliseconds: 200),
duration: const Duration(milliseconds: 200),
vsync: this
);
_controller.addListener(() {
......@@ -92,18 +94,15 @@ class _PantallaJuegoState extends State<PantallaJuego>
}
void _nuevaPartida(){
Random random = Random();
setState(() {
textController.clear();
mensajes.clear();
pistas.clear();
limiteInferior = 1;
// TODO: Cargar el límite superior
limiteSuperior = 100;
limiteSuperior = widget.dificultad.limite;
numeroAdivinar = random.nextInt(limiteSuperior)+limiteInferior;
numeroAdivinar = widget.dificultad.generarNumero();
intentos = 0;
for(int i = 0; i < ClasePista.values.length && i < ((maxIntentos-1)/5).floor(); i++){
......@@ -346,6 +345,7 @@ class _PantallaJuegoState extends State<PantallaJuego>
child: TecladoNumerico(
onNumberPress: _onNumberPress,
onBackspacePress: _onBackspacePress,
onLongBackSpacePress: _onLongBackspacePress,
onEnterPress: _onEnterPress,
numberBackgroundColor: (Theme.of(context).brightness == Brightness.light)?
Colors.cyan : Theme.of(context).colorScheme.inversePrimary,
......@@ -894,6 +894,14 @@ class _PantallaJuegoState extends State<PantallaJuego>
_actualizarPistas();
}
void _onLongBackspacePress() {
setState(() {
numeroEscogido = null;
textController.text = "";
error = false;
});
}
void _onEnterPress() {
setState(() {
if(numeroEscogido != null && numeroEscogido! >= limiteInferior && numeroEscogido! <= limiteSuperior){
......@@ -960,7 +968,6 @@ class _PantallaJuegoState extends State<PantallaJuego>
await Future.delayed(Duration(milliseconds: 600));
setState(() {
// TODO: Construir respuesta de Peponator
mensajes.add(PeponatorMensaje(message: "¡Hola! Estoy pensando en un número del $limiteInferior al $limiteSuperior. ¿Te crees capaz de adivinarlo?"));
if(numeroEscogido! < numeroAdivinar){
limiteInferior = numeroEscogido! + 1;
_updateMaximum = false;
......@@ -982,6 +989,9 @@ class _PantallaJuegoState extends State<PantallaJuego>
}
}
}
mensajes.add(PeponatorMensaje(message: "¡Hola! Estoy pensando en un número del $limiteInferior al $limiteSuperior. ¿Te crees capaz de adivinarlo?"));
numeroEscogido = null;
intentos++;
espera = false;
......
import 'package:flutter/material.dart';
import 'package:peponator/modelo/modelo.dart';
import 'package:peponator/paginas/paginas.dart';
import 'package:peponator/paginas/pantalla_juego.dart';
......@@ -17,7 +18,7 @@ class PeponatorApp extends StatelessWidget {
),
darkTheme: ThemeData.dark(),
themeMode: ThemeMode.system,
home: PantallaJuego(fromHome: true)
home: PantallaJuego(key: key, fromHome: true, dificultad: Dificultad.facil,)
);
}
}
......@@ -5,7 +5,7 @@ class PantallaPausa extends StatelessWidget {
final bool manoDerecha;
late final Alignment alignment;
PantallaPausa({Key? key, required this.orientacion, required this.manoDerecha}): super(key: key) {
PantallaPausa({super.key, required this.orientacion, required this.manoDerecha}) {
if(orientacion == Orientation.portrait){
alignment = Alignment.center;
}
......
......@@ -5,9 +5,9 @@ class PeponatorMensaje extends StatelessWidget {
final String message;
const PeponatorMensaje({
Key? key,
super.key,
required this.message,
}) : super(key: key);
});
@override
Widget build(BuildContext context) {
......
......@@ -7,8 +7,7 @@ class PistaWidget extends StatelessWidget {
final EstadoPista estado;
final VoidCallback? onPressed;
const PistaWidget({Key? key, required this.titulo, required this.mensaje, required this.estado, this.onPressed}):
super(key: key);
const PistaWidget({super.key, required this.titulo, required this.mensaje, required this.estado, this.onPressed});
@override
Widget build(BuildContext context) {
......
......@@ -5,6 +5,7 @@ typedef NumberCallback = void Function(int number);
class TecladoNumerico extends StatelessWidget {
final NumberCallback? onNumberPress;
final VoidCallback? onBackspacePress;
final VoidCallback? onLongBackSpacePress;
final VoidCallback? onEnterPress;
final Color numberBackgroundColor;
......@@ -19,9 +20,10 @@ class TecladoNumerico extends StatelessWidget {
final bool disableEnter;
const TecladoNumerico({
Key? key,
super.key,
this.onNumberPress,
this.onBackspacePress,
this.onLongBackSpacePress,
this.onEnterPress,
this.numberBackgroundColor = Colors.cyan,
this.backspaceBackgroundColor = Colors.red,
......@@ -31,7 +33,7 @@ class TecladoNumerico extends StatelessWidget {
this.enterColor = const Color.fromARGB(255, 255, 255, 255),
this.invertBackspaceEnter = false,
this.disableEnter = false
}): super(key: key);
});
@override
Widget build(BuildContext context) {
......@@ -118,6 +120,7 @@ class TecladoNumerico extends StatelessWidget {
)
),
onPressed: onBackspacePress,
onLongPress: onLongBackSpacePress,
child: Icon(
Icons.backspace_outlined,
color: backspaceColor,
......
......@@ -4,9 +4,9 @@ class TuMensaje extends StatelessWidget {
final String message;
const TuMensaje({
Key? key,
super.key,
required this.message
}): super(key: key);
});
@override
Widget build(BuildContext context) {
......
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