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