Skip to content

Commit 435345a

Browse files
Arreglo en el commit anterior
1 parent 7c297ef commit 435345a

File tree

5 files changed

+568
-0
lines changed

5 files changed

+568
-0
lines changed

scripts/Constantes.js

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Límites específicos para el jugador
2+
const LIMITEIZQUIERDA = 0;
3+
const LIMITEDERECHA = 560;
4+
const LIMITEARRIBA = 0;
5+
const LIMITEABAJO = 360;
6+
7+
// Límites específicos para los obstaculos
8+
const LIMITECOCHEIZQUIERDA = -200;
9+
const LIMITECOCHEDERECHA = 600;
10+
11+
// Botones del juego
12+
const botonIniciar = document.getElementById("seccionBotones").getElementsByTagName("button")[0];
13+
const botonPausar = document.getElementById("seccionBotones").getElementsByTagName("button")[1];
14+
const botonReiniciar = document.getElementById("seccionBotones").getElementsByTagName("button")[2];
15+
16+
//Imagen del tronco
17+
const TRONCO = new Image();
18+
TRONCO.src = "imagenes/log.png";
19+
20+
//Imagen del coche
21+
const VEHICULO = new Image();
22+
VEHICULO.src = "imagenes/cars.png";

scripts/Obstaculos.js

