Buenas tardes a todos!
Veréis creo que debo tener un lio con el uso de punteros pues el programa me da error y no sé por qué. Espero que podáis ayudarme u orientarme. Mis dudas son:
Con esta estructura:
/* Información */
typedef struct {
int direccion;
int medida;
}tInfoTram;
/* Nodo de la cola */
typedef struct {
tInfoTram infotram;
struct tTramo *seguent;
}tTramo;
/* Gusano */
typedef struct {
tTramo *CabezaCuc;
tTramo *ColaCuc;
}tCuc;
Puedo hacer:
tCuc *CreaCuc(void);
tCuc *CreaCuc(void) {
tCuc *cuc;
cuc = NULL;
return (cuc);
}
Pero no me deja hacer:
tCuc *CreaCuc(void) {
tCuc *cuc;
cuc->CabezaCuc = NULL;
cuc->ColaCuc = NULL;
return (cuc);
}
Y creo que por ese motivo la siguiente función Jugar siempre dice que inserta en gusano no null cuando en el primer tramo el gusano si es null.
typedef struct {
tTauler *Tablero;
tPila *P1, *P2;
tCuc *Cuc;
int nTiradas;
int nRondas;
}tJoc;
int main(void) {
...
tJoc Juego;
...
Juego = InicialitzarJoc(&Juego, altura, ancho);
Juego.Tablero->caselles[fila-1][columna-1] = CABEZA;
i = TableroAPantalla(Juego.Tablero);
/* Generar la pila de cartas aleatóriamente */
Juego.P1 = GenerarPilaCartes();
/* Repetir */
Repetir(&Juego);
tJuego InicialitzarJoc(tJoc *Juego, int altura, int ancho) {
Juego->Tablero = CrearTauler(altura, ancho);
Juego->P1 = IniciarPila();
Juego->P2 = IniciarPila();
[COLOR=red]Juego->Cuc = CreaCuc();[/COLOR]
Juego->nRondas = 0;
Juego->nTiradas = 0;
return *Juego;
}
int Jugar(tJoc *Juego, tCarta *carta) {
int i;
tCarta C;
tTramo *tram;
tram = CrearTramo(carta->pal, carta->num);
/* Añado el tramo al gusano */
[COLOR=red]i = AfegeixTramCuc(Juego->Cuc, tram);[/COLOR]
switch (carta->pal) {
case 1:
printf("OROS: Derecha\n");
break;
case 2:
printf("BASTOS: Izquierda\n");
break;
case 3:
printf("COPAS: Arriba\n");
break;
case 4:
printf("ESPADAS: Abajo\n");
break;
}
}
void Repetir(tJoc *Juego) {
int i;
tCarta C;
tPila pila;
/* Repetir */
while (Juego->P1->cap != NULL) {
/* Sacar una carta C de P1 */
i = Desempilar(Juego->P1, &C);
/* If C se puede jugar entonces */
If (Jugar(&Juego, &C)) {
/* Añadir C al gusano */
/* Actualizar el tablero */
/* Sumar 1 a la puntuación */
/* Else */
/* Añadir C a P2 */
/* Restar k puntos de la puntuación */
} /* Fin de If */
/* Mostrar el tablero por pantalla */
/* Si el usuario quiere, pedir otra acción */
} /* Fin del While */
}
En Repetir y Jugar hay trozos que me faltan (comentarios) pero como soy novata prefiero ir paso a paso y aprender. El caso es que al llamar a añadir tramo al gusano para jugar (AfegeixTramCuc(Juego->Cuc, tram)) me trata el primer tramo como si el gusano no fuera null. Me podéis orientar? No he puesto todo el código porque es muy grande. Espero que quede claro y no falten datos.
Muchas gracias a todos. Gracias a vosotros estoy aprendiendo mucho.