• Jueves 14 de Noviembre de 2024, 08:14

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - angels

Páginas: [1]
1
C/C++ / Dibujar En Un Tablero
« en: Jueves 18 de Agosto de 2005, 15:05 »
Buenas a todos!

Sigo con mi práctica y la verdad es que me he quedao en blanco. No sé como debo plantear la siguiente función:

Tengo la siguiente estructura de tablero:
Código: Text
  1.  
  2.  
  3. typedef struct {
  4.            int altura;
  5.            int ancho;
  6.            tCasilla **casillas
  7. }tTablero;
  8.  
  9.  
  10.  

En el menú principal cojo las variables del usuario que me indican el tamaño del tablero y dónde quiere la cabeza del gusano. Por ejemplo:

********
**c*****
********
********

Ahora bien, ahora debe realizar la función que comprueba si puedo jugar, es decir cuando saco una carta, a partir de la cabeza mover X casillas o a la derecha, izquierda, arriba o abajo.

La verdad es que no sé por dónde empezar. ¿trabajo con árboles,...? ¿Me podéis dar una pista, por favor?

Muchísimas gracias a todos.

2
C/C++ / Error Con Los Punteros
« en: Miércoles 17 de Agosto de 2005, 13:44 »
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:
Código: Text
  1.  
  2. /* Información */
  3. typedef struct {
  4.                 int direccion;
  5.                 int medida;
  6. }tInfoTram;
  7. /* Nodo de la cola */
  8. typedef struct {
  9.                 tInfoTram infotram;
  10.                 struct tTramo *seguent;
  11. }tTramo;
  12. /* Gusano */
  13. typedef struct {
  14.                 tTramo *CabezaCuc;
  15.                 tTramo *ColaCuc;
  16. }tCuc;
  17.  
  18.  

Puedo hacer:
Código: Text
  1.  
  2. tCuc *CreaCuc(void);
  3.  
  4. tCuc *CreaCuc(void) {
  5.  
  6.      tCuc *cuc;
  7.      cuc = NULL;
  8.      return (cuc);
  9.     
  10. }
  11.  
  12.  

Pero no me deja hacer:
Código: Text
  1.  
  2. tCuc *CreaCuc(void) {
  3.  
  4.      tCuc *cuc;
  5.      cuc->CabezaCuc = NULL;
  6.      cuc->ColaCuc = NULL;
  7.      return (cuc);
  8.     
  9. }
  10.  
  11.  

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.
Código: Text
  1.  
  2. typedef struct {
  3.                 tTauler *Tablero;
  4.                 tPila *P1, *P2;
  5.                 tCuc *Cuc;
  6.                 int nTiradas;
  7.                 int nRondas;
  8. }tJoc;
  9.  
  10.  

