Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
José Pardo Madera
/
ProjectoMultimeda2025
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
1cbd5419
authored
Mar 23, 2025
by
Jaime de la Chica Bergillos
Browse files
Options
_('Browse Files')
Download
Plain Diff
El gran merge
parents
4acaccbe
81d1e59e
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
219 additions
and
258 deletions
ColeccionPantallas.cpp
ColeccionPantallas.h
Executable
GestorPantallas.cpp
GestorPantallas.h
PantallaMundo.cpp
PantallaMundo.h
PantallaPrincipal.cpp
PantallaPrincipal.h
PantallaPrincipal2.cpp
PantallaPrincipal2.h
Personaje.h
main.cpp
makefile
ColeccionPantallas.cpp
View file @
1cbd5419
#include "ColeccionPantallas.h"
#include "Personaje.h"
#include "PantallaPrincipal.h"
#include "PantallaPrincipal2.h"
#include "PantallaInicio.h"
Personaje
Agapito
;
PantallaPrincipal
pant
;
PantallaPrincipal2
pant2
;
PantallaInicio
pant3
;
vector
<
shared_ptr
<
Pantalla
>>
colPantallas
=
{
make_shared
<
PantallaPrincipal
>
(
pant
),
make_shared
<
PantallaPrincipal2
>
(
pant2
),
make_shared
<
PantallaInicio
>
(
pant3
)};
vector
<
shared_ptr
<
Pantalla
>>
colPantallas
=
{
make_shared
<
PantallaPrincipal
>
(
pant
),
make_shared
<
PantallaPrincipal2
>
(
pant2
),
make_shared
<
PantallaInicio
>
(
pant3
)
};
ColeccionPantallas.h
View file @
1cbd5419
#pragma once
#include <vector>
#include <memory>
#include "Personaje.h"
#include "GestorPantallas.h"
using
namespace
std
;
extern
Personaje
Agapito
;
extern
vector
<
shared_ptr
<
Pantalla
>>
colPantallas
;
Executable
View file @
1cbd5419
No preview for this file type
GestorPantallas.cpp
View file @
1cbd5419
...
...
@@ -2,10 +2,12 @@
#include <SDL2/SDL_render.h>
void
Handle
::
reemplazamePor
(
shared_ptr
<
Pantalla
>
pant
){
pant
->
init
();
gestor
.
pantallas
[
idPantalla
]
=
pant
;
}
void
Handle
::
addPantalla
(
shared_ptr
<
Pantalla
>
pant
){
pant
->
init
();
gestor
.
pantallas
.
push_back
(
pant
);
}
...
...
GestorPantallas.h
View file @
1cbd5419
...
...
@@ -49,6 +49,10 @@ class Pantalla{
virtual
void
manejarEntrada
(
Handle
&
)
=
0
;
virtual
void
renderizar
(
SDL_Renderer
*
,
int
tamx
,
int
tamy
)
=
0
;
virtual
bool
transparente
()
=
0
;
/// Se llama cuando se introduce a la pila
virtual
void
init
()
{};
virtual
~
Pantalla
()
{};
};
PantallaMundo.cpp
0 → 100644
View file @
1cbd5419
#include "PantallaPrincipal.h"
#include "PantallaPrincipal2.h"
#include "ColeccionPantallas.h"
#include "Video.h"
PantallaMundo
::
PantallaMundo
(
const
char
*
fondo
,
Hitbox
colisionCambioPantalla
,
size_t
siguientePantalla
,
std
::
array
<
int
,
2
>
posicionInicioPersonaje
)
:
Fondo1
(
fondo
),
colisionCambioPantalla
(
colisionCambioPantalla
),
siguientePantalla
(
siguientePantalla
),
fuente1
(
"assets/OpenSans-Italic.ttf"
,
100
),
interfaz
(
"assets/InterfazPrincipal.png"
),
Ojo
({
Sprite
(
"assets/ojoAbierto.png"
),
Sprite
(
"assets/ojoCerrado.png"
)
}),
colisionesInterfaz
({
Hitbox
(
1630
,
1248
,
997
,
839
),
Hitbox
(
1630
,
1248
,
997
,
839
),
Hitbox
(
1630
,
1248
,
997
,
839
),
Hitbox
(
1630
,
1248
,
997
,
839
)
}),
posicion_inicio_personaje
(
posicionInicioPersonaje
)
{};
void
PantallaMundo
::
comprobarColisionSiguientePantalla
(
Handle
&
handle
)
{
if
(
Agapito
.
comprobarColisionPasiva
(
colisionCambioPantalla
)){
handle
.
reemplazamePor
(
colPantallas
[
siguientePantalla
]);
}
}
void
PantallaMundo
::
comprobarColisionesActivas
()
{
for
(
int
i
=
0
;
i
<
colisionesActivas
.
size
();
i
++
){
Agapito
.
comprobarColision
(
colisionesActivas
[
i
]);
}
}
void
PantallaMundo
::
comprobarColisionesPasivas
()
{
bool
checkColision
=
false
;
int
i
=
0
;
while
(
!
checkColision
&&
i
<
objetos
.
size
()){
checkColision
|=
Agapito
.
comprobarColisionPasiva
(
objetos
[
i
].
getHitbox
());
i
++
;
}
ojo_abierto
=
checkColision
;
}
void
PantallaMundo
::
manejarEntrada
(
Handle
&
handle
)
{
SDL_Event
event
;
while
(
SDL_PollEvent
(
&
event
))
{
switch
(
event
.
type
)
{
case
SDL_KEYDOWN
:
switch
(
event
.
key
.
keysym
.
sym
)
{
case
SDLK_LEFT
:
Agapito
.
move
(
Izquierda
);
break
;
case
SDLK_RIGHT
:
Agapito
.
move
(
Derecha
);
break
;
case
SDLK_UP
:
Agapito
.
move
(
Fondo
);
break
;
case
SDLK_DOWN
:
Agapito
.
move
(
Frente
);
break
;
};
comprobarColisionSiguientePantalla
(
handle
);
comprobarColisionesActivas
();
comprobarColisionesPasivas
();
break
;
case
SDL_MOUSEBUTTONDOWN
:
{
int
xRaton
=
0
;
int
zRaton
=
0
;
SDL_GetMouseState
(
&
xRaton
,
&
zRaton
);
xRaton
*=
(
1920.0
/
handle
.
getTamX
());
zRaton
*=
(
1080.0
/
handle
.
getTamY
());
cout
<<
"Raton x "
<<
xRaton
<<
" Raton z "
<<
zRaton
<<
endl
;
if
(
colisionesInterfaz
[
0
].
colisiona
(
xRaton
,
zRaton
)
&&
ojo_abierto
){
Agapito
.
inventario
[
Agapito
.
numObjetos
]
=
objetos
[
0
];
Agapito
.
numObjetos
++
;
objetos
.
pop_back
();
play_video
(
"assets/videoPrueba"
,
"es"
);
}
}
break
;
case
SDL_QUIT
:
handle
.
removeAll
();
}
}
}
void
PantallaMundo
::
renderizar
(
SDL_Renderer
*
renderer
,
int
tamx
,
int
tamy
)
{
Texto
texto
(
fuente1
,
"AGAPITO 3D"
,
{
255
,
255
,
255
});
Fondo1
.
renderizar
(
renderer
,
0
,
0
,
1920
,
1080
,
tamx
,
tamy
);
Agapito
.
renderizar
(
renderer
,
tamx
,
tamy
);
interfaz
.
renderizar
(
renderer
,
0
,
870
,
1920
,
216
,
tamx
,
tamy
);
Ojo
[
ojo_abierto
?
0
:
1
].
renderizar
(
renderer
,
1300
,
890
,
400
,
170
,
tamx
,
tamy
);
for
(
int
i
=
0
;
i
<
objetos
.
size
();
i
++
){
objetos
[
i
].
renderizar
(
renderer
,
tamx
,
tamy
);
}
Agapito
.
renderizar_inventario
(
renderer
,
tamx
,
tamy
);
texto
.
renderizar
(
renderer
,
50
,
50
,
tamx
,
tamy
);
}
void
PantallaMundo
::
init
()
{
Agapito
.
setX
(
posicion_inicio_personaje
[
0
]);
Agapito
.
setZ
(
posicion_inicio_personaje
[
1
]);
}
PantallaMundo.h
0 → 100644
View file @
1cbd5419
#pragma once
#include "GestorPantallas.h"
#include <vector>
#include "Objeto.h"
#include "Sprite.h"
#include "Texto.h"
#include "Fuente.h"
#include "Personaje.h"
class
PantallaMundo
:
public
Pantalla
{
Fuente
fuente1
;
Sprite
Fondo1
;
Hitbox
colisionCambioPantalla
;
size_t
siguientePantalla
;
Sprite
interfaz
;
bool
ojo_abierto
=
false
;
std
::
array
<
Sprite
,
2
>
Ojo
;
/// Colisiones al pulsar el ratón en la interfaz
std
::
array
<
Hitbox
,
4
>
colisionesInterfaz
;
void
comprobarColisionSiguientePantalla
(
Handle
&
);
void
comprobarColisionesActivas
();
void
comprobarColisionesPasivas
();
std
::
array
<
int
,
2
>
posicion_inicio_personaje
;
protected
:
vector
<
Objeto
>
objetos
;
vector
<
Hitbox
>
colisionesActivas
;
PantallaMundo
(
const
char
*
fondo
,
Hitbox
colisionCambioPantalla
,
size_t
siguientePantalla
,
std
::
array
<
int
,
2
>
posInicioPersonaje
);
public
:
void
manejarEntrada
(
Handle
&
)
override
;
void
renderizar
(
SDL_Renderer
*
,
int
tamx
,
int
tamy
)
override
;
void
init
()
override
;
bool
transparente
()
override
{
return
false
;
};
};
PantallaPrincipal.cpp
View file @
1cbd5419
...
...
@@ -5,43 +5,24 @@
PantallaPrincipal
::
PantallaPrincipal
()
:
fuente1
(
"assets/OpenSans-Italic.ttf"
,
100
),
Fondo1
(
"assets/fondoHabitacion.jpg"
),
colisionCambioPantalla
(
1500
,
-
1500
,
2000
,
1300
)
PantallaMundo
(
"assets/fondoHabitacion.jpg"
,
Hitbox
(
1500
,
-
1500
,
2000
,
1300
),
1
,
{
300
,
1000
}
)
{
Sprite
sprPlanta
(
"assets/planta.png"
);
Sprite
sprInterfaz
(
"assets/InterfazPrincipal.png"
);
Sprite
sprOjoAbierto
(
"assets/ojoAbierto.png"
);
Sprite
sprOjoCerrado
(
"assets/ojoCerrado.png"
);
Hitbox
hitPlanta
(
900
,
700
,
1200
,
-
1000000000
);
Hitbox
hitInterfaz
(
1920
,
0
,
900
,
700
);
Hitbox
hitOjo
(
1630
,
1248
,
997
,
839
);
Objeto
Ojo
(
sprOjoCerrado
,
sprOjoAbierto
,
sprOjoAbierto
,
hitOjo
,
1300
,
890
,
400
,
170
,
normal
);
Objeto
Planta
(
sprPlanta
,
sprPlanta
,
sprPlanta
,
hitPlanta
,
1200
,
400
,
300
,
400
,
normal
);
Objeto
Interfaz
(
sprInterfaz
,
sprInterfaz
,
sprInterfaz
,
hitInterfaz
,
0
,
870
,
1920
,
216
,
normal
);
Hitbox
hitFondo
(
1000000
,
-
10000000
,
300
,
0
);
//Hitbox hitCama(1000, 0, 1200,-10000000);
Hitbox
hitDer
(
1000
,
800
,
10000000
,
-
10000000
);
Hitbox
hitIzq
(
300
,
0
,
10000000
,
-
10000000
);
objetos
.
push_back
(
Interfaz
);
indice_ojo
=
objetos
.
size
();
objetos
.
push_back
(
Ojo
);
objetos
.
push_back
(
Planta
);
colisionesPasivas
.
push_back
(
hitPlanta
);
colisionesInterfaz
.
push_back
(
hitOjo
);
colisionesActivas
.
push_back
(
hitFondo
);
colisionesActivas
.
push_back
(
hitIzq
);
colisionesActivas
.
push_back
(
hitDer
);
...
...
@@ -49,79 +30,4 @@ PantallaPrincipal::PantallaPrincipal() :
}
void
PantallaPrincipal
::
manejarEntrada
(
Handle
&
handle
)
{
SDL_Event
event
;
while
(
SDL_PollEvent
(
&
event
))
{
switch
(
event
.
type
)
{
case
SDL_KEYDOWN
:
switch
(
event
.
key
.
keysym
.
sym
)
{
case
SDLK_LEFT
:
Agapito
.
move
(
Izquierda
);
break
;
case
SDLK_RIGHT
:
Agapito
.
move
(
Derecha
);
break
;
case
SDLK_UP
:
Agapito
.
move
(
Fondo
);
break
;
case
SDLK_DOWN
:
Agapito
.
move
(
Frente
);
break
;
}
if
(
Agapito
.
comprobarColisionPasiva
(
colisionCambioPantalla
)){
PantallaPrincipal2
pant
;
handle
.
reemplazamePor
(
colPantallas
[
1
]);
}
for
(
int
i
=
0
;
i
<
colisionesActivas
.
size
();
i
++
){
Agapito
.
comprobarColision
(
colisionesActivas
[
i
]);
}
{
bool
checkColision
=
false
;
int
i
=
0
;
while
(
!
checkColision
&&
i
<
colisionesPasivas
.
size
()){
checkColision
|=
Agapito
.
comprobarColisionPasiva
(
colisionesPasivas
[
i
]);
i
++
;
}
if
(
checkColision
){
objetos
[
indice_ojo
].
setEstado
(
overworld
);
}
else
objetos
[
indice_ojo
].
setEstado
(
normal
);
}
break
;
case
SDL_MOUSEBUTTONDOWN
:
{
int
xRaton
=
0
;
int
zRaton
=
0
;
SDL_GetMouseState
(
&
xRaton
,
&
zRaton
);
xRaton
*=
(
1920.0
/
handle
.
getTamX
());
zRaton
*=
(
1080.0
/
handle
.
getTamY
());
cout
<<
"Raton x "
<<
xRaton
<<
" Raton z "
<<
zRaton
<<
endl
;
if
(
colisionesInterfaz
[
0
].
colisiona
(
xRaton
,
zRaton
)
&&
objetos
[
indice_ojo
].
getEstado
()
==
overworld
){
Agapito
.
inventario
[
Agapito
.
numObjetos
]
=
objetos
[
2
];
Agapito
.
numObjetos
++
;
objetos
.
pop_back
();
play_video
(
"assets/videoPrueba"
,
"es"
);
}
}
break
;
case
SDL_QUIT
:
handle
.
removeAll
();
}
}
}
void
PantallaPrincipal
::
renderizar
(
SDL_Renderer
*
renderer
,
int
tamx
,
int
tamy
)
{
Texto
texto
(
fuente1
,
"AGAPITO 3D"
,
{
255
,
255
,
255
});
Fondo1
.
renderizar
(
renderer
,
0
,
0
,
1920
,
1080
,
tamx
,
tamy
);
Agapito
.
renderizar
(
renderer
,
tamx
,
tamy
);
for
(
int
i
=
0
;
i
<
objetos
.
size
();
i
++
){
objetos
[
i
].
renderizar
(
renderer
,
tamx
,
tamy
);
}
Agapito
.
renderizar_inventario
(
renderer
,
tamx
,
tamy
);
texto
.
renderizar
(
renderer
,
50
,
50
,
tamx
,
tamy
);
}
PantallaPrincipal.h
View file @
1cbd5419
#pragma once
#include "GestorPantallas.h"
#include <vector>
#include "Objeto.h"
#include "Sprite.h"
#include "Texto.h"
#include "Fuente.h"
#include "Personaje.h"
class
PantallaPrincipal
:
public
Pantalla
{
vector
<
Objeto
>
objetos
;
vector
<
Hitbox
>
colisionesActivas
;
vector
<
Hitbox
>
colisionesPasivas
;
vector
<
Hitbox
>
colisionesInterfaz
;
Hitbox
colisionCambioPantalla
;
Fuente
fuente1
;
Sprite
Fondo1
;
Personaje
Agapito
;
int
indice_ojo
=
0
;
#include "PantallaMundo.h"
class
PantallaPrincipal
:
public
PantallaMundo
{
public
:
PantallaPrincipal
();
void
manejarEntrada
(
Handle
&
)
override
;
void
renderizar
(
SDL_Renderer
*
,
int
tamx
,
int
tamy
)
override
;
bool
transparente
()
override
{
return
false
;
};
};
PantallaPrincipal2.cpp
View file @
1cbd5419
#include "PantallaPrincipal2.h"
#include "PantallaPrincipal.h"
#include "ColeccionPantallas.h"
PantallaPrincipal2
::
PantallaPrincipal2
()
:
fuente1
(
"assets/OpenSans-Italic.ttf"
,
100
),
Fondo1
(
"assets/fondoPuerta.jpg"
),
colisionCambioPantalla
(
1500
,
-
1500
,
2000
,
1300
)
PantallaMundo
(
"assets/fondoPuerta.jpg"
,
Hitbox
(
1500
,
-
1500
,
2000
,
1300
),
0
,
{
300
,
1000
}
)
{
Sprite
sprInterfaz
(
"assets/InterfazPrincipal.png"
);
Sprite
sprOjoAbierto
(
"assets/ojoAbierto.png"
);
Sprite
sprOjoCerrado
(
"assets/ojoCerrado.png"
);
Hitbox
hitInterfaz
(
1920
,
0
,
900
,
700
);
Hitbox
hitOjo
(
1630
,
1248
,
997
,
839
);
Objeto
Ojo
(
sprOjoCerrado
,
sprOjoAbierto
,
sprOjoAbierto
,
hitOjo
,
1300
,
890
,
400
,
170
,
normal
);
Objeto
Interfaz
(
sprInterfaz
,
sprInterfaz
,
sprInterfaz
,
hitInterfaz
,
0
,
870
,
1920
,
216
,
normal
);
objetos
.
push_back
(
Interfaz
);
indice_ojo
=
objetos
.
size
();
objetos
.
push_back
(
Ojo
);
colisionesInterfaz
.
push_back
(
hitOjo
);
}
void
PantallaPrincipal2
::
manejarEntrada
(
Handle
&
handle
)
{
SDL_Event
event
;
while
(
SDL_PollEvent
(
&
event
))
{
switch
(
event
.
type
)
{
case
SDL_KEYDOWN
:
switch
(
event
.
key
.
keysym
.
sym
)
{
case
SDLK_LEFT
:
Agapito
.
move
(
Izquierda
);
break
;
case
SDLK_RIGHT
:
Agapito
.
move
(
Derecha
);
break
;
case
SDLK_UP
:
Agapito
.
move
(
Fondo
);
break
;
case
SDLK_DOWN
:
Agapito
.
move
(
Frente
);
break
;
}
if
(
Agapito
.
comprobarColisionPasiva
(
colisionCambioPantalla
)){
handle
.
reemplazamePor
(
colPantallas
[
0
]);
}
for
(
int
i
=
0
;
i
<
colisionesActivas
.
size
();
i
++
){
Agapito
.
comprobarColision
(
colisionesActivas
[
i
]);
}
{
bool
checkColision
=
false
;
int
i
=
0
;
while
(
!
checkColision
&&
i
<
colisionesPasivas
.
size
()){
checkColision
|=
Agapito
.
comprobarColisionPasiva
(
colisionesPasivas
[
i
]);
i
++
;
}
if
(
checkColision
){
objetos
[
indice_ojo
].
setEstado
(
overworld
);
}
else
objetos
[
indice_ojo
].
setEstado
(
normal
);
}
break
;
case
SDL_MOUSEBUTTONDOWN
:
{
int
xRaton
=
0
;
int
zRaton
=
0
;
SDL_GetMouseState
(
&
xRaton
,
&
zRaton
);
xRaton
*=
(
1920.0
/
handle
.
getTamX
());
zRaton
*=
(
1080.0
/
handle
.
getTamY
());
cout
<<
"Raton x "
<<
xRaton
<<
" Raton z "
<<
zRaton
<<
endl
;
if
(
colisionesInterfaz
[
0
].
colisiona
(
xRaton
,
zRaton
)
&&
objetos
[
indice_ojo
].
getEstado
()
==
overworld
){
Agapito
.
inventario
[
Agapito
.
numObjetos
]
=
objetos
[
2
];
objetos
.
pop_back
();
}
}
break
;
case
SDL_QUIT
:
handle
.
removeAll
();
}
}
}
void
PantallaPrincipal2
::
renderizar
(
SDL_Renderer
*
renderer
,
int
tamx
,
int
tamy
)
{
Texto
texto
(
fuente1
,
"AGAPITO 3D"
,
{
255
,
255
,
255
});
Fondo1
.
renderizar
(
renderer
,
0
,
0
,
1920
,
1080
,
tamx
,
tamy
);
Agapito
.
renderizar
(
renderer
,
tamx
,
tamy
);
for
(
int
i
=
0
;
i
<
objetos
.
size
();
i
++
){
objetos
[
i
].
renderizar
(
renderer
,
tamx
,
tamy
);
}
texto
.
renderizar
(
renderer
,
50
,
50
,
tamx
,
tamy
);
}
PantallaPrincipal2.h
View file @
1cbd5419
#pragma once
#include "GestorPantallas.h"
#include <vector>
#include "Objeto.h"
#include "Sprite.h"
#include "Texto.h"
#include "Fuente.h"
#include "Personaje.h"
class
PantallaPrincipal2
:
public
Pantalla
{
vector
<
Objeto
>
objetos
;
vector
<
Hitbox
>
colisionesActivas
;
vector
<
Hitbox
>
colisionesPasivas
;
vector
<
Hitbox
>
colisionesInterfaz
;
Hitbox
colisionCambioPantalla
;
Fuente
fuente1
;
Sprite
Fondo1
;
Personaje
Agapito
;
int
indice_ojo
=
0
;
#include "PantallaMundo.h"
class
PantallaPrincipal2
:
public
PantallaMundo
{
public
:
PantallaPrincipal2
();
void
manejarEntrada
(
Handle
&
)
override
;
void
renderizar
(
SDL_Renderer
*
,
int
tamx
,
int
tamy
)
override
;
bool
transparente
()
override
{
return
false
;
};
};
Personaje.h
View file @
1cbd5419
...
...
@@ -30,7 +30,7 @@ class Personaje {
int
indice_movimiento
=
0
;
int
x
=
4
00
;
int
x
=
6
00
;
int
profundidades
=
500
;
...
...
@@ -48,4 +48,12 @@ public:
void
comprobarColision
(
Hitbox
&
hitbox
);
bool
comprobarColisionPasiva
(
Hitbox
&
hitbox
);
void
setX
(
int
x
)
{
this
->
x
=
x
;
};
void
setZ
(
int
z
)
{
this
->
profundidades
=
z
;
};
};
main.cpp
View file @
1cbd5419
#include "GestorPantallas.h"
#include "PantallaInicio.h"
#include "ColeccionPantallas.h"
#include <memory>
...
...
makefile
View file @
1cbd5419
CC
=
g++
CodeFiles
=
main.cpp Personaje.cpp Sprite.cpp Objeto.cpp Hitbox.cpp Texto.cpp GestorPantallas.cpp PantallaPrincipal.cpp PantallaPrincipal2.cpp ColeccionPantallas.cpp Video.cpp PantallaInicio.cpp
CodeFiles
=
main.cpp Personaje.cpp Sprite.cpp Objeto.cpp Hitbox.cpp Texto.cpp GestorPantallas.cpp PantallaPrincipal.cpp PantallaPrincipal2.cpp ColeccionPantallas.cpp Video.cpp PantallaInicio.cpp PantallaMundo.cpp
bin
=
Executable
objdir
=
obj
...
...
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