+178
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
class Obstaculos {
2+
constructor(x, y, alto, ancho, velocidad,tipo) {
3+
this.x = x;
4+
this.y = y;
5+
this.alto = alto;
6+
this.ancho = ancho;
7+
this.velocidad = velocidad;
8+
this.tipo = tipo;
9+
}
10+
11+
// Dibujar los obstáculos en el canvas
12+
dibujar() {
13+
switch (this.tipo) {
14+
case "tronco":
15+
ctx.drawImage(
16+
TRONCO,
17+
this.x,
18+
this.y,
19+
this.ancho,
20+
this.alto
21+
);
22+
break;
23+
case "vehiculo":
24+
if(this.velocidad > 0){
25+
// Imagen de coche moviéndose hacia la derecha con sprites aleatorios
26+
ctx.drawImage(
27+
VEHICULO,
28+
this.imagenesCochesDerecha[this.randomizador][0],
29+
this.imagenesCochesDerecha[this.randomizador][1],
30+
161,
31+
64,
32+
this.x,
33+
this.y,
34+
this.ancho,
35+
this.alto
36+
);
37+
}else{
38+
// Imagen de coche moviéndose hacia la izquierda con sprites aleatorios
39+
ctx.drawImage(
40+
VEHICULO,
41+
this.imagenesCochesIzquierda[this.randomizador][0],
42+
this.imagenesCochesIzquierda[this.randomizador][1],
43+
161,
44+
64,
45+
this.x,
46+
this.y,
47+
this.ancho,
48+
this.alto
49+
);
50+
}
51+
break;
52+
}
53+
}
54+
55+
// Actualizar la posición del obstáculo
56+
actualizar() {
57+
this.x += this.velocidad * velocidadJuego;
58+
// Si se mueve hacia la derecha y sale del canvas, reiniciamos su posición
59+
if(this.velocidad > 0){
60+
if (this.x > LIMITECOCHEDERECHA + this.ancho) {
61+
this.x = LIMITECOCHEIZQUIERDA; // Reaparece en el lado opuesto
62+
this.randomizador = Math.floor(Math.random() * 3); // Cambia el sprite del coche
63+
}
64+
} else {
65+
// En el caso que se mueva a la izquierda, hacemos lo mismo que si fuera a la derecha
66+
if (this.x < LIMITECOCHEIZQUIERDA - this.ancho) {
67+
this.x = LIMITECOCHEDERECHA;
68+
this.randomizador = Math.floor(Math.random() * 3);
69+
}
70+
}
71+
}
72+
}
73+
74+
// Función para inciar los obstaculos del juego
75+
function iniciarObstaculos() {
76+
// Primera fila de coches
77+
for(let i = 0; i < 2; i++) {
78+
let x = i * 350;
79+
arrayCoches.push(new Obstaculos(x, 285, 50, 100, 1,"vehiculo"));
80+
}
81+
// Segunda fila de coches
82+
for (let i = 0; i < 2; i++) {
83+
let x = i * 300;
84+
arrayCoches.push(new Obstaculos(x, 230, 50, 100, -2,"vehiculo"));
85+
}
86+
// Tercera fila de coches
87+
for (let i = 0; i < 2; i++) {
88+
let x = i * 400;
89+
arrayCoches.push(new Obstaculos(x, 175, 50, 100, 2,"vehiculo"));
90+
}
91+
//Cuarta fila de troncos
92+
for (let i = 0; i < 2; i++) {
93+
let x = i * 450;
94+
arrayTroncos.push(new Obstaculos(x, 120, 50, 100, -1.5,"tronco"));
95+
}
96+
// Quita fila de troncos
97+
for (let i = 0; i < 6; i++) {
98+
let x = i * 150;
99+
arrayTroncos.push(new Obstaculos(x, 60, 60, 60, 0.7,"tronco"));
100+
}
101+
}
102+
iniciarObstaculos(); // Creamos los obstaculos
103+
104+
// Manejar el movimiento y la lógica de los obstáculos
105+
function manejadorDeObstaculos() {
106+
// Actualizamos la posición de los coches y cambiamos los sprites de los coches en caso necesario
107+
for (let i = 0; i < arrayCoches.length; i++) {
108+
arrayCoches[i].actualizar();
109+
arrayCoches[i].dibujar();
110+
}
111+
112+
// Actualizamos la posición de los troncos
113+
for (let i = 0; i < arrayTroncos.length; i++) {
114+
arrayTroncos[i].actualizar();
115+
arrayTroncos[i].dibujar();
116+
}
117+
118+
// Comprobación de la colisión con los coches
119+
for(let i = 0;i < arrayCoches.length;i++){
120+
if(colision(arrayCoches[i])){ // Si existe alguna colisión con los coches muere directamente
121+
muerte = true; // Y cambia el estado
122+
}
123+
}
124+
125+
// Comprobación de la colisión con los troncos
126+
if(rana.y < 160 && rana.y > 40){ // Si se encuentra en esa posición (que es donde se encuentra el agua y los troncos) la rana
127+
asalvo = false;
128+
// Comprobamos todos los troncos del array y miramos si ha colisionado con alguno
129+
for (let i = 0; i < arrayTroncos.length; i++) {
130+
if(colision(arrayTroncos[i])){ // Si colisiona con un tronco
131+
rana.y = arrayTroncos[i].y; // Actualiza la posición de la rana con la del tronco que ha golpeado
132+
rana.x += arrayTroncos[i].velocidad * velocidadJuego; // Y con ello también su velocidad
133+
asalvo = true; // Y ahora se encuentra a salvo
134+
break;
135+
}
136+
}
137+
138+
// Si ha pasado por esa posición y no ha habido ninguna colisión con algun tronco significa que ha tocado agua
139+
if(!asalvo){
140+
muerte = true; // Cambia el estado de muerte a verdero
141+
}
142+
}
143+
}
144+
145+
// Método que comprueba si ha habido alguna colisión entre los obstaculos y la rana
146+
function colision(obstaculo) {
147+
// margen que le añadimos a los objetos creados, para que la colisión sea mas cercana
148+
const margenRana = 5;
149+
const margenObstaculo = 5;
150+
151+
let rIzq = rana.x + margenRana; // lado izquierdo de la rana
152+
let rDer = rana.x + rana.tamañoX - margenRana; // lado derecho de la rana
153+
let rDown = rana.y + margenRana; // Parte de abajo de la rana
154+
let rUp = rana.y + rana.tamañoY - margenRana; // Parte de arriba de la rana
155+
156+
let oIzq = Math.round(obstaculo.x + margenObstaculo); // Lado izquierdo del obstaculo
157+
let oDer = Math.round(obstaculo.x + obstaculo.ancho - margenObstaculo); // Lado derecho del obstaculo
158+
let oDown = Math.round(obstaculo.y + margenObstaculo); // Parte de abajo del obstaculo
159+
let oUp = Math.round(obstaculo.y + obstaculo.alto - margenObstaculo); // Parte de arriba del obstaculo
160+
161+
// Lado derecho de rDer es mayor que el lado izquierdo de oIzq.
162+
// Lado izquierdo de rIzq es menor que el lado derecho de oDer.
163+
// Lado superior de rUp es mayor que el lado inferior de oDown.
164+
// Lado inferior de rDown es menor que lado superior de oUp.
165+
166+
// Si se cumplen las condiciones descritas arriba hay colisión
167+
return (
168+
rDer > oIzq &&
169+
rIzq < oDer &&
170+
rUp > oDown &&
171+
rDown < oUp
172+
);
173+
}
174+
175+
// Definimos los sprites de los coches según su dirección y definimos un numero random del 0 al 3
176+
Obstaculos.prototype.imagenesCochesDerecha = [[0, 10], [0, 168], [0, 86]];
177+
Obstaculos.prototype.imagenesCochesIzquierda = [[160, 11], [160, 164], [161, 86]];
178+
Obstaculos.prototype.randomizador = Math.floor(Math.random() * 3); // Este número random será la posición del sprite que se ponga

scripts/Rana.js

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
class Rana {
2+
constructor(){
3+
this.x = canvas.width / 2 - 20;
4+
this.y = 350;
5+
this.velocidad = 40;
6+
this.animacionRana = [[57,60],[307,77],[49,303],[300,304],[48,559],[286,552],[53,801],[308,788]];
7+
this.tamañoX = 40;
8+
this.tamañoY = 40;
9+
}
10+
11+
// Métodos para mover la rana respetando los límites del canvas
12+
moverDerecha(){
13+
this.x += this.velocidad;
14+
if(this.x > LIMITEDERECHA){
15+
this.x = LIMITEDERECHA;
16+
}
17+
}
18+
19+
moverIzquierda(){
20+
this.x -= this.velocidad;
21+
if(this.x < LIMITEIZQUIERDA){
22+
this.x = LIMITEIZQUIERDA;
23+
}
24+
}
25+
26+
moverArriba(){
27+
this.y -= this.velocidad;
28+
if(this.y < LIMITEARRIBA){
29+
this.y = LIMITEARRIBA;
30+
}
31+
}
32+
33+
moverAbajo(){
34+
this.y += this.velocidad;
35+
if(this.y > LIMITEABAJO){
36+
this.y = LIMITEABAJO;
37+
}
38+
}
39+
}
40+
41+
// Imagen de la rana
42+
Rana.prototype.imagen = new Image();
43+
Rana.prototype.imagen.src = "imagenes/frogger.png";

scripts/Variables.js

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Declaración de variables principales
2+
let canvas;
3+
let ctx;
4+
5+
//Arrays de los obstaculos del juego (Coches y troncos)
6+
let arrayCoches = [];
7+
let arrayTroncos = [];
8+
9+
// Variables en relación con el estado de la rana
10+
let rana;
11+
let posicion = 0;
12+
let inicial = 0;
13+
let puntuacion = 0;
14+
let velocidadJuego = 1;
15+
16+
// Estados del juego
17+
let asalvo = false;
18+
let muerte = false;
19+
20+
// Movimientos de la rana
21+
let xDerecha;
22+
let xIzquierda;
23+
let yAbajo;
24+
let yArriba;
25+
26+
//Audios del juego
27+
let audioMeta;
28+
let audioSalto;
29+
let audioMuerte;
30+
let audioAgua;
31+
let audioJuego;
32+
33+
let pausa; //Estado de pausa del juego
34+
35+
let idRana; //Intervalo del juego

0 commit comments

Comments
 (0)