Resultados 1 al 9 de 9

hundir la flota

  1. #1 hundir la flota 
    Iniciado
    Fecha de ingreso
    Feb 2005
    Mensajes
    2
    Descargas
    0
    Uploads
    0
    Hola a todos espero que alguien pueda ayudarme, no se como puedo hacer para que introduzca el usuario los barcos, esto es con un solo jugador y la funcion que carga los barcos no funciona hace cosas rarisimas. Si alguno puede explicarme como introducirlos estaria muy agradecida.

    #include <stdio.h>
    #include <stdlib.h>

    #define TAM 8

    void menu();
    void tirada(int i, int j);
    void tablero(int i, int j);
    void cargabarcos(int f, int c);


    main(){
    int opcion, salida;
    int i,j;
    int f, c;


    while(salida != 0){
    menu();

    scanf("%d",&opcion);
    switch(opcion)
    {
    case 1:
    cargabarcos(f,c);
    break;
    case 2:
    tirada(i,j);
    break;
    case 0:
    salida=0;
    break;
    default:
    printf("Opcion no valida\n");
    break;
    }
    system("pause");
    }
    }

    void menu()
    {
    printf(" HUNDIR LA FLOTA \n");
    printf("\n");
    printf("1.-Cargar el tablero con barcos.\n");
    printf("2.-Comenzar a jugar.\n");
    printf("0.-Salir.\n");
    printf("\n");
    return;
    }

    void tablero(int i, int j)
    {
    char matriz[TAM][TAM];
    for (i=0; i<TAM; i++){
    for (j=0; j<TAM; j++){
    printf (" #");
    }
    printf("\n");
    }
    return ;
    }

    void tirada(int i, int j)
    {
    printf("Introduce coordenadas\n");
    scanf("%d ,%d" ,&i,&j);
    return;
    }

    void cargabarcos(int f, int c)
    {
    char matriz1[TAM][TAM];
    int orientacion;
    int fila,columna;

    printf("Cargando barcos...\n");
    printf("Portaviones\n");
    printf("Indique orientacion:\n");
    printf("horizontal = 1 , vertical = 2\n");
    scanf("%d",&orientacion);
    printf("Introduzca coordenas:\n");
    scanf("%d,%d",&f,&c);

    for (f=0; f<TAM; f++){
    for(c=0; c<TAM; c++){
    matriz1[f][c] = '#';

    if (orientacion == 1){

    if (c>4){
    for (c=4; c<8; c++){
    matriz1[f][c] = 'x';
    }
    }else{
    for (c=4; c<0; c--){
    matriz1[f][c] = 'x';
    }
    }
    }
    if (orientacion == 2){
    if (f>4){
    for (f=4; f<8; f++){
    matriz1[f][c] = 'x';
    }
    }else{
    for (f=4; f<0; f--){
    matriz1[f][c] = 'x';
    }
    }
    }
    }
    }
    for (f=0; f<TAM; f++){
    for(c=0; c<TAM; c++){
    printf("%c" ,matriz1[f][c]);
    }
    printf("\n");
    }

    return;
    }
    Citar  
     

  2. #2  
    Moderador HH
    Fecha de ingreso
    Dec 2001
    Ubicación
    Galiza
    Mensajes
    3.129
    Descargas
    0
    Uploads
    0
    Si pudieses explicar que cosas raras te hace sería más fácil analizar el error.
    Las ideas son como las pulgas, saltan de unos a otros pero no pican a todos... (George Bernard Shaw)
    Citar  
     

  3. #3 hundir la flota 
    Iniciado
    Fecha de ingreso
    Feb 2005
    Mensajes
    2
    Descargas
    0
    Uploads
    0
    supuestamente el usuario introduce la orientacion y las coodenadas lo que me hace el un dibujo rarisimo de 8*8 en la uotimas filas me salen x y de la mitad hacia arriba signos muy distintos rarisimos si le digo orintacion vertical me sale algo asi
    # xxx
    # xxx
    # xxx
    # xxx
    # xxx
    # xxx
    # xxx
    # xxx
    y entre medias me salen cimllas simples de todo, y si le introduce horizontal hace lo mismo pero eso en horizontal
    Citar  
     

  4. #4  
    Avanzado
    Fecha de ingreso
    Nov 2002
    Ubicación
    Ciudad de México
    Mensajes
    296
    Descargas
    0
    Uploads
    0
    Yo aun no entiendo que hace tu programa, lo que si podría puntualizar en tu programa son los siguientes "for"

    for (c=4; c<0; c--)
    for (f=4; f<0; f--)

    Supongo que lo que quieres hacer ahi son cuentas regresiva 4,3,2,1, por lo que tus condiciones (f<0 y c<0) estan mal puesta, nunca vas a poder hacer eso ^_^.
    Scar_T
    Citar  
     

  5. #5  
    Moderador HH
    Fecha de ingreso
    Dec 2001
    Ubicación
    Galiza
    Mensajes
    3.129
    Descargas
    0
    Uploads
    0
    Primero, sólo carga portaviones (de 4 casillas)?

    Segundo, usas las variables sobre las que trabajas para todo, 'c' lo machacas varias veces, con lo que si entra en el bloque if, luego en el for, luego en otro for, y cuando sale ya no sabe 'dónde anda'.

    Por ejemplo:

    for (f=0; f<TAM; f++){
    for(c=0; c<TAM; c++){
    matriz1[f][c] = '#'; ---> aki haces un bucle para que TODOS los parámetros de tu matriz sean #.


    if (orientacion == 1){ ---> suponemos horizontal

    if (c>4){ ---> si en las coordenadas columna hay un 7

    for (c=4; c<8; c++){ ---> aki machacas columna por 4 y luego condicionas de 4 a 8 (7 en realidad ya que 8 no es 'extrictamente menor que 8)

    ...

    Entonces, si al principio has puesto un bucle para q sean almohadillas (#) pero en el medio de ese bucle machacas la variable 'referencia' de ese bucle, lo que pasa es que la matriz va a contener residuos de memoria, no lo que tu kieres.

    No se si me he explicado pero igual así mejor:

    j=0
    for (i=1, i<100, i++) {
    j++
    i=98
    }

    cuanto crees que valdrá j? Desde luego 100 no!!! jeje }-P

    Espero haberme explicado. Un saludo
    Las ideas son como las pulgas, saltan de unos a otros pero no pican a todos... (George Bernard Shaw)
    Citar  
     

  6. #6  
    Moderador HH
    Fecha de ingreso
    Feb 2002
    Ubicación
    México
    Mensajes
    1.156
    Descargas
    4
    Uploads
    0
    He leido tu código un poco, y no puedo encontrar "exactamente" cual es el error, sin embargo el principal error está en el diseño, la funcion cargabarcos debe, en teoría, recibir dos variables, las cuales, no tienen nngún valor cuando mandas a llamar a dicha función, es decir, declaras int f,c; y luego mandas llamar a la cuncion carcabarcos(f,c) sin haber asignado ningún valor, eso, por supuesto, sólo es un error de diseño, algo que usaste como no se debería, si las variables que usas sólo afectan a esa funcion, debes declararlas adentro de la misma, y no afuera que de nada sirve y sólo desperdicias memoria en la pila (eso no tiene demasiada importancia en tu programa, pero no está de más saberlo)

    Además, al salir de la función, todos los datos utilizados en ella, desaparecen, es decir tu "matriz1" deja de existir cuando se acaba la función cargabarcos y no ha servido de nada el haber creado tantos # y x.

    Es mejor, al meter las coordenadas, rebibir primero la f, y luego la c en diferentes scanf's, para evitar que la tecla enter quede grabada como un caracter introducido.

    Revisaré sólo esa función, a ver que puedo corregir, pero para empezar, deberías declarar a la matriz como variable global.

    Saludos
    Mientras el mundo permanezca no acabarán la fama y la gloria de México-Tenochtitlan
    Citar  
     

  7. #7  
    Moderador HH
    Fecha de ingreso
    Feb 2002
    Ubicación
    México
    Mensajes
    1.156
    Descargas
    4
    Uploads
    0
    Ahora estoy dándome cuenta de que no tienes bastante idea de programación, debes poner especial cuidado en errores tan obvios como el siguiente:

    printf("Introduzca coordenas:\n");
    scanf("%d,%d",&f,&c);

    for (f=0; f<TAM; f++){
    for(c=0; c<TAM; c++){...

    ¿Te das cuenta de lo que eso quiere decir?, le pides al usuario que introduzca los números y los guardas en las variables f y c, y en la siguiente instrucción, BORRAS EL CONTENIDO DE LAS MISMAS VARIABLES Y LAS PONES EN CERO, esto no tiene sentido, es necesario poner otras variables, digamos, "posicionx y posiciony", trata de que los nombres de tus variables sean más explícitos que f, c, así será más facil de leer el código para tí mismo tambien.
    Mientras el mundo permanezca no acabarán la fama y la gloria de México-Tenochtitlan
    Citar  
     

  8. #8  
    Moderador HH
    Fecha de ingreso
    Feb 2002
    Ubicación
    México
    Mensajes
    1.156
    Descargas
    4
    Uploads
    0
    Esto es lo que he podido hacer por ti, este codigo ya funciona, pero para que el "barco" quede en el lugar exacto tendrás que revisarlo bien y adaptarlo a tu programa, yo ya no tengo tiempo, porque puse al main en vez de cargabarcos (que es lo que deberías hacer para ir probando cada una de tus funciones antes de juntarlas todas en un mismo programa)
    saludos

    #include <stdio.h>
    #include <stdlib.h>
    #define TAM 8

    int main()
    {
    char matriz1[TAM][TAM];
    int orientacion;
    int f, c;
    int fila, columna;

    printf("Cargando barcos...\n");
    printf("Portaviones\n");
    printf("Indique orientacion:\n");
    printf("horizontal = 1 , vertical = 2\n");
    scanf("%d",&orientacion);
    printf("Introduzca coordenas:\n");
    scanf("%d",&f);
    scanf("%d",&c);

    for (fila=0; fila<TAM; fila++){
    for(columna=0; columna<TAM; columna++)
    matriz1[fila][columna] = '#';
    }

    printf("coordenadas: %d, %d\n",f,c);

    if (orientacion == 1){
    if (c>4){
    for (columna=4; columna<8; columna++){
    printf("%d,%d",f,columna);
    matriz1[f][columna] = 'x';
    }
    }
    else{
    for (columna=4; columna>0; columna--)
    matriz1[f][columna] = 'x';
    }
    }
    else{
    if (f>4){
    for (fila=4; fila<8; fila++)
    matriz1[fila][c] = 'x';
    }
    else{
    for (fila=4; fila>0; fila--)
    matriz1[fila][c] = 'x';
    }
    }

    for (fila=0; fila<TAM; fila++){
    for(columna=0; columna<TAM; columna++)
    printf("%c" ,matriz1[fila][columna]);
    printf("\n");
    }
    system("pause");
    return 0;
    }
    Mientras el mundo permanezca no acabarán la fama y la gloria de México-Tenochtitlan
    Citar  
     

  9. #9  
    Moderador HH
    Fecha de ingreso
    Dec 2001
    Ubicación
    Galiza
    Mensajes
    3.129
    Descargas
    0
    Uploads
    0
    Eso mismo que Giskard he dicho yo :-P.... MACHACAS todas las variables, usa subrutinas, llamadas con paso de parámetros por referencia, no por valor, con lo que no machacarás nada.
    Las ideas son como las pulgas, saltan de unos a otros pero no pican a todos... (George Bernard Shaw)
    Citar  
     

Temas similares

  1. Respuestas: 2
    Último mensaje: 12-09-2008, 23:42
  2. Hundir La Flota En C
    Por CRÁPULA en el foro PROGRAMACION DESKTOP
    Respuestas: 6
    Último mensaje: 16-05-2002, 14:11

Marcadores

Marcadores