Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Rafa Castillo Passols
/
peponator
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
85fe25b0
authored
May 10, 2025
by
Rafa Castillo Passols
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Sistema de dificultades hecho. Hay asperezas pero la base está
parent
4c5645cf
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
101 additions
and
62 deletions
lib/modelo/listaDificultad.dart
lib/paginas/pantalla_dificultad.dart
lib/paginas/pantalla_juego.dart
lib/peponator_app.dart
lib/widgets/dificultad_dialog.dart
lib/widgets/widget_dificultad.dart
lib/modelo/listaDificultad.dart
View file @
85fe25b0
...
...
@@ -8,8 +8,12 @@ class ListaDificultad extends ChangeNotifier {
Dificultad
.
normal
,
Dificultad
.
dificil
];
int
_indiceSeleccionado
=
0
;
List
<
Dificultad
>
get
dificultades
=>
List
.
unmodifiable
(
_dificultades
);
int
get
length
=>
_dificultades
.
length
;
int
get
indiceSeleccionado
=>
_indiceSeleccionado
;
Dificultad
get
seleccionada
=>
_dificultades
[
_indiceSeleccionado
];
Dificultad
get
(
int
index
)
{
return
_dificultades
[
index
];
...
...
@@ -29,4 +33,9 @@ class ListaDificultad extends ChangeNotifier {
_dificultades
[
indice
]
=
nuevo
;
notifyListeners
();
}
void
select
(
int
indice
)
{
_indiceSeleccionado
=
indice
;
notifyListeners
();
}
}
\ No newline at end of file
lib/paginas/pantalla_dificultad.dart
View file @
85fe25b0
...
...
@@ -25,6 +25,10 @@ class PantallaDificultad extends StatelessWidget {
Widget
build
(
BuildContext
context
)
{
return
Scaffold
(
appBar:
AppBar
(
leading:
BackButton
(
onPressed:
()
{
Dificultad
seleccionada
=
Provider
.
of
<
ListaDificultad
>(
context
,
listen:
false
).
seleccionada
;
Navigator
.
maybePop
(
context
,
seleccionada
);
}),
title:
const
Text
(
"Selecciona dificultad"
),
),
body:
construirListaDificultad
(),
...
...
lib/paginas/pantalla_juego.dart
View file @
85fe25b0
...
...
@@ -4,6 +4,7 @@ import 'dart:io';
import
'package:flutter/material.dart'
;
import
'package:peponator/modelo/dificultad.dart'
;
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'
;
...
...
@@ -13,15 +14,14 @@ import 'dart:math';
import
'package:peponator/widgets/teclado_numerico.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
class
PantallaJuego
extends
StatefulWidget
{
final
bool
fromHome
;
final
Dificultad
dificultad
;
const
PantallaJuego
({
super
.
key
,
required
this
.
fromHome
,
required
this
.
dificultad
});
const
PantallaJuego
({
super
.
key
,
required
this
.
fromHome
});
@override
State
<
PantallaJuego
>
createState
()
=>
_PantallaJuegoState
();
...
...
@@ -37,19 +37,19 @@ class _PantallaJuegoState extends State<PantallaJuego>
double
animatedValue
=
0.0
;
bool
_updateMaximum
=
false
;
late
Dificultad
dificultad
;
late
int
limiteInferior
;
late
int
limiteSuperior
;
late
int
numeroAdivinar
;
late
final
int
maxIntentos
;
int
?
numeroEscogido
;
late
int
maxIntentos
;
late
int
intentos
;
List
<
Widget
>
mensajes
=
[];
List
<
Pista
>
pistas
=
[];
late
int
limiteInferior
;
late
int
limiteSuperior
;
late
bool
manoDerecha
=
true
;
int
?
numeroEscogido
;
late
int
intentos
;
List
<
Pista
>
pistas
=
[];
late
bool
mostrarPistas
;
late
bool
todasPistasBien
;
late
bool
porDesbloquear
;
...
...
@@ -66,13 +66,13 @@ class _PantallaJuegoState extends State<PantallaJuego>
late
final
File
recordsFile
;
List
<
PeponatorRecord
>?
records
;
@override
void
initState
()
{
super
.
initState
();
_loadRecords
();
maxIntentos
=
widget
.
dificultad
.
maxIntentos
;
ListaDificultad
dificultades
=
context
.
read
<
ListaDificultad
>();
dificultad
=
dificultades
.
seleccionada
;
recordTextController
.
addListener
(()
=>
setState
(()
{
...
...
@@ -100,9 +100,9 @@ class _PantallaJuegoState extends State<PantallaJuego>
pistas
.
clear
();
limiteInferior
=
1
;
limiteSuperior
=
widget
.
dificultad
.
limite
;
numeroAdivinar
=
widget
.
dificultad
.
generarNumero
()
;
limiteSuperior
=
dificultad
.
limite
;
numeroAdivinar
=
dificultad
.
generarNumero
();
maxIntentos
=
dificultad
.
maxIntentos
;
intentos
=
0
;
for
(
int
i
=
0
;
i
<
ClasePista
.
values
.
length
&&
i
<
((
maxIntentos
-
1
)/
5
).
floor
();
i
++){
...
...
@@ -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
void
dispose
()
{
textController
.
dispose
();
...
...
@@ -198,7 +215,7 @@ class _PantallaJuegoState extends State<PantallaJuego>
_nuevaPartida
();
break
;
case
OpcionPausa
.
cambiarDificultad
:
// TODO: Handle this case.
_cambiarDificultadPausa
();
break
;
case
OpcionPausa
.
salir
:
// TODO: Handle this case.
...
...
lib/peponator_app.dart
View file @
85fe25b0
...
...
@@ -12,22 +12,20 @@ class PeponatorApp extends StatelessWidget {
@override
Widget
build
(
BuildContext
context
)
{
// TODO: Escribir en preferencias los ajustes por defecto (presumo el modo Fácil)
return
MaterialApp
(
theme:
ThemeData
(
colorScheme:
ColorScheme
.
fromSeed
(
seedColor:
Colors
.
cyan
),
brightness:
Brightness
.
light
,
useMaterial3:
true
),
darkTheme:
ThemeData
.
dark
(),
themeMode:
ThemeMode
.
system
,
home:
MultiProvider
(
// TODO: Al implementar los preferencias habrá que leer de memoria
return
MultiProvider
(
providers:
[
ChangeNotifierProvider
(
create:
(
context
)
=>
ListaDificultad
()),
],
child:
PantallaJuego
(
fromHome:
true
,
dificultad:
Dificultad
.
facil
),
)
child:
MaterialApp
(
theme:
ThemeData
(
colorScheme:
ColorScheme
.
fromSeed
(
seedColor:
Colors
.
cyan
),
brightness:
Brightness
.
light
,
useMaterial3:
true
),
darkTheme:
ThemeData
.
dark
(),
themeMode:
ThemeMode
.
system
,
home:
PantallaJuego
(
fromHome:
true
),
),
);
}
}
lib/widgets/dificultad_dialog.dart
View file @
85fe25b0
...
...
@@ -24,7 +24,7 @@ class _DificultadDialogState extends State<DificultadDialog> {
text:
widget
.
dificultad
?.
maxIntentos
.
toString
()
);
TextEditingController
nombreController
=
TextEditingController
(
text:
widget
.
dificultad
?.
toString
()
text:
widget
.
dificultad
?.
nombre
);
return
SimpleDialog
(
...
...
lib/widgets/widget_dificultad.dart
View file @
85fe25b0
...
...
@@ -4,6 +4,7 @@ import 'package:peponator/modelo/modelo.dart';
import
'package:peponator/widgets/dificultad_dialog.dart'
;
// TODO: HACER QUE SEA MENOS FEO
// TODO: MARCAR DIFICULTAD SELECCIONADA
class
DificultadWidget
extends
StatelessWidget
{
final
int
indice
;
...
...
@@ -13,39 +14,47 @@ class DificultadWidget extends StatelessWidget {
Widget
build
(
BuildContext
context
)
{
ListaDificultad
listaDificultad
=
Provider
.
of
(
context
,
listen:
false
);
Dificultad
dificultad
=
listaDificultad
.
get
(
indice
);
bool
seleccionado
=
indice
==
listaDificultad
.
indiceSeleccionado
;
return
GestureDetector
(
onTap:
()
async
{
Dificultad
?
cambiado
=
await
showDialog
<
Dificultad
>(
context:
context
,
builder:
(
context
)
=>
DificultadDialog
(
dificultad:
dificultad
,)
);
if
(
cambiado
!=
null
&&
context
.
mounted
)
{
listaDificultad
.
update
(
indice
,
cambiado
);
}
},
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Row
(
children:
[
const
SizedBox
(
width:
8
,),
Text
(
dificultad
.
nombre
,
style:
Theme
.
of
(
context
).
textTheme
.
titleLarge
,
),
],
),
Text
(
"Intentos:
${dificultad.maxIntentos}
"
),
Row
(
children:
[
Text
(
"1 -
${dificultad.limite}
"
),
const
SizedBox
(
width:
8
,),
],
),
],
return
Container
(
decoration:
seleccionado
?
BoxDecoration
(
border:
Border
.
all
(
color:
Colors
.
red
))
:
null
,
child:
GestureDetector
(
onTap:
()
=>
listaDificultad
.
select
(
indice
),
onLongPress:
()
async
{
Dificultad
?
cambiado
=
await
showDialog
<
Dificultad
>(
context:
context
,
builder:
(
context
)
=>
DificultadDialog
(
dificultad:
dificultad
,)
);
if
(
cambiado
!=
null
&&
context
.
mounted
)
{
listaDificultad
.
update
(
indice
,
cambiado
);
}
},
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Row
(
children:
[
const
SizedBox
(
width:
8
,
height:
16
,),
Text
(
dificultad
.
nombre
,
style:
Theme
.
of
(
context
).
textTheme
.
titleLarge
,
),
],
),
Text
(
"Intentos:
${dificultad.maxIntentos}
"
),
Row
(
children:
[
Text
(
"1 -
${dificultad.limite}
"
),
const
SizedBox
(
width:
8
,
height:
16
,),
],
),
],
),
),
);
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment