Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Mostrar ganar al tocar un numero.

Estas en el tema de Mostrar ganar al tocar un numero. en el foro de C/C++ en Foros del Web. Hola amigos, una pregunta como haria para que cuando toque el numero "3" salga un mensaje en pantalla Haz ganado, de ante mano gracias. @import ...
  #1 (permalink)  
Antiguo 25/02/2016, 17:13
 
Fecha de Ingreso: julio-2015
Mensajes: 15
Antigüedad: 8 años, 9 meses
Puntos: 0
Mostrar ganar al tocar un numero.

Hola amigos, una pregunta como haria para que cuando toque el numero "3" salga un mensaje en pantalla Haz ganado, de ante mano gracias.

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;
  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.         a = isdigit(filas);
  23.         scanf("%d",&filas);
  24.         }
  25.    
  26.    
  27.     while(filas > maxfilas || filas < minfilas);
  28.    
  29.     do  {
  30.         fflush(stdin);
  31.         printf("Ingrese el numero de columnas para el juego\n");
  32.         a = isdigit(columnas);
  33.         scanf("%d",&columnas); 
  34.     }
  35.     while(columnas > maxcolum || columnas < mincolum);
  36.    
  37.    
  38.        
  39.     //Cargamos la matriz
  40.     for(i = 0; i < filas; i++)  {
  41.         for(j = 0; j < columnas; j++)   {
  42.             matriz[i][j]=0;
  43.             matriz[num][num2]=8;
  44.              matriz[filas][columnas]=3;
  45.         }
  46.     }
  47.     imprimir(filas,columnas,matriz);
  48.     movimiento(filas,columnas,matriz);
  49.    
  50.  
  51.     return 0;
  52. }
  53.  
  54.     void imprimir(int filas,int columnas,int matriz[maxfilas][maxcolum])    {
  55.        
  56.         system("cls");
  57.         //int matriz[filas][columnas];
  58.         int num,num2,i,j;
  59.  
  60.         //Imprimiendo la matriz
  61.         for(i = 0; i < filas; i++)  {
  62.             printf("\n");
  63.             for(j = 0; j < columnas; j ++)  {
  64.                 if(matriz[i][j]==0) {
  65.                     printf("0",matriz[i][j]);
  66.                 }
  67.                 if(matriz[i][j]==8) {
  68.                     printf("\1",matriz[i][j]);
  69.                 }
  70.                 if(matriz[i][j]==3) {
  71.                     printf("3",matriz[i][j]);
  72.                 }
  73.             }
  74.         }
  75.  
  76.  
  77.        
  78.        
  79.     }// cierre funcion imprimir.
  80.  
  81.     void movimiento(int filas,int columnas,int matriz[maxfilas][maxcolum])  {
  82.        
  83.  
  84.     int num,num2;
  85.     char tecla;
  86.    
  87.     //int matriz[filas][columnas];
  88.     num = rand()%2+1;
  89.     num2 = rand()%2+1;
  90.     matriz[num][num2]=8;
  91.     matriz[filas-1][columnas-1]=3;
  92.            
  93.     do  {
  94.                
  95.     tecla = getch();
  96.    
  97.    
  98.  
  99.     matriz[filas][columnas]=0;
  100.     matriz[num][num2]=0;
  101.  
  102.     switch (tecla)  {
  103.        
  104.        
  105.         case 'w':   {
  106.             if (matriz[num-1][num2]==0) {
  107.                 num--;
  108.                 if(matriz[num][num2]==3){
  109.                     break;
  110.                 }
  111.             }
  112.             break;
  113.         }
  114.         case 's':   {
  115.             if (matriz[num+1][num2]==0) {
  116.                 num++;
  117.                 if(matriz[num][num2]==3){
  118.                     break;
  119.                 }
  120.             }
  121.             break;
  122.         }
  123.         case 'a':   {
  124.             if (matriz[num][num2-1]==0) {
  125.                 num2--;
  126.                 if(matriz[num][num2]==3){
  127.                     break;
  128.                 }
  129.             }
  130.             break;
  131.         }
  132.         case 'd':   {
  133.             if (matriz[num][num2+1]==0){
  134.                 num2++;
  135.                 if(matriz[num][num2]==3){
  136.                     break;
  137.                 }
  138.             }
  139.             break;
  140.         }
  141.        
  142.     }//cierre switch
  143.     system("cls");
  144.     matriz[num][num2]=8;
  145.     matriz[filas][columnas]=0;
  146.     matriz[filas][columnas]=3;
  147.  
  148.     imprimir(filas,columnas,matriz);
  149.    
  150.    
  151.     }while(tecla != 'x');
  152.    
  153.     }
  #2 (permalink)  
