elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  simulacion con matriz bidimensional de 10x10 II
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: simulacion con matriz bidimensional de 10x10 II  (Leído 2,640 veces)
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
simulacion con matriz bidimensional de 10x10 II
« 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:



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!. .... ..


« Última modificación: 31 Mayo 2013, 15:50 pm por leosansan » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines