JavaScript - Problema: comparar el último elemento de dos arrays.

 
Vista:
sin imagen de perfil

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:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder