estructura enlazada
Publicado por Josema (17 intervenciones) el 11/05/2017 19:20:22
Hola, he hecho una estructura enlazada, de Enemigos a Enemigo, se trata de un enemigo con su movimiento autonomo, sus colisiones,etc. y ahora hice Enemigos que trata de enlazarlo con Enemigo y hacer que cuando el enemigo colisione, muera (desaparezca) , y vuelva a aparecer, asi unas 3 veces por ejemplo, como si tuviera 3 vidas. aqui os muestro el enemigo.c y enemigos. c , al ejecutar todo funciona correctamente pero sin que al colisionar haga lo que quiero.
Enemigo.c:
Enemigos.c:
Enemigo.c:
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
#include <stdlib.h>
#include "Enemigo.h"
struct EnemigoRep{
int h,w,x,y,vx,vy;
Imagen i;
};
Enemigo EnemigoCrea(Imagen i,int x,int y,int w,int h, int vx, int vy){
Enemigo e=malloc(sizeof(struct EnemigoRep));
e->i=i;
e->w=w;
e->h=h;
e->x=x;
e->y=y;
e->vx=vx;
e->vy=vy;
return e;
}
void EnemigoMueve(Enemigo e,int vx,int vy)
{
e->x+=e->vx;
e->y+=e->vy;
if (e->x >Pantalla_Anchura()-e->w) { e->x=Pantalla_Anchura()-e->w; e->vx*=-1; }
if (e->x<0) { e->x=0; e->vx*=-1.2; }
if (e->y >Pantalla_Altura()-e->h) { e->y=Pantalla_Altura()-e->h; e->vy*=-1; }
if (e->y<0) { e->y=0; e->vy*=-1.2; }
}
void EnemigoLibera(Enemigo e)
{
free(e);
}
void EnemigoDibuja(Enemigo e)
{
Pantalla_DibujaImagen(e->i,e->x,e->y,e->w,e->h);
}
int EnemigoGetX(Enemigo e) { return e->x; };
int EnemigoGetY(Enemigo e) { return e->y; };
int EnemigoGetW(Enemigo e) { return e->w; };
int EnemigoGetH(Enemigo e) { return e->h; };
Enemigos.c:
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
#include <stdlib.h>
#include "Enemigo.h"
#include "Enemigos.h"
#include "Colision.h"
struct EnemigosRep{
Enemigo e;
Enemigos sig;
};
Enemigos EnemigosCrea(){
Enemigos ee = malloc(sizeof(struct EnemigosRep));
ee->sig = NULL;
return ee;
}
void EnemigosInserta(Enemigos ee, Imagen i, int x, int y, int w, int h, int vx, int vy){
if (ee->sig==NULL){
Enemigos aux = malloc(sizeof(struct EnemigosRep));
aux->e = EnemigoCrea(i,x,y,w,h,vx,vy);
aux->sig = ee->sig;
ee->sig = aux;
}
}
void EnemigosDibuja(Enemigos ee){
while (ee->sig != NULL){
EnemigoDibuja(ee->sig->e);
ee=ee->sig;
}
}
void EnemigosMueve (Enemigos ee, int vx, int vy){
while (ee->sig !=NULL){
EnemigoMueve(ee->sig->e,5,5);
ee=ee->sig;
}
}
int EnemigosColision(Enemigos ee, int x, int y, int w, int h){
int c=0;
while (ee->sig != NULL){
c += Colision(EnemigoGetX(ee->sig->e), EnemigoGetY(ee->sig->e), EnemigoGetW(ee->sig->e), EnemigoGetH(ee->sig->e), x, y, w, h);
ee = ee->sig;
}
return c;
}
void EnemigosLibera(Enemigos ee)
{
while (ee->sig!=NULL){
Enemigos aux = ee->sig;
ee->sig = ee->sig->sig;
EnemigoLibera(aux->e);
free(aux);
}
free(ee);
}
Valora esta pregunta


0