• Viernes 19 de Abril de 2024, 10:47

Autor Tema:  problema de implementacion de archivos (allegro)  (Leído 1547 veces)

aneroeancoh

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
problema de implementacion de archivos (allegro)
« en: Martes 24 de Mayo de 2011, 03:39 »
0
Hola, tengo un problema a la hora de implantar un codigo de archivo en un programa previamente hecho, el codigo es

Código: C++
  1. int main()
  2. {
  3.  char word [25];
  4.  char c;
  5.  int x;
  6.   allegro_init();          /* Inicializamos Allegro */
  7.   install_keyboard();
  8.  
  9.  ifstream fin("hangword.txt");
  10.         if(!fin) { //clrscr();
  11.         cout<<"File missing, aborting.nnYou are missing a file of name **hangword.txt**nnLocate it, then place it next to the program file.nn"; system("pause"); return 0;}
  12.         for (i=0;!fin.eof();i++)   fin.getline(word,25);
  13.         fin.close();
  14.  
  15.         do {
  16.         x=rand();
  17.         }while(x>i || x<0);
  18.  
  19.         ifstream finn("hangword.txt");
  20.         for (i=0;!finn.eof();i++)
  21.         {finn>>c; finn.getline(word,25); if (x==i) break;}
  22.         finn.close();
  23.  
  24.                            /* Intentamos entrar a modo grafico */
  25.   if (set_gfx_mode(GFX_SAFE,800,640,0,0)!=0){ //tamaño de la pantalla//
  26.     set_gfx_mode(GFX_TEXT,0,0,0,0);
  27.     allegro_message(
  28.       "Incapaz de entrar a modo graficon%sn",
  29.       allegro_error);
  30.     return 1;
  31.   }
  32.  
  33.                             /* Si todo ha ido bien: empezamos */
  34.   srand(time(0));                 /* Valores iniciales */
  35.   strcpy(palabra, word[rand()%(NUMPALABRAS+1)]);
  36.   oportunidades = MAXINTENTOS;
  37.  
  38.   strcpy(letras,"");
  39.  
  40.           /* Relleno con _ y " " lo que ve Jug. 2 */
  41.   for (i=1; i<=strlen(palabra); i++)
  42.     if (palabra[i-1]==' ' )
  43.       intento[i-1]=' ';
  44.     else
  45.       intento[i-1]='_';
  46.   intento[i]='';       /* Y aseguro que termine correctamente */
  47.  
  48.  
  49.            /* Parte repetitiva: */
  50.   do {
  51.     clear_bitmap(screen);
  52.  
  53.  
  54.     /* Dibujo lo que corresponde del "patibulo" */
  55.     if (oportunidades <=5) PrimerFallo();
  56.     if (oportunidades <=4) SegundoFallo();
  57.     if (oportunidades <=3) TercerFallo();
  58.     if (oportunidades <=2) CuartoFallo();
  59.     if (oportunidades <=1) QuintoFallo();
  60.  
  61.                            /* Digo cuantos intentos le quedan */
  62.     textprintf_ex(screen, font, 80,18, palette_color[15], -1 ,"Te quedan %d intentos", oportunidades);
  63.  
  64.  
  65.                                /* Le muestro c¢mo va */
  66.     textprintf_ex(screen, font, 80,32, palette_color[15],-1, intento, oportunidades);
  67.  
  68.                                /* Las letras intentadas */
  69.     textprintf_ex(screen, font, 20,72, palette_color[14],-1, "Letras intentadas: %s", letras);
  70.  
  71.                               /* Y le pido otra letra */
  72.     textprintf_ex(screen, font, 20,60, palette_color[14], -1,"Que letra?");
  73.  
  74.     letra = readkey()&0xff;
  75.  
  76.            /* Añado esa letra a las tecleadas*/
  77.     strcpy (ficticia,"a");  /* Usando una cadena de texto aux */
  78.     ficticia[0]= letra;
  79.     strcat (letras, ficticia);
  80.  
  81.     acertado = 0;       /* Miro a ver si ha acertado */
  82.     for (i=1; i<=strlen(palabra); i++)
  83.       if(tolower(letra)== tolower(palabra[i-1]))
  84.   {
  85.   intento[i-1]= palabra[i-1];
  86.   acertado = 1;
  87.   }
  88.  
  89.  
  90.     if (! acertado )    /* Si falló, le queda un intento menos */
  91.       oportunidades --;
  92.  
  93.   }
  94.   while ( strcmp (intento,palabra)    /* Hasta que acierte */
  95.     && (oportunidades>0));    /* o gaste sus oportunidades */
  96.  
  97.  
  98.                             /* Le felicito o le digo cual era */
  99.  
  100.   if ( strcmp (intento,palabra)==0)
  101.     textprintf_ex(screen, font, 20,100, palette_color[11],-1, "Acertaste!");
  102.   else
  103.     {
  104.     textprintf_ex(screen, font, 20,100, palette_color[11],-1, "Lo siento.  Era: %s", palabra);
  105.     QuintoFallo();
  106.     }
  107.  
  108.  
  109.   readkey();
  110.   return 0;
  111.  
  112.  }
  113.  
  114.                  /* Termino con la "macro" que me pide Allegro */
  115. END_OF_MAIN();
  116.  
  117.  

el problema en el compilador es
126 C:Dev-Cppmain.cpp invalid conversion from `char' to `const char*'  de la linea
Código: C++
  1.  strcpy(palabra, word[rand()%(NUMPALABRAS+1)]);
  2.  

creo que es un problema en la declaracion de word, pero no se como se debe arreglar.

Es solo una parte del codigo, no se si sea necesario publicarlo todo, las librerias que estoy usando son:



#include <stdio.h>      
#include <string.h>    
#include <stdlib.h>      
#include <time.h>        
#include <ctype.h>      
#include <iostream>
#include <allegro.h>
#include <fstream>

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: problema de implementacion de archivos (allegro)
« Respuesta #1 en: Miércoles 22 de Junio de 2011, 07:40 »
0
El error no tiene que ver nada con Allegro :p. Se debe a que intentas pasar como parámetro un solo caracter (char) cuando la función espera un puntero a char que indique el inicio de una cadena de caracteres, es decir, no estás pasando (intentando copiar) una cadena (palabra), sino solamente un caracter.

Explica un poco mejor qué es lo que quieres hacer con las variables word y palabra, lo que imagino es que deseas tener un diccionario de palabras en word y tomar alguna de las palabras del diccionario al azar. Si es esto, podrías utilizar dos variables de este tipo:

Código: C
  1. char diccionario[ NUMPALABRAS ][ MAXLETRAS ];
  2. char palabra[ MAXLETRAS ];
  3.  
El diccionario lo puedes llenar desde archivo con la función getline, haciendo algo como esto:
Código: C
  1.  
  2. fin.getline( diccionario[ linea ], MAXLETRAS );
  3.  
  4.  
La imaginación es el límite.
Hardware & Software | Mexchip