Antiguo 27/02/2016, 13:22
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Mostrar ganar al tocar un numero.

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.

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.

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.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #3 (permalink)  
Antiguo 27/02/2016, 15:26
 
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.     }
  #4 (permalink)  
Antiguo 27/02/2016, 15:49
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Mostrar ganar al tocar un numero.

Cita:
Iniciado por veravluis
//No estan inicializadas una y otra ves cada una tiene una diferente funcion.
Eso que dices no es cierto, no al menos en el ejemplo que nos has puesto. Como figura en el código que te he copiado junto a ese comentario haces 3 incializaciones en cada iteración del bucle:
  • Inicializas la celda correspondiente a 0
  • Inicializas la celda [num][num2], siendo num y num2 constantes en este punto, a 8
  • Inicializas la celda [filas][columnas], siendo filas y columnas constantes en este punto, a 3.

En el bucle únicamente debería estar la primera incialización.

Cita:
Iniciado por veravluis
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.
efectivamente algo como lo que dices no es válido, pero sí lo sería algo del tipo:

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

Y además el resultado sería más lógico.

Lo único que cambia en este caso es que ahora la primera y última fila y la primera y última columna han de ser muros, no como ahora.

Cita:
Iniciado por veravluis
Como puedo hacer para que no se salga del mapa?
Tienes dos opciones... o haces una función genérica que te indique si un movimiento es legal (y si no lo es no mueves el muñeco) o haces una función específica para cada movimiento (yo voto por la genérica).

En cualquier caso tendrías que comprobar que las nuevas coordenadas son válidas y que el jugador no se coloca encima de un muro.

Cita:
Iniciado por veravluis
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.
Prueba a mover la meta de sitio y dejar que el jugador juegue hasta que alcance la meta. Como el algoritmo de encontrar la meta ya lo tienes solo tienes que cambiar la meta de sitio.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #5 (permalink)  
Antiguo 27/02/2016, 16:53
 
Fecha de Ingreso: julio-2015
Mensajes: 15
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Mostrar ganar al tocar un numero.

Lo único que cambia en este caso es que ahora la primera y última fila y la primera y última columna han de ser muros, no como ahora.



Tienes dos opciones... o haces una función genérica que te indique si un movimiento es legal (y si no lo es no mueves el muñeco) o haces una función específica para cada movimiento (yo voto por la genérica).

En cualquier caso tendrías que comprobar que las nuevas coordenadas son válidas y que el jugador no se coloca encima de un muro.

Me podrias ayudar con un ejemplo para que todos los bordes sean muros? osea como haria la condicion.

Mi code en este momento.

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,num5,num6;
  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.     //Random de posiciones Filas & columnas jugador 1 == \1
  37.     num = rand()%filas-1;
  38.     num2 = rand()%columnas-1;
  39.     //Random de posiciones Filas & columnas jugador 2 == \2
  40.     num3 = rand()%filas-1;
  41.     num4 = rand()%columnas-1;
  42.     //Random de posiciones Filas & columnas Jugador 3 == \3
  43.     num5 = rand()%filas-1;
  44.     num6 = rand()%columnas-1;
  45.    
  46.     //Cargamos la matriz
  47.     for(i = 0; i < filas; i++)  {
  48.         for(j = 0; j < columnas; j++)   {
  49.             matriz[i][j]=0;
  50.             matriz[num][num2]=8;
  51.             matriz[filas][columnas]=3;
  52.             matriz[num3][num4]=1;
  53.             matriz[num5][num6]=2;
  54.         }
  55.     }
  56.     imprimir(filas,columnas,matriz);
  57.     movimiento(filas,columnas,matriz);
  58.    
  59.  
  60.     return 0;
  61. }
  62.  
  63.     void imprimir(int filas,int columnas,int matriz[maxfilas][maxcolum])    {
  64.        
  65.         system("cls");
  66.         //int matriz[filas][columnas];
  67.         int num,num2,i,j;
  68.  
  69.         //Imprimiendo la matriz
  70.         for(i = 0; i < filas; i++)  {
  71.             printf("\n");
  72.             for(j = 0; j < columnas; j ++)  {
  73.                 if(matriz[i][j]==0) {
  74.                     printf("0",matriz[i][j]);
  75.                 }
  76.                 if(matriz[i][j]==8) {
  77.                     printf("\1",matriz[i][j]);
  78.                 }
  79.                 if(matriz[i][j]==3) {
  80.                     printf("3",matriz[i][j]);
  81.                 }
  82.                 if(matriz[i][j]==1) {
  83.                     printf("\2",matriz[i][j]);
  84.                 }
  85.                 if(matriz[i][j]==2) {
  86.                     printf("\3",matriz[i][j]);
  87.                 }
  88.             }
  89.         }
  90.        
  91.     }// cierre funcion imprimir.
  92.  
  93.     void movimiento(int filas,int columnas,int matriz[maxfilas][maxcolum])  {
  94.        
  95.  
  96.     int num,num2,num3,num4,num5,num6;
  97.     char tecla;
  98.    
  99.     //int matriz[filas][columnas];
  100.     //Yo numero (1)
  101.     num = rand()%filas-1;
  102.     num2 = rand()%columnas-1;
  103.     matriz[num][num2]=8;
  104.    
  105.     //Jugador 2
  106.     num3 = rand()%filas-1;
  107.     num4 = rand()%columnas-1;
  108.     matriz[num3][num4]=1;
  109.    
  110.     //Jugador 3
  111.     num5 = rand()%filas-1;
  112.     num6 = rand()%columnas-1;
  113.     matriz[num5][num6]=2;
  114.    
  115.     //Posicion de llegada
  116.     matriz[filas-1][columnas-1]=3;
  117.            
  118.     do  {
  119.    
  120.     tecla = getch();
  121.    
  122.     matriz[filas][columnas]=0;
  123.     matriz[num][num2]=0;
  124.     matriz[num3][num4]=0;
  125.     matriz[num5][num6]=0;
  126.  
  127.     switch (tecla)  {
  128.        
  129.        
  130.         case 'w':   {
  131.             if (matriz[num-1][num2]==0) {
  132.                 num--;
  133.             }
  134.             break;
  135.         }
  136.         case 's':   {
  137.             if (matriz[num+1][num2]==0 || matriz[num+1][num2]==3 || matriz[num3+1][num4]==0 || matriz[num3+1][num4]==3 || matriz[num5+1][num6==0] || matriz[num5+1][num6]==3){
  138.                 num++,num3++,num5++;
  139.             }
  140.             break;
  141.         }
  142.         case 'a':   {
  143.             if (matriz[num][num2-1]==0) {
  144.                 num2--;
  145.             }
  146.             break;
  147.         }
  148.         case 'd':   {
  149.             if (matriz[num][num2+1]==0 || matriz[num][num2+1]==3 || matriz[num3][num4+1]==0 || matriz[num3][num4+1]==3 || matriz[num5][num6+1]==0 || matriz[num5][num6+1]==3){
  150.                 num2++,num4++,num6++;
  151.             }
  152.             break;
  153.         }
  154.        
  155.     }//cierre switch
  156.    
  157.     //Mostrar ganador al llegar al numero 3
  158.    
  159.     //Para jugador 1
  160.     if(matriz[num][num2]==matriz[filas-1][columnas-1]){
  161.         system("cls");
  162.         printf("Haz Ganado felicitaciones.");
  163.         return 0;
  164.     }
  165.     //Para jugador 2
  166.     if (matriz[num3][num4]==matriz[filas-1][columnas-1]){
  167.         system("cls");
  168.         printf("Game over.");
  169.         return 0;
  170.     }
  171.     //Para jugador 3
  172.     if (matriz[num5][num6]==matriz[filas-1][columnas-1]){
  173.         system("cls");
  174.         printf("Game over.");
  175.         return 0;
  176.     }
  177.    
  178.     //system("cls");
  179.     matriz[num][num2]=8;
  180.     matriz[filas][columnas]=0;
  181.     matriz[filas][columnas]=3;
  182.     matriz[num3][num4]=1;
  183.     matriz[num5][num6]=2;
  184.  
  185.     imprimir(filas,columnas,matriz);
  186.    
  187.    
  188.     }while(tecla != 'x');
  189.    
  190.     }
  #6 (permalink)  
Antiguo 27/02/2016, 17:01
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Mostrar ganar al tocar un numero.

Cita:
Iniciado por veravluis Ver Mensaje
Me podrias ayudar con un ejemplo para que todos los bordes sean muros? osea como haria la condicion.
Una solución muy sencilla... asigna un carácter determinado para los muros... si la celda a la que quiere acceder el usuario tiene un carácter de muro no permites el movimiento

Código C:
Ver original
  1. if( celda[nuevaPosX][nuevaPosY] == CHAR_MURO )
  2.   // Movimiento no permitido

