Ver Mensaje Individual
  #3 (permalink)  
Antiguo 27/02/2016, 15:26
veravluis
 
Fecha de Ingreso: julio-2015
Mensajes: 15
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Mostrar ganar al tocar un numero.

Cita:
Iniciado por eferion Ver Mensaje
Conseguir lo que pides es tan sencillo como esperar a que num,num2 marquen las coordenadas donde se encuentra el 3.

En cualquier caso revisa también lo siguiente:

Código C:
Ver original
  1. fflush(stdin);

fflush es una instrucción para usar únicamente con buffers de salida y stdin es una instrucción de entrada. No se quien te ha enseñado a usar eso pero vete aprendiendo que no es para nada una buena práctica.

Código C:
Ver original
  1. do  {
  2.         fflush(stdin);
  3.         printf("Ingrese el numero de filas que tendra el juego\n");
  4.         a = isdigit(filas);
  5.         scanf("%d",&filas);
  6.         }
  7. while(filas > maxfilas || filas < minfilas);

¿Qué se supone que hace esa instrucción a=isdigit... si aun no se ha asignado el valor a "filas"?

Por otro lado, si introduces un valor no numérico tu programa va a funcionar mal sí o sí, pruébalo.

Código C:
Ver original
  1. for(i = 0; i < filas; i++)  {
  2.         for(j = 0; j < columnas; j++)   {
  3.             matriz[i][j]=0;
  4.             matriz[num][num2]=8;
  5.              matriz[filas][columnas]=3;
  6.         }
  7.     }

No tiene sentido que inicialices las celdas [num][num2] y [filas][columnas] una y otra vez, con que lo hagas una única vez sobra.

//No estan inicializadas una y otra ves cada una tiene una diferente funcion. num & num2 es para un random, los define para los maximos & minimos, y bueno tenia entendido que no puedo comenzar con int matriz [][] por eso le puse el valor maximo.

Código C:
Ver original
  1. #define maxfilas 10
  2. #define minfilas 3
  3. #define maxcolum 10
  4. #define mincolum 3
  5.  
  6. int matriz[400][400];

Si el laberinto más grande es de 10x10... ¿por qué forzar una reserva de 400x400?

Código C:
Ver original
  1. matriz[num][num2]=8;
  2.     matriz[filas][columnas]=0;
  3.     matriz[filas][columnas]=3;

¿Por qué haces dos asignaciones seguidas a [filas][columnas]? Con dejar solo la segunda te basta.//Eso lo hice mal pero ya lo corregi.

Código C:
Ver original
  1. case 'w':   {
  2.             if (matriz[num-1][num2]==0) {
  3.                 num--;
  4.                 if(matriz[num][num2]==3){
  5.                     break;
  6.                 }
  7.             }
  8.             break;
  9.         }

¿Has probado a pulsar la 'w' cuando estás en la parte superior del mapa? el mismo problema lo tienes con el resto de movimientos.//Como puedo hacer para que no se salga del mapa?

Un saludo.
Ya lo tengo asi, Pero tenia una duda como hago para que el jugador 2 osea, se mueva despues de que yo lo haga y hasta llegar a la llegada.

Código C:
Ver original
  1. matriz[num3][num4]=2; //jugador que se debe mover solo.

Código C:
Ver original
  1. matriz[filas-1][columnas-1]=3; //Llegada, Hacia aca se deberia dirijir el segundo jugador despues de que yo haga mi movimiento pero el se debe mover solo.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6. #define maxfilas 10
  7. #define minfilas 3
  8. #define maxcolum 10
  9. #define mincolum 3
  10.  
  11. int main(){
  12.    
  13.     int filas,columnas,i ,j,a,num,num2,num3,num4;
  14.     int matriz[400][400];
  15.     srand(time(NULL));
  16.  
  17.     printf("Bienvenido.\n");
  18.    
  19.     do  {
  20.         //fflush(stdin);
  21.         printf("Ingrese el numero de filas que tendra el juego\n");
  22.         scanf("%d",&filas);
  23.         a = isdigit(filas);
  24.        
  25.     }while(filas > maxfilas || filas < minfilas);
  26.    
  27.     do  {
  28.         //fflush(stdin);
  29.         printf("Ingrese el numero de columnas para el juego\n");
  30.         scanf("%d",&columnas); 
  31.         a = isdigit(columnas);
  32.    
  33.     }while(columnas > maxcolum || columnas < mincolum);
  34.    
  35.    
  36.        
  37.     num = rand()%9+1;
  38.     num2 = rand()%9+1;
  39.    
  40.     num3 = rand()%9+1;
  41.     num4 = rand()%9+1;
  42.     //Cargamos la matriz
  43.     for(i = 0; i < filas; i++)  {
  44.         for(j = 0; j < columnas; j++)   {
  45.             matriz[i][j]=0;
  46.             matriz[num][num2]=8;
  47.             matriz[filas][columnas]=3;
  48.             matriz[num3][num4]=2;
  49.         }
  50.     }
  51.     imprimir(filas,columnas,matriz);
  52.     movimiento(filas,columnas,matriz);
  53.    
  54.  
  55.     return 0;
  56. }
  57.  
  58.     void imprimir(int filas,int columnas,int matriz[maxfilas][maxcolum])    {
  59.        
  60.         system("cls");
  61.         //int matriz[filas][columnas];
  62.         int num,num2,i,j;
  63.  
  64.         //Imprimiendo la matriz
  65.         for(i = 0; i < filas; i++)  {
  66.             printf("\n");
  67.             for(j = 0; j < columnas; j ++)  {
  68.                 if(matriz[i][j]==0) {
  69.                     printf("0",matriz[i][j]);
  70.                 }
  71.                 if(matriz[i][j]==8) {
  72.                     printf("\1",matriz[i][j]);
  73.                 }
  74.                 if(matriz[i][j]==3) {
  75.                     printf("3",matriz[i][j]);
  76.                 }
  77.                 if(matriz[i][j]==2) {
  78.                     printf("\3",matriz[i][j]);
  79.                 }
  80.             }
  81.         }
  82.        
  83.     }// cierre funcion imprimir.
  84.  
  85.     void movimiento(int filas,int columnas,int matriz[maxfilas][maxcolum])  {
  86.        
  87.  
  88.     int num,num2,num3,num4;
  89.     char tecla;
  90.    
  91.     //int matriz[filas][columnas];
  92.     //Yo numero (1)
  93.     num = rand()%filas-1;
  94.     num2 = rand()%columnas-1;
  95.     matriz[num][num2]=8;
  96.    
  97.     //Jugador (2) PC
  98.     num3 = rand()%filas;
  99.     num4 = rand()%columnas;
  100.     matriz[num3][num4]=2;
  101.    
  102.     //Posicion de llegada
  103.     matriz[filas-1][columnas-1]=3;
  104.            
  105.     do  {
  106.    
  107.                
  108.     tecla = getch();
  109.    
  110.  
  111.     matriz[filas][columnas]=0;
  112.     matriz[num][num2]=0;
  113.     matriz[num3][num4]=0;
  114.  
  115.     switch (tecla)  {
  116.        
  117.        
  118.         case 'w':   {
  119.             if (matriz[num-1][num2]==0) {
  120.                 num--;
  121.             }
  122.             break;
  123.         }
  124.         case 's':   {
  125.             if (matriz[num+1][num2]==0 || matriz[num+1][num2]==3)   {
  126.                 num++;
  127.             }
  128.             break;
  129.         }
  130.         case 'a':   {
  131.             if (matriz[num][num2-1]==0) {
  132.                 num2--;
  133.             }
  134.             break;
  135.         }
  136.         case 'd':   {
  137.             if (matriz[num][num2+1]==0 || matriz[num][num2+1]==3){
  138.                 num2++;
  139.             }
  140.             break;
  141.         }
  142.        
  143.     }//cierre switch
  144.    
  145.     //Mostrar ganador al llegar al numero 3
  146.     if(matriz[num][num2]==matriz[filas-1][columnas-1]){
  147.         printf("Haz ganado");
  148.         return 0;
  149.     }
  150.    
  151.     //system("cls");
  152.     matriz[num][num2]=8;
  153.     matriz[filas][columnas]=0;
  154.     matriz[filas][columnas]=3;
  155.     matriz[num3][num4]=2;
  156.  
  157.     imprimir(filas,columnas,matriz);
  158.    
  159.    
  160.     }while(tecla != 'x');
  161.    
  162.     }