Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Algunas Dudas en C++ y Allegro [Urgente, Gracias de Antemano]

Estas en el tema de Algunas Dudas en C++ y Allegro [Urgente, Gracias de Antemano] en el foro de C/C++ en Foros del Web. Veran, en este codigo: Código: /*------------------------------*/ /* Intro a la programac de */ /* juegos, por Nacho Cabanes */ /* */ /* ipj05c.c */ /* ...
  #1 (permalink)  
Antiguo 16/07/2010, 20:19
 
Fecha de Ingreso: julio-2010
Mensajes: 1
Antigüedad: 13 años, 9 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!!
  #2 (permalink)  
Antiguo 17/07/2010, 10:04
 
Fecha de Ingreso: mayo-2008
Ubicación: Chile
Mensajes: 189
Antigüedad: 16 años
Puntos: 3
Respuesta: Algunas Dudas en C++ y Allegro [Urgente, Gracias de Antemano]

mira, te dare un ejemplo:
si yo pongo char palabra[20], quiere decir que creo un arreglo de 20 char, o sea si quieres hacer que tu palabra diga hola:
palabra[0] = 'h'
palabra[1] = 'o'
palabra[2] = 'l'
palabra[3] = 'a'
palabra[4] = ''

Los arreglos fon fundamentales en los videojuegos y siempre los veras por ejemplo:
Arma misarmas[10] //suponiendo que has creado una clase Arma, crea 10 armas

misarmas[0] = cuchillo
misarmas[1] = Ak47
...
misarmas[9] = granada

como lo ves si dices algo[5], va desde al algo[0] al algo[4]
  #3 (permalink)  
Antiguo 17/07/2010, 12:04
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Algunas Dudas en C++ y Allegro [Urgente, Gracias de Antemano]

Viendo que preguntas estas cosas, creeria que te estas mandando a programar en allegro sin tener idea de c o c++. Te recomendaria que leyeras algun manual de punteros por lo menos. Se te va ser muy complicado ir entendiendo los codigos.
  #4 (permalink)  
Antiguo 17/07/2010, 17:24
 
Fecha de Ingreso: julio-2010
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Algunas Dudas en C++ y Allegro [Urgente, Gracias de Antemano]

El problema que estas teniendo ahi es practicamente con declaracion de variables.
te hago un ejemplo:
cuando tu ingresas una variable tipo entero(numero) u otra cualquiera que quieras, necesitas declararla, por lo tanto cuando tu ingresas por ejemplo un nombre "victor" entonces eso viene a ser una cadena pero si ingresas por ejemplo tipo de pago 'a' o 'b' entonces eso es un caracter.
para los caracteres no haces mas que declararlos como
char tipo;
pero si es una cadena ya estamos viendo cuantos caracteres hacen cadena por lo tanto si vamos a poner solo nombre pues suponemos que tendremos una cadena no mayor de 20 (exagerando) pues entonces declaramos de esta manera.
char nombre[20]
tu nombre no puede psar de 20 digitos.
Espero poder haberte ayudado, gracias.

Etiquetas: c++
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:03.