Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/07/2010, 20:19
agussr95
 
Fecha de Ingreso: julio-2010
Mensajes: 1
Antigüedad: 14 años, 2 meses
Puntos: 0
Algunas Dudas en C++ y Allegro [Urgente, Gracias de Antemano]

Veran, en este codigo:
Código:
/*------------------------------*/ 
/*  Intro a la programac de     */ 
/*  juegos, por Nacho Cabanes   */ 
/*                              */ 
/*    ipj05c.c                  */ 
/*                              */ 
/*  Cuarto ejemplo: juego del   */ 
/*  ahorcado (versión básica)   */ 
/*                              */ 
/*  Comprobado con:             */ 
/*  - Djgpp 2.03 (gcc 3.2)      */ 
/*    y Allegro 4.02 - MsDos    */ 
/*  - MinGW 2.0.0-3 (gcc 3.2)   */ 
/*    y Allegro 4.02 - Win 98   */ 
/*  - DevC++ 4.9.9.2(gcc 3.4.2) */ 
/*    y Allegro 4.03 - Win XP   */ 
/*------------------------------*/ 
 
#include <stdio.h>      /* Rutinas estándar, como "printf" */ 
#include <string.h>     /* Manejo de cadenas */ 
#include <stdlib.h>     /* Para "rand" */ 
#include <time.h>       /* Para "time" */ 
#include <ctype.h>      /* Para "tolower" */ 
#include <allegro.h> 
 
 
#define NUMPALABRAS 10 
#define MAXINTENTOS 5 
  /* No deberíamos modificar el número máximo de intentos, 
     porque vamos a dibujar 5 "cosas" cuando se equivoque" */ 
 
char palabra[80], intento[80], letras[80]; 
           /* La palabra a adivinar, la que */ 
           /* el jugador 2 va consiguiendo y */ 
           /* las letras que se han probado */ 
 
int oportunidades;        /* El número de intentos permitido */ 
char letra;               /* Cada letra que prueba el jug. dos */ 
int i;                    /* Para mirar cada letra, con "for" */ 
int acertado;             /* Si ha acertado alguna letra */ 
char ficticia[2];         /* Aux, para añadir letra a cadena */ 
 
char mensaje[80];            /* Los letreros que mostrar en pantalla */ 
 
char datosPalabras [NUMPALABRAS][80]= 
    { 
    "Alicante","Barcelona","Guadalajara","Madrid", 
    "Toledo","Malaga","Zaragoza","Sevilla", 
    "Valencia","Valladolid" 
    }; 
 
 
 void PrimerFallo()   /* Primer fallo: */ 
 {                    /* Dibujamos la "plataforma" */ 
   line(screen,20,180,120,180, palette_color[13]); 
 } 
 
 
 void SegundoFallo()   /* Segundo fallo: */ 
 {                     /* Dibujamos el "palo vertical" */ 
   line(screen,100,180,100,125, palette_color[13]); 
 } 
 
 
 void TercerFallo()   /* Tercer fallo: */ 
 {                    /* Dibujamos el "palo superior" */ 
   line(screen,100,125,70,125, palette_color[13]); 
 } 
 
 void CuartoFallo()   /* Cuarto fallo: */ 
 {                    /* Dibujamos la "cuerda" */ 
   line(screen,70,125,70,130, palette_color[13]); 
 } 
 
 
 void QuintoFallo()   /* Quinto fallo: */ 
 { 
 int j;               /* Dibujamos la "persona" */ 
 
        /* Cabeza */ 
   circle(screen,70,138,8, palette_color[12]); 
        /* Tronco */ 
   line(screen,70,146,70,160, palette_color[12]); 
        /* Brazos */ 
   line(screen,50,150,90,150, palette_color[12]); 
        /* Piernas */ 
   line(screen,70,160,60,175, palette_color[12]); 
   line(screen,70,160,80,175, palette_color[12]); 
 } 
 
 
 