La idea es que nuevaPosX y nuevaPosY almacenen las nuevas coordenadas a las que se pretende mover el muñeco... si las coordenadas son buenas pasarán a sustituir a las coordenadas del muñeco (num1,num2) que también deberías darles nombres un poco más concretos. En caso de ser coordenadas no válidas simplemente no se actualizan las coordenadas del muñeco y este, por tanto, no se moverá.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #7 (permalink)  
Antiguo 27/02/2016, 17:47
 
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
Una solución muy sencilla... asigna un carácter determinado para los muros... si la celda a la que quiere acceder el usuario tiene un carácter de muro no permites el movimiento

Código C:
Ver original
  1. if( celda[nuevaPosX][nuevaPosY] == CHAR_MURO )
  2.   // Movimiento no permitido

La idea es que nuevaPosX y nuevaPosY almacenen las nuevas coordenadas a las que se pretende mover el muñeco... si las coordenadas son buenas pasarán a sustituir a las coordenadas del muñeco (num1,num2) que también deberías darles nombres un poco más concretos. En caso de ser coordenadas no válidas simplemente no se actualizan las coordenadas del muñeco y este, por tanto, no se moverá.
Como podria hacer una barrera visible, mas o menos como esto.

Código C:
Ver original
  1. Ejemplo  
  2.               1111111
  3.               1000001
  4.               1000001
  5.               1000001
  6.               1000001
  7.               1000001
  8.               1111111
  #8 (permalink)  
Antiguo 27/02/2016, 18:11
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Mostrar ganar al tocar un numero.

Cita:
Iniciado por veravluis Ver Mensaje
Como podria hacer una barrera visible, mas o menos como esto.
Ya te he contado cómo puedes hacerlo.

Un ejemplo sencillo pero te toca a ti desarrollarlo.
  1. El muñeco está en (x,y).
  2. El usuario pulsa 'w', luego intenta subir hacia arriba, luego nuevaX=x-1 y nuevaY=y
  3. Si (x-1,y)==1 en la nueva posición hay un muro y no se puede pasar, por lo que no hacemos nada.
  4. Si (x-1,y)==0 el movimiento es válido. Actualizamos las coordenadas del muñeco, num1=nuevaX y num2=nuevaY, y repintamos el escenario.
  5. ...

Los muros no has de pintarlos si no quieres. Puedes filtrar con if a la hora de pintar el escenario para evitar pintar ciertos caracteres. Una cosa es la información que almacenas para el buen proceder del juego y otra es cómo presentes esa información al usuario.

En un juego MMORPG todos los jugadores están en una lista simple y llana... no hay un mapa de coordenadas virtual donde se coloca a cada jugador. Todos en una lista. Otra cosa es que luego cada uno se pinte en un sitio diferente, son cosas independientes.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #9 (permalink)  
Antiguo 28/02/2016, 06:51
 
Fecha de Ingreso: julio-2015
Mensajes: 15
Antigüedad: 8 años, 9 meses
Puntos: 0
Información Respuesta: Mostrar ganar al tocar un numero.

Cita:
Iniciado por eferion Ver Mensaje
Ya te he contado cómo puedes hacerlo.

Un ejemplo sencillo pero te toca a ti desarrollarlo.
  1. El muñeco está en (x,y).
  2. El usuario pulsa 'w', luego intenta subir hacia arriba, luego nuevaX=x-1 y nuevaY=y
  3. Si (x-1,y)==1 en la nueva posición hay un muro y no se puede pasar, por lo que no hacemos nada.
  4. Si (x-1,y)==0 el movimiento es válido. Actualizamos las coordenadas del muñeco, num1=nuevaX y num2=nuevaY, y repintamos el escenario.
  5. ...

Los muros no has de pintarlos si no quieres. Puedes filtrar con if a la hora de pintar el escenario para evitar pintar ciertos caracteres. Una cosa es la información que almacenas para el buen proceder del juego y otra es cómo presentes esa información al usuario.

En un juego MMORPG todos los jugadores están en una lista simple y llana... no hay un mapa de coordenadas virtual donde se coloca a cada jugador. Todos en una lista. Otra cosa es que luego cada uno se pinte en un sitio diferente, son cosas independientes.
La verdad muchas gracias por tu respuesta, ya tengo mas o menos idea de como poner la condicion lo que si me tiene un poco retrasado es como hacer que haya una barrea imaginaria dado a que lo parametroz de la matriz me las da el jugador.

Etiquetas: char, funcion, int, numero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:47.