-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMotorDelJuego.cpp
More file actions
122 lines (102 loc) · 4.29 KB
/
MotorDelJuego.cpp
File metadata and controls
122 lines (102 loc) · 4.29 KB
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
121
122
#include "AlmacenDeSonidos.hpp"
#include "AlmacenDeAjustes.hpp"
#include <SFML/Audio.hpp>
#include "MotorDelJuego.hpp"
#include "AlmacenDeFuentes.hpp"
MotorDelJuego::MotorDelJuego(Modelo* m,const Nivel &n) : modelo(m),nivel(n),jugador(n.getCola(),n.getVelocidad()),comida(n,jugador.getGrafico())
,juego_activo(true)
{
//ctor
soloCabeza = n.getCola().size()==1;
comida_sonido.setBuffer(AlmacenDeSonidos::getInstancia().getComida());
muerte_sonido.setBuffer(AlmacenDeSonidos::getInstancia().getMuerte());
comida_sonido.setVolume(AlmacenDeAjustes::getInstancia().getVolumen());
muerte_sonido.setVolume(AlmacenDeAjustes::getInstancia().getVolumen());
tiempo_entre_mov = sf::milliseconds(AlmacenDeAjustes::getInstancia().getDelay());
}
void MotorDelJuego::tratarEvento(sf::Event &event)
{
if (event.type == sf::Event::Closed) modelo->cerrarVentana();
if (event.type == sf::Event::KeyPressed)
{
if (!juego_activo || event.key.code == sf::Keyboard::Escape) modelo->finishController();
else if (event.key.code == sf::Keyboard::W || event.key.code == sf::Keyboard::Up)
jugador.setDireccion(sf::Vector2f(0,(float)-Jugador::despl));
else if (event.key.code == sf::Keyboard::A || event.key.code == sf::Keyboard::Left)
jugador.setDireccion(sf::Vector2f((float)-Jugador::despl,0));
else if (event.key.code == sf::Keyboard::D || event.key.code == sf::Keyboard::Right)
jugador.setDireccion(sf::Vector2f((float)Jugador::despl,0));
else if (event.key.code == sf::Keyboard::S || event.key.code == sf::Keyboard::Down)
jugador.setDireccion(sf::Vector2f(0,(float)Jugador::despl));
}
}
void MotorDelJuego::refrescarPantalla()
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W )|| sf::Keyboard::isKeyPressed(sf::Keyboard::Up ))
jugador.setDireccion(sf::Vector2f(0,(float)-Jugador::despl));
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::A )|| sf::Keyboard::isKeyPressed(sf::Keyboard::Left ))
jugador.setDireccion(sf::Vector2f((float)-Jugador::despl,0));
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::D )|| sf::Keyboard::isKeyPressed(sf::Keyboard::Right ))
jugador.setDireccion(sf::Vector2f((float)Jugador::despl,0));
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::S )|| sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
jugador.setDireccion(sf::Vector2f(0,(float)Jugador::despl));
modelo->dibujar(sf::Sprite(nivel.getRepresentacion()));
auto miVector = jugador.getGrafico();
sf::Vector2f posj = jugador.getPosition();
bool colision=false;
//pintamos la cabeza primero sino coincidirá con la posicion del jugador (la cabeza)
auto it = miVector.begin();
modelo->dibujar(*it);
it++;
for (;it != miVector.end();it++)//aqui para el resto del jugador que compare (la cola)
{
if(it->getPosition()==posj)
{
colision=true;
// break;
}
modelo->dibujar(*it);
}
if (juego_activo)
{
if (tiempo_pasado.getElapsedTime() >= tiempo_entre_mov)
{
jugador.mover();
tiempo_pasado.restart();
}
//cuando crezca desde sólo la cabeza detectara la cola en la misma posicion
//entonces ignoramos esa colisión
if( colision)
{
if(!soloCabeza)//si no solo tenia la cabeza
{
muerte_sonido.play();
juego_activo = false;
}
else//si solo tenia la cabeza y acaba de crecer, lo ignoramos y ponemos el flag a false
soloCabeza=false;
}
else if(comida.teComo(jugador.getPosition()))
{
comida_sonido.play();
jugador.crecer();
}
else if (nivel.colision(jugador.getPosition()))
{
muerte_sonido.play();
juego_activo = false;
}
}
else
{
sf::Text texto("Juego perdido",AlmacenDeFuentes::getInstancia().getArial());
texto.setPosition(100,100);
modelo->dibujar(texto);
}
modelo->dibujar(comida.getDibujo());
}
MotorDelJuego::~MotorDelJuego()
{
comida_sonido.stop();
muerte_sonido.stop();
}