C/Visual C - estructura enlazada

 
Vista:
sin imagen de perfil
Val: 29
Ha aumentado su posición en 2 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

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:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 29
Ha aumentado su posición en 2 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

estructura enlazada

Publicado por Josema (17 intervenciones) el 14/05/2017 10:29:43
En el main solo llamaría a las funciones, no es necesario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

estructura enlazada

Publicado por Preguntador_Serial (1 intervención) el 15/05/2017 05:00:21
¡Porque no revisas que la direccion mandada al if de la funcion EnemigosColision sea una direccion correcta o Null?, ¡Y porque sigo sin ver un main en este programa?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gregory
Val: 73
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

estructura enlazada

Publicado por gregory (24 intervenciones) el 25/06/2017 00:13:02
Muchachos recuerden que una lista enlazada su cierre es hata que el la lista sea null
por lo tanto veo un while(aux->sig!=null)
esto recorre n-1 en vez de n que seria aux!=null
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar