Creando un tablero a partir de un archivo

Iniciado por Sothu, 26 Diciembre 2015, 18:12 PM

0 Miembros y 1 Visitante están viendo este tema.

Sothu

Buenas gente del foro, necesito que alguien me heche un cable con esto...
Tengo que crear un tablero que tenga la forma siguiente:

https://imagizer.imageshack.us/v2/92x135q90/905/BQ0KKl.png

Para esto dispongo de un archivo txt que contiene lo siguiente:
4 4
2 1 1 1 3 2 5 1

Donde 4 4 es el nombre de filas x columnas y los otros numeros son los que se usan para formar el tablero (1 representa una casilla en negro). Empezando por arriba a la izquierda tenemos 2 casillas vacias, luego tres negras seguidas, luego 3 vacias... etc.

Alguien me podria hechar un cable para construir este tablero? Todo tiene que hacerse leyendo desde el archivo ya que luego hay tableros mas grandes.
Muchas gracias!

MeCraniDOS

Cita de: Sothu en 26 Diciembre 2015, 18:12 PM
Alguien me podria hechar un cable para construir este tablero? Todo tiene que hacerse leyendo desde el archivo ya que luego hay tableros mas grandes.
Muchas gracias!

Que código tienes hasta el momento?

Un saludo
"La física es el sistema operativo del Universo"
     -- Steven R Garman

Sothu

void llegirTauler(ifstream &file)
{
    int files=1, columnes=1;
    int nblanques, nnegres;
    file >> files >> columnes;
    while (not file.eof())
    {
        file >> nblanques >> nnegres;
        for (int i=1; i<=nblanques; i++)
        {
            cout << "#" << endl;
        }

    }
}

0xFer

Hola, ¿Puedes volver a subir la imagen de la forma del tablero? El link creo que está caido.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

Sothu

A ver si de aqui puede verse..
http://subefotos.com/ver/?f733aded4a76debedeaf52f0002c6007o.png

Aprovecho para explicarme algo mejor:
La foto de este tablero es propia del archivo que contiene lo siguiente:
4 4
2 1 1 1 3 2 5 1
Los dos primeros numeros (4 4) marcan el nombre de filas x columnas. En este caso es un tablero 4x4. Los numeros a continuacion son las celdas vacias y las negras alternativamente. Si empezamos por arriba la izquierda tenemos 2 casillas vacias, 1 negra, 1 vacia, 1 negra, 3 vacias... Supongo que se entiende la idea. Además de esto hay un borde fijo y las letras para numerar las casillas que hacen que se amplie en 2 el grueso del tablero.

MAFUS

#5
Soy de C, no de C++, así qur no se si hay mejorrs soluciones que la que te propongo:
Cuando generes tu tabla de 4x4 juntala mediante una union a un array de 16 elementos. Llenar el array te será mucho más fácil ya que no tienes que moverte con dos índices.
Al final imprimirás la tabla con las dos dimensiones.




Realizado el código te puedo indicar que lo más fácil es rellenar un array unidimensional con los asteriscos y espacios. A la hora de representar los datos se van tomado uno a uno los caracteres del array y mediante contadores se tiene en cuenta en que fila y columna se encuentra uno para así poder poner la nomenclatura de las filas, espacios, bordes y nuevas lineas donde toca.

Sothu

Si pudieras darme algo de codigo te lo agradeceria ya que estoy bastante perdido...

MAFUS

Algo de código... Está hecho en C ya que de C++ sé casi nada  ;D

Variables:
car es char. Sirve para poner los marcadores de filas y columnas (a b c d...)
i y j son int. Me sirven para saber en que fila y columna estoy
k es un int. Me sirve para marcar si estoy en la última fila.
array es un array de caracteres. Tiene los asteriscos y espacios tal y como
    los distribuye el archivo.
lleno es una constante de caracter. Es el caracter usado para representar
    un cuadrado negro.

/* Imprimo los identificadores de columna */
    car = 'a';
    printf("   ");
    for(i = 0; i < columnas; ++i)
        putchar(car + i);
    printf("\n  ");
    /* Imprimo el borde superior */
    for(i = 0; i < columnas + 2; ++i)
        putchar(lleno);
    /* Imprimo cada una de las filas de la tabla junto
     * con los identificadores de fila donde sea necesario
     * y los bordes horizontales de la tabla */
    car = 'a';
    printf("\n%c ", car++);
    putchar(lleno);   
    for(i = j = k = 0; i < filas * columnas; ++i) {
        putchar(array[i]);
        ++j;
        if(j == columnas) {
            j = 0;
            /* Tengo en cuenta el numero de columna que estoy
             * para cambiar a la siguiente linea */
            printf("%c\n", lleno);
            k++;
            if(k != filas)
                printf("%c %c", car++, lleno);
        }
    }
    /* Imprimo el borde inferior de la tabla */
    printf("  ");
    for(i = 0; i < columnas + 2; ++i)
        putchar(lleno);
    puts("");

Sothu

Pero lo que haces es simplemente construir un tablero, lo que necessito esque el tablero sea creado segun los numeros del archivo :S

MAFUS

Los recuadros son construidos según los números del archivo. Se puede hacer desde 1x1 hasta 9x9. Solo te he puesto el código de como dibujar la tabla. El trabajo de crearla y llenarla es anterior a todo esto.