Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.86 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <vector>
  5. #include <list>
  6.  
  7. //using namespace std;
  8.  
  9. class Personaje{
  10. public:
  11.  
  12. char id[256];
  13. float xi;
  14. float xdAnt;
  15. float xd;
  16. float yi;
  17. float yd;
  18. char tipo[2];
  19. bool salto;
  20. std::vector<float> vectorSaltos;
  21. bool desaparecido;
  22. float distancia;
  23.  
  24. void actualizarPosicion();
  25. void desaparecer();
  26. };
  27.  
  28.  
  29. class Procesamiento{
  30. public:
  31. void procesarPersonajes(const char*);
  32. void procesarSaltos(const char*);
  33. void procesar();
  34. bool termino();
  35. bool hayColision(float,float,float,float,float, float);
  36. void imprimirDesaparecidos();
  37.  
  38. std::vector<Personaje*> vectorPersonajes;
  39. std::list<Personaje*> listaDesaparecidos;
  40.  
  41. };
  42.  
  43. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  44.  
  45. //Procesamiento
  46.  
  47. void Procesamiento::procesarPersonajes(const char* nombreArchivo){
  48. printf("Comienzo a procesar personajes");
  49. FILE * archivo = fopen(nombreArchivo,"r");
  50. if(archivo == NULL){
  51. exit(1);
  52. }
  53.  
  54. Personaje* personaje = new Personaje();
  55. printf("Personaje: %x\n", personaje);
  56.  
  57. while(fscanf(archivo,"%s %f %f %f %s\n",&personaje->id,&personaje->xi,&personaje->xd,&personaje->yd,&personaje->tipo) == 5){
  58.  
  59. printf("Entra\n");
  60. personaje->desaparecido = false;
  61. personaje->yi = 0;
  62. personaje->salto = false;
  63. personaje->distancia=0;
  64.  
  65. printf("%s %f %f %f %s\n",personaje->id,personaje->xi,personaje->xd,personaje->yd,personaje->tipo);
  66.  
  67.  
  68. printf("68; Personaje: %x\n", personaje);
  69. vectorPersonajes.push_back(personaje);
  70.  
  71.  
  72. personaje = new Personaje();
  73. printf("73;Personaje: %x\n", personaje);
  74. printf("Sale\n");
  75. }
  76. printf("termino el while");
  77. delete(personaje);
  78.  
  79. fclose(archivo);
  80. }
  81.  
  82. void Procesamiento::procesarSaltos(const char* nombreArchivo){
  83.  
  84. printf("Comenzando a procesar los saltos");
  85. FILE * archivo = fopen(nombreArchivo,"r");
  86. float tiempoSalto;
  87. char id[256];
  88.  
  89. while(fscanf(archivo,"%f %s\n", &tiempoSalto, &id)==2){
  90. printf("Tiempo de salto: %f n", tiempoSalto);
  91. for(int i=0; i < vectorPersonajes.size(); i++){
  92. if(strcmp(vectorPersonajes[i]->id,id)){
  93.  
  94. vectorPersonajes[i]->salto= true;
  95. (vectorPersonajes[i]->vectorSaltos).push_back(tiempoSalto); //Asigno el tiempo de salto
  96. }
  97. }
  98. }
  99.  
  100. fclose(archivo);
  101. }
  102.  
  103. bool Procesamiento::termino(){
  104. //Busco el personaje con tipo P que este mas a la izquierda
  105. //Busco el personaje con tipo E que este mas a la derecha
  106. //Si el personaje con tipo P que este mas a la izquierda, esta a la derecha del personaje con tipo E termino.
  107. float eder;
  108. float pIzq;
  109.  
  110. //inicializo las variables
  111. for(int i=0; i < vectorPersonajes.size(); i++){
  112. if(vectorPersonajes[i]->tipo[0] == 'E'){
  113. eder = vectorPersonajes[i]->xd;
  114. break;
  115. }
  116. }
  117.  
  118. for(int i=0; i < vectorPersonajes.size(); i++){
  119. if(vectorPersonajes[i]->tipo[0] =='P'){
  120. pIzq = vectorPersonajes[i]->xi;
  121. break;
  122. }
  123. }
  124.  
  125. //Comienzo a comparar
  126. for(int i=0; i < vectorPersonajes.size(); i++){
  127. if(vectorPersonajes[i]->tipo[0] =='E'){
  128. if(vectorPersonajes[i]->xd > eder){
  129. eder = vectorPersonajes[i]->xd;
  130. }
  131. }
  132. }
  133.  
  134. for(int i=0; i < vectorPersonajes.size(); i++){
  135. if(vectorPersonajes[i]->tipo[0]=='P'){
  136. if(vectorPersonajes[i]->xd < pIzq){
  137. pIzq = vectorPersonajes[i]->xi;
  138. }
  139. }
  140. }
  141.  
  142.  
  143.  
  144.  
  145. return eder < pIzq;
  146. }
  147.  
  148. bool Procesamiento::hayColision(float xdAntP, float xdP, float yiP, float ydP, float xiE, float ydE){
  149.  
  150. //Me fijo si esta saltando
  151. if(yiP > 0){
  152. if(yiP < ydE){
  153. if((xdAntP < xiE) && (xdP >= xiE)){
  154. return true;
  155. }
  156. }
  157. }
  158. else{
  159. if((xdAntP < xiE) && (xdP >= xiE)){
  160. return true;
  161. }
  162. }
  163.  
  164. return false;
  165.  
  166. }
  167.  
  168. void Procesamiento::procesar(){
  169.  
  170. //Actualizo la posicion de todos los personajes.
  171. for(int i=0; i< vectorPersonajes.size(); i++){
  172. vectorPersonajes[i]->actualizarPosicion();
  173. }
  174.  
  175.  
  176. //Por cada personaje busco colision con cada enemigo.
  177. for(int i=0; i < vectorPersonajes.size(); i++){
  178. if(((vectorPersonajes[i]->tipo)[0] == 'P') && !(vectorPersonajes[i]->desaparecido)){
  179. for(int j=0; i < vectorPersonajes.size(); j++){
  180. if(vectorPersonajes[i]->tipo[0] == 'P'){
  181. if(hayColision(vectorPersonajes[i]->xdAnt, vectorPersonajes[i]->xd,
  182. vectorPersonajes[i]->yi, vectorPersonajes[i]->yd, vectorPersonajes[j]->xi, vectorPersonajes[j]->yd)){
  183. vectorPersonajes[i]->desaparecer(); //Desaparezco solamente al personaje
  184. listaDesaparecidos.push_back(vectorPersonajes[i]);
  185. }
  186. }
  187. }
  188. }
  189. }
  190.  
  191. }
  192.  
  193.  
  194. void Procesamiento::imprimirDesaparecidos(){
  195. Personaje* personaje;
  196. while(!listaDesaparecidos.empty()){
  197. personaje = listaDesaparecidos.front();
  198. printf("%s %f",personaje->id, personaje->distancia);
  199. listaDesaparecidos.pop_front();
  200. }
  201. }
  202.  
  203. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  204.  
  205. void Personaje::actualizarPosicion(){
  206. float distancia= 0.001;
  207.  
  208. this->distancia += distancia;
  209. if(salto){
  210. for(int j = 0; j < this->vectorSaltos.size(); j++){
  211. if(vectorSaltos[j] == this->distancia){
  212. //momento de saltar
  213. this->yi=5;
  214. this->yd=this->yd+5;
  215. }
  216. else if(vectorSaltos[j]+1 == this->distancia){
  217. //momento de bajar
  218. this->yi=0;
  219. this->yd=this->yd-5;
  220. }
  221. }
  222. }
  223. }
  224.  
  225. void Personaje::desaparecer(){
  226. this->desaparecido = true;
  227. }
  228.  
  229. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  230.  
  231. int main(){
  232.  
  233. Procesamiento procesamiento;
  234. procesamiento.procesarPersonajes("personajes.txt");
  235. procesamiento.procesarSaltos("tiempo.txt");
  236.  
  237. while(!procesamiento.termino()){
  238. procesamiento.procesar();
  239. }
  240.  
  241. procesamiento.imprimirDesaparecidos();
  242.  
  243. return 0;
  244. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement