Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: leosansan en 31 Mayo 2013, 09:55 am



Título: simulacion con matriz bidimensional de 10x10 II
Publicado por: leosansan en 31 Mayo 2013, 09:55 am

He tenido que crear un tema nuevo porque el autor del tema original, tan simpático él, le cambio el nombre al tema que se encuentra ahora en

http://foro.elhacker.net/programacion_cc/portafolium_set_my_name_for_the_example_yes_i_from_colombia-t390785.0.html

La verdad es que el reto era curioso, lamentablemente estaba algo indefinido, como ya comenté en otro post anterior.

Así que decidí poner yo las condiciones que faltaban:

* Rellenamos una matriz de 10x10 de manera aleatoria con números entre 1 y 1000.

* Se comienza, lo que acabará siendo un juego en modo consola, por situarnos en la casilla del número el mínimo de la matriz.

* A partir de ahí nos movemos hacia la casilla que le rodee y que contenga al mayor número, poniendo un cero en la casilla que se abandona.

* Si está rodeado de ceros el movimiento será  al máximo de los números que queden en la matriz y siempre dejando un cero en la casilla que se deja.

* Así se continúa hasta que todos los elementos sean cero.

Por ahora el movimiento lo realiza el ordenador, aunque espera un Enter para que el usuario pueda localizar la casilla. En cambio, en la próxima "entrega" el juego será más interactivo, ya que el usuario tendrá que entrar las coordenadas de la casilla a la que tiene que moverse, y en función de los intentos fallidos y el tiempo empleado se le puntuará. Y será aún con más color. Todo es cuestión de encontrar tiempo para su desarrollo. Y aún quedará el reto de controlar el ratón para mediante él seleccionar la casilla, aunque esto lleva más conocimientos de Api y/o ensamblador de los que tengo en estos momentos. Pero todo se andará.  :) y si alguien esta "curtido" en el control del ratón con las API agradecería me pasará información al respecto.

El reto en sí es hacerlo todo mediante un código simple y, lo más importante, sin usar librerías gráficas, todo en C puro y duro.

Por ahora dejo lo explicado anteriormente y para a quienes le queden dudas de cómo funciona el futuro juego, por cierto bautizado como "Matrisan", les dejo un enlace donde se ve en acción:


z-5qkKH3U9E

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <windows.h>
  5.  
  6. /***************  FUNCIONES  ***********/
  7.  
  8. int color (int n);
  9. int mover (int i_mov, int j_mov, int matriz[10][10], int pendiente);
  10. void rellenar_matriz (int i_mov, int j_mov, int matriz[10][10]);
  11. void calculo_maximo (int matriz [10][10], int* i_max,int* j_max);
  12.  
  13. /***************  MAIN  ***********/
  14.  
  15. int main()
  16. {
  17.    //system("color 70");
  18.    srand(time(NULL));
  19. int n,matriz[10][10]={0}, i=rand()%10+1, j=0,pendiente=0, x, y,minimo=10001,i_min=0,j_min=0;
  20.  
  21. /***************  CALCULO  DEL MINIMO  ***********/
  22.  
  23. do{
  24.  
  25. x=rand()%10;
  26. y=rand()%10;
  27. if(matriz[x][y]==0 ){
  28.            matriz[x][y]=i;
  29.            if (i<minimo)
  30.            {
  31.                minimo=i;
  32.                i_min=x;
  33.                j_min=y;
  34.            }
  35.        i+=rand()%18+1;
  36.        j++;
  37.        }
  38. }while (j<100);
  39.  
  40. /***************  IMPRESION CON COLOR  ***********/
  41.  
  42.    for(i=0;i<10;i++)
  43. {
  44.        putchar('\n');
  45. for(j=0;j<10;j++)
  46.        {
  47.            if (i==i_min && j==j_min)
  48.                n=228;
  49.            else
  50.                n=113;
  51.            color (n);
  52.            printf(" %d", matriz[i][j]);
  53.            color (7);
  54.            printf("\t");
  55.        }
  56. }
  57.    color (96);
  58.    printf("\n\nminimo = %d en la posicion ",minimo);
  59.    color (228);
  60.    printf(" (%d,%d) \n",i_min+1,j_min+1);
  61.    color (7);
  62.    matriz[i_min][j_min] = 0;
  63.    mover (i_min, j_min, matriz,  pendiente);
  64.    return 0;
  65. }
  66. int color (int n)
  67. {
  68.        SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );
  69. }
  70.  
  71. /***************  FUNCION COLOR  ***********/
  72.  
  73. int mover (int i_mov, int j_mov, int matriz[10][10], int pendiente)
  74. {
  75.    color (7);
  76.    int n=0,i=0,j=0,maximo=0,maximo2=0,i_max=0,j_max=0,x,y;
  77.  
  78.    if (pendiente==100)
  79.    {
  80.        color (228);
  81.        printf("\n\t\t\t\t\tACABO\t\t\t\t\t\n");
  82.        color (7);
  83.        return 1;
  84.    }
  85.  
  86.    else
  87.    {
  88.        for ( i=i_mov-1; i<=i_mov+1; i++)
  89.        {
  90.            for ( j=j_mov-1; j<=j_mov+1; j++)
  91.                {
  92.                    if ( i < 0 || j < 0 || i > 9 || j > 9)
  93.                        continue;
  94.                    else
  95.                    {
  96.                        if (matriz[i][j] > maximo )
  97.                        {
  98.                            maximo = matriz[i][j];
  99.                            i_max = i;
  100.                            j_max = j;
  101.                        }
  102.                    }
  103.                }
  104.        }
  105.   if (maximo==0)
  106.        {
  107.            for (x=0;x<10;x++)
  108.                for (y=0;y<10;y++)
  109.                {
  110.                    if (matriz[x][y]>maximo)
  111.                    {
  112.                        maximo = matriz[x][y];
  113.                        i_max = x;
  114.                        j_max = y;
  115.                    }
  116.                }
  117.        }
  118.    }
  119.    color (96);
  120.    printf("\nMaximo = %d en la posicion ",maximo);
  121.    color (228);
  122.    printf(" (%d,%d) \n",i_max+1,j_max+1);
  123.    color (7);
  124.    //puts ("color");
  125.  
  126.    pendiente++;
  127.    //rellenar_matriz ( i_mov,  j_mov,  matriz[10][10]);
  128.  
  129.    /***************  IMPRESION CON COLOR  ***********/
  130.  
  131.     for(i=0;i<10;i++)
  132. {
  133.        putchar('\n');
  134. for(j=0;j<10;j++)
  135.        {
  136.            if (i==i_max && j==j_max)
  137.                n=228;
  138.            if (i==i_mov && j==j_mov)
  139.                n=86;
  140.            else if (matriz[i][j]==0)
  141.                n=125;
  142.            else
  143.                n=113;
  144.            color (n);
  145.            printf(" %d ", matriz[i][j]);
  146.            color (7);
  147.            printf("\t");
  148.        }
  149. }
  150.    //color (113);
  151.    matriz[i_max][j_max] = 0;
  152.    system("pause");
  153.    system("cls");
  154.    mover (i_max, j_max, matriz,  pendiente);
  155. }
  156.  
  157. /***************  X  ***********/
  158.  
  159.  

Saluditos!. .... ..
(http://i1280.photobucket.com/albums/a497/leosansan/leosan1/leones%20peques/lion14peque_zps1d213b80.jpg)