Sistema de dificultades hecho. Hay asperezas pero la base está

parent 4c5645cf
...@@ -8,8 +8,12 @@ class ListaDificultad extends ChangeNotifier { ...@@ -8,8 +8,12 @@ class ListaDificultad extends ChangeNotifier {
Dificultad.normal, Dificultad.normal,
Dificultad.dificil Dificultad.dificil
]; ];
int _indiceSeleccionado = 0;
List<Dificultad> get dificultades => List.unmodifiable(_dificultades); List<Dificultad> get dificultades => List.unmodifiable(_dificultades);
int get length => _dificultades.length; int get length => _dificultades.length;
int get indiceSeleccionado => _indiceSeleccionado;
Dificultad get seleccionada => _dificultades[_indiceSeleccionado];
Dificultad get(int index) { Dificultad get(int index) {
return _dificultades[index]; return _dificultades[index];
...@@ -29,4 +33,9 @@ class ListaDificultad extends ChangeNotifier { ...@@ -29,4 +33,9 @@ class ListaDificultad extends ChangeNotifier {
_dificultades[indice] = nuevo; _dificultades[indice] = nuevo;
notifyListeners(); notifyListeners();
} }
void select(int indice) {
_indiceSeleccionado = indice;
notifyListeners();
}
} }
\ No newline at end of file
...@@ -25,6 +25,10 @@ class PantallaDificultad extends StatelessWidget { ...@@ -25,6 +25,10 @@ class PantallaDificultad extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
leading: BackButton(onPressed: () {
Dificultad seleccionada = Provider.of<ListaDificultad>(context, listen: false).seleccionada;
Navigator.maybePop(context, seleccionada);
}),
title: const Text("Selecciona dificultad"), title: const Text("Selecciona dificultad"),
), ),
body: construirListaDificultad(), body: construirListaDificultad(),
......
...@@ -4,6 +4,7 @@ import 'dart:io'; ...@@ -4,6 +4,7 @@ import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:peponator/modelo/dificultad.dart'; import 'package:peponator/modelo/dificultad.dart';
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';
...@@ -13,15 +14,14 @@ import 'dart:math'; ...@@ -13,15 +14,14 @@ import 'dart:math';
import 'package:peponator/widgets/teclado_numerico.dart'; import 'package:peponator/widgets/teclado_numerico.dart';
import 'package:peponator/widgets/tu_mensaje.dart'; import 'package:peponator/widgets/tu_mensaje.dart';
import 'package:provider/provider.dart';
// TODO: PantallaJuego debería introducirse en una vista PageStorage para almacenar el estado del scrollController // TODO: PantallaJuego debería introducirse en una vista PageStorage para almacenar el estado del scrollController
class PantallaJuego extends StatefulWidget { class PantallaJuego extends StatefulWidget {
final bool fromHome; final bool fromHome;
final Dificultad dificultad;
const PantallaJuego({super.key, required this.fromHome, const PantallaJuego({super.key, required this.fromHome});
required this.dificultad});
@override @override
State<PantallaJuego> createState() => _PantallaJuegoState(); State<PantallaJuego> createState() => _PantallaJuegoState();
...@@ -37,19 +37,19 @@ class _PantallaJuegoState extends State<PantallaJuego> ...@@ -37,19 +37,19 @@ class _PantallaJuegoState extends State<PantallaJuego>
double animatedValue = 0.0; double animatedValue = 0.0;
bool _updateMaximum = false; bool _updateMaximum = false;
late Dificultad dificultad;
late int limiteInferior;
late int limiteSuperior;
late int numeroAdivinar; late int numeroAdivinar;
late final int maxIntentos; int? numeroEscogido;
late int maxIntentos;
late int intentos;
List<Widget> mensajes = []; List<Widget> mensajes = [];
List<Pista> pistas = [];
late int limiteInferior;
late int limiteSuperior;
late bool manoDerecha = true; late bool manoDerecha = true;
int? numeroEscogido; List<Pista> pistas = [];
late int intentos;
late bool mostrarPistas; late bool mostrarPistas;
late bool todasPistasBien; late bool todasPistasBien;
late bool porDesbloquear; late bool porDesbloquear;
...@@ -66,13 +66,13 @@ class _PantallaJuegoState extends State<PantallaJuego> ...@@ -66,13 +66,13 @@ class _PantallaJuegoState extends State<PantallaJuego>
late final File recordsFile; late final File recordsFile;
List<PeponatorRecord>? records; List<PeponatorRecord>? records;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_loadRecords(); _loadRecords();
maxIntentos = widget.dificultad.maxIntentos; ListaDificultad dificultades = context.read<ListaDificultad>();
dificultad = dificultades.seleccionada;
recordTextController.addListener(() => recordTextController.addListener(() =>
setState(() { setState(() {
...@@ -100,9 +100,9 @@ class _PantallaJuegoState extends State<PantallaJuego> ...@@ -100,9 +100,9 @@ class _PantallaJuegoState extends State<PantallaJuego>
pistas.clear(); pistas.clear();
limiteInferior = 1; limiteInferior = 1;
limiteSuperior = widget.dificultad.limite; limiteSuperior = dificultad.limite;
numeroAdivinar = dificultad.generarNumero();
numeroAdivinar = widget.dificultad.generarNumero(); maxIntentos = dificultad.maxIntentos;
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++){
...@@ -142,6 +142,23 @@ class _PantallaJuegoState extends State<PantallaJuego> ...@@ -142,6 +142,23 @@ class _PantallaJuegoState extends State<PantallaJuego>
}); });
} }
void _cambiarDificultadPausa() async {
Dificultad? nuevaDificultad = await
Navigator.push<Dificultad>(
context,
MaterialPageRoute(
builder: (BuildContext context) => PantallaDificultad()
)
);
if (nuevaDificultad != null && dificultad != nuevaDificultad) {
setState(() {
dificultad = nuevaDificultad;
_nuevaPartida();
});
}
}
@override @override
void dispose() { void dispose() {
textController.dispose(); textController.dispose();
...@@ -198,7 +215,7 @@ class _PantallaJuegoState extends State<PantallaJuego> ...@@ -198,7 +215,7 @@ class _PantallaJuegoState extends State<PantallaJuego>
_nuevaPartida(); _nuevaPartida();
break; break;
case OpcionPausa.cambiarDificultad: case OpcionPausa.cambiarDificultad:
// TODO: Handle this case. _cambiarDificultadPausa();
break; break;
case OpcionPausa.salir: case OpcionPausa.salir:
// TODO: Handle this case. // TODO: Handle this case.
......
...@@ -12,8 +12,11 @@ class PeponatorApp extends StatelessWidget { ...@@ -12,8 +12,11 @@ class PeponatorApp extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// TODO: Escribir en preferencias los ajustes por defecto (presumo el modo Fácil) // TODO: Escribir en preferencias los ajustes por defecto (presumo el modo Fácil)
return MultiProvider(
return MaterialApp( providers: [
ChangeNotifierProvider(create: (context) => ListaDificultad()),
],
child: MaterialApp(
theme: ThemeData( theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.cyan), colorScheme: ColorScheme.fromSeed(seedColor: Colors.cyan),
brightness: Brightness.light, brightness: Brightness.light,
...@@ -21,13 +24,8 @@ class PeponatorApp extends StatelessWidget { ...@@ -21,13 +24,8 @@ class PeponatorApp extends StatelessWidget {
), ),
darkTheme: ThemeData.dark(), darkTheme: ThemeData.dark(),
themeMode: ThemeMode.system, themeMode: ThemeMode.system,
home: MultiProvider( home: PantallaJuego(fromHome: true),
// TODO: Al implementar los preferencias habrá que leer de memoria ),
providers: [
ChangeNotifierProvider(create: (context) => ListaDificultad()),
],
child: PantallaJuego(fromHome: true, dificultad: Dificultad.facil),
)
); );
} }
} }
...@@ -24,7 +24,7 @@ class _DificultadDialogState extends State<DificultadDialog> { ...@@ -24,7 +24,7 @@ class _DificultadDialogState extends State<DificultadDialog> {
text: widget.dificultad?.maxIntentos.toString() text: widget.dificultad?.maxIntentos.toString()
); );
TextEditingController nombreController = TextEditingController( TextEditingController nombreController = TextEditingController(
text: widget.dificultad?.toString() text: widget.dificultad?.nombre
); );
return SimpleDialog( return SimpleDialog(
......
...@@ -4,6 +4,7 @@ import 'package:peponator/modelo/modelo.dart'; ...@@ -4,6 +4,7 @@ import 'package:peponator/modelo/modelo.dart';
import 'package:peponator/widgets/dificultad_dialog.dart'; import 'package:peponator/widgets/dificultad_dialog.dart';
// TODO: HACER QUE SEA MENOS FEO // TODO: HACER QUE SEA MENOS FEO
// TODO: MARCAR DIFICULTAD SELECCIONADA
class DificultadWidget extends StatelessWidget { class DificultadWidget extends StatelessWidget {
final int indice; final int indice;
...@@ -13,9 +14,15 @@ class DificultadWidget extends StatelessWidget { ...@@ -13,9 +14,15 @@ class DificultadWidget extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
ListaDificultad listaDificultad = Provider.of(context, listen: false); ListaDificultad listaDificultad = Provider.of(context, listen: false);
Dificultad dificultad = listaDificultad.get(indice); Dificultad dificultad = listaDificultad.get(indice);
bool seleccionado = indice == listaDificultad.indiceSeleccionado;
return GestureDetector( return Container(
onTap: () async { decoration: seleccionado
? BoxDecoration(border: Border.all(color: Colors.red))
: null,
child: GestureDetector(
onTap: () => listaDificultad.select(indice),
onLongPress: () async {
Dificultad? cambiado = await Dificultad? cambiado = await
showDialog<Dificultad>( showDialog<Dificultad>(
context: context, context: context,
...@@ -30,7 +37,7 @@ class DificultadWidget extends StatelessWidget { ...@@ -30,7 +37,7 @@ class DificultadWidget extends StatelessWidget {
children: [ children: [
Row( Row(
children: [ children: [
const SizedBox(width: 8,), const SizedBox(width: 8, height: 16,),
Text( Text(
dificultad.nombre, dificultad.nombre,
style: Theme.of(context).textTheme.titleLarge, style: Theme.of(context).textTheme.titleLarge,
...@@ -41,11 +48,13 @@ class DificultadWidget extends StatelessWidget { ...@@ -41,11 +48,13 @@ class DificultadWidget extends StatelessWidget {
Row( Row(
children: [ children: [
Text("1 - ${dificultad.limite}"), Text("1 - ${dificultad.limite}"),
const SizedBox(width: 8,), const SizedBox(width: 8, height: 16,),
], ],
), ),
], ],
), ),
),
); );
} }
} }
\ No newline at end of file
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