Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <vector>
- #include <list>
- //using namespace std;
- class Personaje{
- public:
- char id[256];
- float xi;
- float xdAnt;
- float xd;
- float yi;
- float yd;
- char tipo[2];
- bool salto;
- std::vector<float> vectorSaltos;
- bool desaparecido;
- float distancia;
- void actualizarPosicion();
- void desaparecer();
- };
- class Procesamiento{
- public:
- void procesarPersonajes(const char*);
- void procesarSaltos(const char*);
- void procesar();
- bool termino();
- bool hayColision(float,float,float,float,float, float);
- void imprimirDesaparecidos();
- std::vector<Personaje*> vectorPersonajes;
- std::list<Personaje*> listaDesaparecidos;
- };
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //Procesamiento
- void Procesamiento::procesarPersonajes(const char* nombreArchivo){
- printf("Comienzo a procesar personajes");
- FILE * archivo = fopen(nombreArchivo,"r");
- if(archivo == NULL){
- exit(1);
- }
- Personaje* personaje = new Personaje();
- printf("Personaje: %x\n", personaje);
- while(fscanf(archivo,"%s %f %f %f %s\n",&personaje->id,&personaje->xi,&personaje->xd,&personaje->yd,&personaje->tipo) == 5){
- printf("Entra\n");
- personaje->desaparecido = false;
- personaje->yi = 0;
- personaje->salto = false;
- personaje->distancia=0;
- printf("%s %f %f %f %s\n",personaje->id,personaje->xi,personaje->xd,personaje->yd,personaje->tipo);
- printf("68; Personaje: %x\n", personaje);
- vectorPersonajes.push_back(personaje);
- personaje = new Personaje();
- printf("73;Personaje: %x\n", personaje);
- printf("Sale\n");
- }
- printf("termino el while");
- delete(personaje);
- fclose(archivo);
- }
- void Procesamiento::procesarSaltos(const char* nombreArchivo){
- printf("Comenzando a procesar los saltos");
- FILE * archivo = fopen(nombreArchivo,"r");
- float tiempoSalto;
- char id[256];
- while(fscanf(archivo,"%f %s\n", &tiempoSalto, &id)==2){
- printf("Tiempo de salto: %f n", tiempoSalto);
- for(int i=0; i < vectorPersonajes.size(); i++){
- if(strcmp(vectorPersonajes[i]->id,id)){
- vectorPersonajes[i]->salto= true;
- (vectorPersonajes[i]->vectorSaltos).push_back(tiempoSalto); //Asigno el tiempo de salto
- }
- }
- }
- fclose(archivo);
- }
- bool Procesamiento::termino(){
- //Busco el personaje con tipo P que este mas a la izquierda
- //Busco el personaje con tipo E que este mas a la derecha
- //Si el personaje con tipo P que este mas a la izquierda, esta a la derecha del personaje con tipo E termino.
- float eder;
- float pIzq;
- //inicializo las variables
- for(int i=0; i < vectorPersonajes.size(); i++){
- if(vectorPersonajes[i]->tipo[0] == 'E'){
- eder = vectorPersonajes[i]->xd;
- break;
- }
- }
- for(int i=0; i < vectorPersonajes.size(); i++){
- if(vectorPersonajes[i]->tipo[0] =='P'){
- pIzq = vectorPersonajes[i]->xi;
- break;
- }
- }
- //Comienzo a comparar
- for(int i=0; i < vectorPersonajes.size(); i++){
- if(vectorPersonajes[i]->tipo[0] =='E'){
- if(vectorPersonajes[i]->xd > eder){
- eder = vectorPersonajes[i]->xd;
- }
- }
- }
- for(int i=0; i < vectorPersonajes.size(); i++){
- if(vectorPersonajes[i]->tipo[0]=='P'){
- if(vectorPersonajes[i]->xd < pIzq){
- pIzq = vectorPersonajes[i]->xi;
- }
- }
- }
- return eder < pIzq;
- }
- bool Procesamiento::hayColision(float xdAntP, float xdP, float yiP, float ydP, float xiE, float ydE){
- //Me fijo si esta saltando
- if(yiP > 0){
- if(yiP < ydE){
- if((xdAntP < xiE) && (xdP >= xiE)){
- return true;
- }
- }
- }
- else{
- if((xdAntP < xiE) && (xdP >= xiE)){
- return true;
- }
- }
- return false;
- }
- void Procesamiento::procesar(){
- //Actualizo la posicion de todos los personajes.
- for(int i=0; i< vectorPersonajes.size(); i++){
- vectorPersonajes[i]->actualizarPosicion();
- }
- //Por cada personaje busco colision con cada enemigo.
- for(int i=0; i < vectorPersonajes.size(); i++){
- if(((vectorPersonajes[i]->tipo)[0] == 'P') && !(vectorPersonajes[i]->desaparecido)){
- for(int j=0; i < vectorPersonajes.size(); j++){
- if(vectorPersonajes[i]->tipo[0] == 'P'){
- if(hayColision(vectorPersonajes[i]->xdAnt, vectorPersonajes[i]->xd,
- vectorPersonajes[i]->yi, vectorPersonajes[i]->yd, vectorPersonajes[j]->xi, vectorPersonajes[j]->yd)){
- vectorPersonajes[i]->desaparecer(); //Desaparezco solamente al personaje
- listaDesaparecidos.push_back(vectorPersonajes[i]);
- }
- }
- }
- }
- }
- }
- void Procesamiento::imprimirDesaparecidos(){
- Personaje* personaje;
- while(!listaDesaparecidos.empty()){
- personaje = listaDesaparecidos.front();
- printf("%s %f",personaje->id, personaje->distancia);
- listaDesaparecidos.pop_front();
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void Personaje::actualizarPosicion(){
- float distancia= 0.001;
- this->distancia += distancia;
- if(salto){
- for(int j = 0; j < this->vectorSaltos.size(); j++){
- if(vectorSaltos[j] == this->distancia){
- //momento de saltar
- this->yi=5;
- this->yd=this->yd+5;
- }
- else if(vectorSaltos[j]+1 == this->distancia){
- //momento de bajar
- this->yi=0;
- this->yd=this->yd-5;
- }
- }
- }
- }
- void Personaje::desaparecer(){
- this->desaparecido = true;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- int main(){
- Procesamiento procesamiento;
- procesamiento.procesarPersonajes("personajes.txt");
- procesamiento.procesarSaltos("tiempo.txt");
- while(!procesamiento.termino()){
- procesamiento.procesar();
- }
- procesamiento.imprimirDesaparecidos();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement