
Problema: comparar el último elemento de dos arrays.
Publicado por Beatriz (1 intervención) el 22/05/2019 10:54:25
Hola!
Soy una estudiante de primero de bachiller y voy a presentar con mi colegio un juego inspirado en el típico "Simon says". El código lo tengo que escribir en AppLab (herramienta online que usamos en clase) y el lenguaje que usa es JavaScript.
El juego de Simon says se basa en que tienes cuatro botones de colores distintos y te muestra una secuencia iluminada que tienes que repetir pulsando los botones en el orden correcto. Empiezas con un color y por cada ronda que aciertas se añade un color a la secuencia, complicando el juego. El proceso es bastante simple, dos listas de arrays, una de la secuencia que genera este function:
La variable ronda indica el número de colores que están en la secuencia. Ahora, para saber si los colores que clickas después de la secuencia son iguales a los de la secuencian (por lo tanto estás siguiendo la secuencia) escribí este function que se ejecuta después de que clickas un color
Pero no consigo hacer que funcione. La verdad es que no encuentro otra manera para comparar secuencia y respuesta (si directamente comparo los dos arrays completos me da gameover todo el rato). Y sé que debería funcionar ya que me he basado en un vídeo de un profesor americano y a él le funciona. Aquí está el video en el que hace la función comprobarSolucion https://www.youtube.com/watch?v=4Lmg0MhkaMY
Y aquí dejo el código completo por si os sirve:
Soy una estudiante de primero de bachiller y voy a presentar con mi colegio un juego inspirado en el típico "Simon says". El código lo tengo que escribir en AppLab (herramienta online que usamos en clase) y el lenguaje que usa es JavaScript.
El juego de Simon says se basa en que tienes cuatro botones de colores distintos y te muestra una secuencia iluminada que tienes que repetir pulsando los botones en el orden correcto. Empiezas con un color y por cada ronda que aciertas se añade un color a la secuencia, complicando el juego. El proceso es bastante simple, dos listas de arrays, una de la secuencia que genera este function:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var secuencia [];
var respuesta [];
var ronda = 1;
function flashSecuencia(){
respuesta = [];
secuencia.push(randomNumber(0,3));
for(var i = 0; i < ronda; i++){
var colorActual = secuencia[i];
if(colorActual === 0) flashVerde();
if(colorActual === 1) flashRojo();
if(colorActual === 2) flashAmarillo();
if(colorActual === 3) flashAzul();
}
}
La variable ronda indica el número de colores que están en la secuencia. Ahora, para saber si los colores que clickas después de la secuencia son iguales a los de la secuencian (por lo tanto estás siguiendo la secuencia) escribí este function que se ejecuta después de que clickas un color
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//flash click
onEvent("botonverde", "mousedown", function( ) {
setProperty("botonverde", "background-color", "#00FF00");
});
onEvent("botonverde", "mouseup", function ( ) {
setProperty("botonverde", "background-color", "#009900");
respuesta.push(0);
comprobarSolucion();
});
function comprobarSolucion(){
var colorRespuestaActual = respuesta.lenght - 1;
var respuestaActual = respuesta[colorRespuestaActual];
if(respuestaActual != secuencia[colorRespuestaActual]){
setScreen("gameover");
} else if (colorRespuestaActual == secuencia.lenght - 1){
ronda++;
setNumber("text_area1", ronda);
wait(5000);
flashSecuencia();
}
}
Pero no consigo hacer que funcione. La verdad es que no encuentro otra manera para comparar secuencia y respuesta (si directamente comparo los dos arrays completos me da gameover todo el rato). Y sé que debería funcionar ya que me he basado en un vídeo de un profesor americano y a él le funciona. Aquí está el video en el que hace la función comprobarSolucion https://www.youtube.com/watch?v=4Lmg0MhkaMY
Y aquí dejo el código completo por si os sirve:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//verde 0 rojo 1 amarillo 2 azul 3
//variables
var secuencia = [];
var ronda = 1;
var respuesta = [];
//navegación pantallas principales
onEvent("button1", "click", function( ) {
setScreen("juego");
flashSecuencia();
});
setNumber("text_area1", ronda);
//comprobar secuencia con respuesta
function comprobarSolucion(){
var colorRespuestaActual = respuesta.lenght - 1;
var respuestaActual = respuesta[colorRespuestaActual];
if(respuestaActual != secuencia[colorRespuestaActual]){
setScreen("gameover");
} else if (colorRespuestaActual == secuencia.lenght - 1){
ronda++;
setNumber("text_area1", ronda);
wait(5000);
flashSecuencia();
}
}
//secuencias de luces
function flashSecuencia(){
respuesta = [];
secuencia.push(randomNumber(0,3));
for(var i = 0; i < ronda; i++){
var colorActual = secuencia[i];
if(colorActual === 0) flashVerde();
if(colorActual === 1) flashRojo();
if(colorActual === 2) flashAmarillo();
if(colorActual === 3) flashAzul();
}
}
//función wait
function wait(ms){
var startTime = getTime();
var currentTime = getTime();
while(currentTime - startTime < ms){
currentTime = getTime();
}
}
//funciones flashes
function flashVerde(){
setProperty("botonverde", "background-color", "#00FF00");
wait(250);
setProperty("botonverde", "background-color", "#009900");
wait(100);
}
function flashRojo(){
setProperty("botonrojo", "background-color", "#FF0000");
wait(250);
setProperty("botonrojo", "background-color", "#990000");
wait(100);
}
function flashAmarillo(){
setProperty("botonamarillo", "background-color", "#FFFF00");
wait(250);
setProperty("botonamarillo", "background-color", "#999900");
wait(100);
}
function flashAzul(){
setProperty("botonazul", "background-color", "#0000FF");
wait(250);
setProperty("botonazul", "background-color", "#000099");
wait(100);
}
//flash click
onEvent("botonverde", "mousedown", function( ) {
setProperty("botonverde", "background-color", "#00FF00");
});
onEvent("botonverde", "mouseup", function ( ) {
setProperty("botonverde", "background-color", "#009900");
respuesta.push(0);
comprobarSolucion();
});
onEvent("botonrojo", "mousedown", function( ) {
setProperty("botonrojo", "background-color", "#FF0000");
});
onEvent("botonrojo", "mouseup", function ( ) {
setProperty("botonrojo", "background-color", "#990000");
respuesta.push(1);
comprobarSolucion();
});
onEvent("botonamarillo", "mousedown", function( ) {
setProperty("botonamarillo", "background-color", "#FFFF00");
});
onEvent("botonamarillo", "mouseup", function ( ) {
setProperty("botonamarillo", "background-color", "#999900");
respuesta.push(2);
comprobarSolucion();
});
onEvent("botonazul", "mousedown", function( ) {
setProperty("botonazul", "background-color", "#0000FF");
});
onEvent("botonazul", "mouseup", function ( ) {
setProperty("botonazul", "background-color", "#000099");
respuesta.push(3);
comprobarSolucion();
});
Valora esta pregunta


0