int main() 
{ 
 
  allegro_init();          /* Inicializamos Allegro */ 
  install_keyboard(); 
 
 
                           /* Intentamos entrar a modo grafico */ 
  if (set_gfx_mode(GFX_SAFE,320,200,0,0)!=0){ 
    set_gfx_mode(GFX_TEXT,0,0,0,0); 
    allegro_message( 
      "Incapaz de entrar a modo grafico\n%s\n", 
      allegro_error); 
    return 1; 
  } 
 
                            /* Si todo ha ido bien: empezamos */ 
  srand(time(0));                 /* Valores iniciales */ 
  strcpy(palabra, datosPalabras[ rand()%(NUMPALABRAS+1)]); 
  oportunidades = MAXINTENTOS; 
 
  strcpy(letras,""); 
 
          /* Relleno con _ y " " lo que ve Jug. 2 */ 
  for (i=1; i<=strlen(palabra); i++) 
    if (palabra[i-1]==' ' ) 
      intento[i-1]=' '; 
    else 
      intento[i-1]='_'; 
  intento[i]='\0';       /* Y aseguro que termine correctamente */ 
 
 
           /* Parte repetitiva: */ 
  do { 
    clear_bitmap(screen); 
 
 
    /* Dibujo lo que corresponde del "patibulo" */ 
    if (oportunidades <=4) PrimerFallo(); 
    if (oportunidades <=3) SegundoFallo(); 
    if (oportunidades <=2) TercerFallo(); 
    if (oportunidades <=1) CuartoFallo(); 
 
                           /* Digo cuantos intentos le quedan */ 
    textprintf(screen, font, 80,18, palette_color[15], 
      "Te quedan %d intentos", oportunidades); 
 
 
                               /* Le muestro c¢mo va */ 
    textprintf(screen, font, 80,32, palette_color[15], 
      intento, oportunidades); 
 
                               /* Las letras intentadas */ 
    textprintf(screen, font, 20,72, palette_color[14], 
      "Letras intentadas: %s", letras); 
 
                              /* Y le pido otra letra */ 
    textprintf(screen, font, 20,60, palette_color[14], 
      "Que letra?"); 
 
    letra = readkey()&0xff; 
 
           /* Añado esa letra a las tecleadas*/ 
    strcpy (ficticia,"a");  /* Usando una cadena de texto aux */ 
    ficticia[0]= letra; 
    strcat (letras, ficticia); 
 
    acertado = 0;       /* Miro a ver si ha acertado */ 
    for (i=1; i<=strlen(palabra); i++) 
      if(tolower(letra)== tolower(palabra[i-1])) 
  { 
  intento[i-1]= palabra[i-1]; 
  acertado = 1; 
  } 
 
 
    if (! acertado )    /* Si falló, le queda un intento menos */ 
      oportunidades --; 
 
  } 
  while ( strcmp (intento,palabra)    /* Hasta que acierte */ 
    && (oportunidades>0));    /* o gaste sus oportunidades */ 
 
 
                            /* Le felicito o le digo cual era */ 
 
  if ( strcmp (intento,palabra)==0) 
    textprintf(screen, font, 20,100, palette_color[11], 
      "Acertaste!"); 
  else 
    { 
    textprintf(screen, font, 20,100, palette_color[11], 
      "Lo siento.  Era: %s", palabra); 
    QuintoFallo(); 
    } 
 
 
  readkey(); 
  return 0; 
 
} 
 
                 /* Termino con la "macro" que me pide Allegro */ 
END_OF_MAIN();
No entiendo lo siguiente:
1. Porque en varios lugares (char palabra[80], intento[80], letras[80]; char ficticia[2]; char mensaje[80]; char datosPalabras [NUMPALABRAS][80]=...; ) Me aparece un [] con numeros entremedio? Eso no logro entenderlo, Gracias de antemano por esta respuesta!

2. En la parte de:
Cita:
/* Relleno con _ y " " lo que ve Jug. 2 */
for (i=1; i<=strlen(palabra); i++)
if (palabra[i-1]==' ' )
intento[i-1]=' ';
else
intento[i-1]='_';
intento[i]='\0'; /* Y aseguro que termine correctamente */
Que es exactamente lo que hace?.... (Tambien tengo la duda de los [i-1], que hacen allí?)

Porfavor necesito estas respuestas! Son para un trabajo escolar y la verdad que estoy perdido, Muchas gracias!!