Código: Text
  1.  
  2. int main(void) {
  3. ...
  4.  
  5. tJoc Juego;
  6. ...
  7. Juego = InicialitzarJoc(&Juego, altura, ancho);
  8.                                   
  9. Juego.Tablero->caselles[fila-1][columna-1] = CABEZA;                                      
  10. i = TableroAPantalla(Juego.Tablero);
  11.  
  12. /* Generar la pila de cartas aleatóriamente */
  13. Juego.P1 = GenerarPilaCartes();
  14.                                                                       
  15.  /* Repetir */    
  16. Repetir(&Juego);                          
  17.  
  18.  

Código: Text
  1.  
  2. tJuego InicialitzarJoc(tJoc *Juego, int altura, int ancho) {
  3.         
  4.      Juego->Tablero = CrearTauler(altura, ancho);
  5.      Juego->P1 = IniciarPila();
  6.      Juego->P2 = IniciarPila();
  7.      [COLOR=red]Juego->Cuc = CreaCuc();[/COLOR]
  8.      Juego->nRondas = 0;
  9.      Juego->nTiradas = 0;
  10.      return *Juego;
  11.  
  12. }
  13.  
  14. int Jugar(tJoc *Juego, tCarta *carta) {
  15.    
  16.    
  17.     int i;
  18.     tCarta C;
  19.     tTramo *tram;
  20.        
  21.     tram = CrearTramo(carta->pal, carta->num);
  22.     /* Añado el tramo al gusano */
  23.     [COLOR=red]i = AfegeixTramCuc(Juego->Cuc, tram);[/COLOR]
  24.    
  25.     switch (carta->pal) {
  26.    
  27.            case 1:
  28.                 printf("OROS: Derecha\n");
  29.                
  30.                 break;
  31.            case 2:
  32.                 printf("BASTOS: Izquierda\n");
  33.                 break;
  34.            case 3:
  35.                 printf("COPAS: Arriba\n");
  36.                 break;
  37.            case 4:
  38.                 printf("ESPADAS: Abajo\n");
  39.                 break;                
  40.     }
  41. }
  42.  
  43. void Repetir(tJoc *Juego) {
  44.     
  45.      int i;
  46.      tCarta C;  
  47.      tPila pila;                  
  48.     
  49.      /* Repetir */    
  50.      while (Juego->P1->cap != NULL) {
  51.           
  52.            /* Sacar una carta C de P1 */
  53.            i = Desempilar(Juego->P1, &C);
  54.                     
  55.            /* If C se puede jugar entonces */
  56.            If (Jugar(&Juego, &C)) {      
  57.                /* Añadir C al gusano */
  58.               /* Actualizar el tablero */
  59.               /* Sumar 1 a la puntuación */
  60.               /* Else */
  61.               /* Añadir C a P2 */
  62.               /* Restar k puntos de la puntuación */              
  63.            } /* Fin de If */
  64.  
  65. /* Mostrar el tablero por pantalla */
  66. /* Si el usuario quiere, pedir otra acción */
  67.    } /* Fin del While */
  68. }
  69.  
  70.  
  71.  

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.

3
C/C++ / Pila De Cartas En Orden Aleatorio
« en: Martes 9 de Agosto de 2005, 13:08 »
Buenos días a todos!!!

Abusando una vez más de vosotros, os pido un poco de ayuda. Espero que me podáis ayudar pues necesito una pista.

Veréis debo hacer una baraja de cartas española en una pila. Debe estar desordenada y sin repeticiones. He hecho esta función pero no acaba de hacer lo que debe.

void OrdenAleatorio (tPila *pila) {
     int i, p,n;
     tCarta *nou;
     tNode *aux, mou;

     srand(time(0));
     p = rand()%(MAX_PAL)+1;
     n = rand()%(MAX_NUM)+1;
     nou = CrearCarta(p,n);

     if (EsVaciaPila(pila)) {
          aux = (tNode *) malloc (sizeof(tNode));
          if (aux != NULL) {
               aux->carta = *nou;
               aux->seguent = NULL;
               pila->cap = aux;
          }
      }
      mou = *pila->cap;
      do {
           if ((aux->carta->pal == mou->carta->pal) && (aux->carta->num ==mou->carta->pal)) {
                mou = mou->seguent;
           }
      }while (mou.seguent == NULL);
i = Empilar(pila, nou);
}

Y las estructuras:
typedef struct {
     int pal;
     int num;
}tCarta;
typedef struct {
     tCarta carta;
     struct tNode *seguent;
}tNode;
typedef struct {
     tNode *cap;
}tPila


Me podéis orientar sobre por dónde continuar?

Muchísimas gracias a todos! Os lo agradezco mucho  :hola:

4
C/C++ / Error En El Puntero A Pila
« en: Sábado 6 de Agosto de 2005, 11:46 »
Hola a todos!

Es mi primer mensaje en este foro y espero que se ajuste correctamente a sus normas. Antes de nada os doy las gracias por anticipado a todos. Espero que alguien pueda darme una pista porque he probado ya un montón de cosas y la verdad no veo dónde me "cuelo".

Debo poder manejar una pila de cartas i en la función de apilarlas me da error en asignar el puntero a la cabeza de la pila al nuevo nodo. El trozo de código es:
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->
int Empilar (tPila *pila, tCarta *carta) {
    
    tNode *nuevo;
            
    if (EsVaciaPila(pila)) {  
       nuevo = (tNode *) malloc (sizeof(tNode));
       if (nuevo != NULL) {
          nuevo->carta = *carta;
          nuevo->seguent = NULL;
          pila->cap = nou;
          return 0;
       }
       else {
          printf ("Error en la assignación de memoria.\n");
          printf ("\n Finalizamos el programa.\n");
          exit(1);
       }
    }
    else {
       nuevo = (tNode *) malloc (sizeof(tNode));
       if (nuevo != NULL) {
          nuevo->carta = *carta;
          nuevo->seguent = pila->cap;
          pila->cap = nou;
          return 0;
       }
       else {
          printf ("Error en la assignación de memòria.\n");
          printf ("\n Finalizamos el programa.\n");
          exit(1);
       }    
    }
}

Las estructuras son:

typedef struct {
                int pal;
                int num;
}tCarta;

typedef struct {
                tCarta carta;
                struct tNode *seguent;
}tNode;

typedef struct {
                tNode *cap;
}tPila;
<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
Creo que el problema que cuelga el programa es esta asignación pero... Seguiré probando...

Muchas gracias por la ayuda!!!
Saludos a todos.

Páginas: [1]