• Domingo 15 de Diciembre de 2024, 13:29

Autor Tema:  Problema Para Finalizar Programa  (Leído 964 veces)

cazadorite

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Problema Para Finalizar Programa
« en: Domingo 3 de Febrero de 2008, 18:26 »
0
hi tengo un problemilla con un juego la cosa que quiero que salga de mi juego en cualquier parte cuando apreto esc por eso uso esta instruccion:

if(kbhit())
    {teclado=getch();
if(teclado==27){despedida();}}
la funcion despedida solo contiene exit(0); weno ejemplo empieza el juego coloco los barcos y quiero que salga en la parte donde tengo que ingresar las coordenadas para hundir los barcos de los enemigos cuando ingreso coordenada de fila con scanf abajo de eso pongo esa instruccion y con la columna igual y ahi esta el problema cuando tengo que poner nro de fila apreto esc y no sale del programa  -_-...digo la funcion exit me finaliza todo x mas que este dentro de unos while e if..

[CODE]
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#include<ctype.h>
#include <dos.h>

#define MAX_FILA 11
#define MAX_COL 15
#define MIN_FILA 10
#define MIN_COL 10

void marco (int,int,int,int);
void despedida();
void tablaComp (char [][MAX_COL], int ,int);
void tablaHuman (char [][MAX_COL], int ,int);
void presentacion (void);
void gen_v (char [][MAX_COL], int ,char, int, int);
void gen_h (char [][MAX_COL], int , char, int, int);
void pnt_mtz (char [][MAX_COL], int ,int);
void pnt_ord (char [][MAX_COL], int ,int);
char mtz_aux[MAX_FILA][MAX_COL];
void menu ();

 int cord_1,  /* Variable que toma el valor de las x */
     cord_2,  /* Variable que toma el valor de las y */
     temp,    /* Variable para cambio de valor */
     ctr_2,   /* Controlador 2 */
     ctr_3,   /* Controlador 3 */
     ctr_4,   /* Controlador 4 */
     ctr_5,   /* Controlador 5 */
     opc_2,   /* */
     control, /* Controlador 1 */
     f,       /* Contador para la reserva de memoria estatica*/
     i,       /* */
     c,       /* Contador para la reserva de memoria estatica*/
     jug=0;   /* Contador de jugadas */
     char nombre[20];                      /* Nombre del jugador*/
     char mtz_mac[MAX_FILA][MAX_COL]; /* Matriz virtual */
 int t=0;
 int teclado=0;

char opcion,     /* Distinguir casos */
     continuar,  /* Se utiliza para detectar si quieres volver a jugar */
     pres,
     rec[4];     /* Variable para mostrar el record */

int opc(int x,int *y,char *ops[],int n,int space,int barcolor,int tcolor)
 {
  int i,j=*y,op,d=1,t;

  textcolor(tcolor); //Primero ponemos el color de texto que queremos
  textbackground(0); //Las opciones no seleccionadas se imprimen con fondo negro

  for(i=0;i<n;i++)  //Se imprime el menu
   {
    gotoxy(x,j);cprintf("%s",ops[i]);
    j+=space;
   }

  j=*y;            //La variable j, contendr  la posici¢n actual de
       //la opci¢n selecionada

  while(d){
   op=(j-*y)/space;         //Calculamos la opci¢n que esta seleccionada
   textbackground(barcolor);
   gotoxy(x,j);cprintf("%s",ops[op]);
   textbackground(0);
   do{
    t=getch();
     }while(t!=72&&t!=80&&t!=13); //ahora esperamos hasta que se presione
          //la tecla abajo, arriba o enter

   switch (t) {
    case 72:           //Se ha presionado Arriba??
      gotoxy(x,j);textbackground(0);cprintf("%s",ops[op]);
      if(j==*y)
       j=*y+(n-1)*space;
      else
       j-=space;
      break;
    case 80:                      //Se ha presionado Abajo??
      gotoxy(x,j);textbackground(0);cprintf("%s",ops[op]);
      if(j==*y+(n-1)*space)
       j=*y;
      else
       j+=space;
     break;
    case 13:                //se ha presionado enter??
     d=0;
     break;
    }
       }
   op=(j-*y)/space;
   *y=j;
   return(op);
 }

void main(void)
{

 int p,x=36,y=10,menu_opcion;
 int fila;    /* Numero de filas de la matriz introducido por el usuario */
 int columna; /* Numero de columnas de la matriz introducido por el usuario */
 int vct[5]; //contador de toques
 int vct2[5];
 char mtz_jug[MAX_FILA][MAX_COL]; /* Matriz del jugador */
 char mtz_pc[MAX_FILA][MAX_COL];       /* Matriz del ordenador */
 char *opciones[]={"JUGAR","AYUDA","SALIR"};
 /* Numero de columnas de la matriz introducido por el usuario */
FILE *fp;        /* Puntero a fichero */

/* La primera vez que lo ejecutas el fichero no existe y por lo tanto te lo crea
   escribiendote sobre el 666
*/
if ( (fp=fopen("C:\\Hf.TXT", "r") )==NULL)
   {
   fp=fopen("C:\\Hf.TXT", "w+");
   fputs("666",fp);
   }
fclose(fp);
/* Lee fichero y almacena su contenido en la variable rec*/
if ( (fp=fopen("C:\\Hf.TXT", "r") )==NULL)
   printf("Error, no se puede leer el archivo indicado");
else
    fgets (rec,4,fp);
do///////////////////////////////////////////////comienza juego ////////////////////////////////////////////////////////////
{

int vct[5]={0};
int vct2[5]={0};

presentacion();
menu();
menu_opcion=opc(x,&y,opciones,3,2,4,15); //MENU RETORNA UN VALOR 1 2 3 EN RESP
clrscr();

if(menu_opcion+1==1)
{

printf("El record actual es: %s ",rec);
printf("\n Dame tu nombre (sin espacios): ");
scanf("%s",nombre);
/*Introduccion y validacion de la entrada de filas y columnas*/

do
   {
   printf("\n Dame el numero de filas (entre %d y %d): ",MIN_FILA,MAX_FILA);    
   scanf("%d", &fila);
   }while((fila>MAX_FILA) || (fila<MIN_FILA));
do
   {
   printf("\n Dame el numero de columnas (entre %d y %d): ",MIN_COL,MAX_COL);
   scanf("%d", &columna);
   }while((columna>MAX_COL) || (columna<MIN_COL));

clrscr();
printf("\n\t\t=============================");
printf("\n\t\t=>Portaviones: 6 casillas");
printf("\n\t\t=>Buque de guerra: 5 casillas");
printf("\n\t\t=>Fragata: 4 casillas");
printf("\n\t\t=>Submarino: 3 casillas");
printf("\n\t\t=>Dragaminas: 2 casillas");
printf("\n\t\t=============================");
puts("\n\n Pulse una tecla para continuar");
getch();
clrscr();
printf("\n");
printf(" Jugador:%s",nombre);
printf("\n  ");

for (int z=0; z<fila;z++)
   for (int l=0; l<columna; l++)
      mtz_aux[z][l]='A';

 tablaComp (mtz_pc,fila,columna);
 tablaHuman (mtz_jug,fila,columna);
 
/*Genera la matriz virtual*/
  for (int f=0; f<fila;f++)//// usuario utiliza matriz virtual
    for (int c=0; c<columna; c++)
       mtz_mac[f][c]=' ';

   /*i nunca pasara de 166(11*15)*/                    ///for maneja turno de los jugadores
   for (i=1;i<166;i++)                          
     {          
     ctr_4=1;
     ctr_5=1;

     /*Cuando i sea impar turno jugador,si es par turno pc*/
     if ((i % 2) ==1) ////////////////////turno usuario/////////////////////////////////////////////////////////////////////
   {
   do   //comienza a bombardear la tabla de pc        
      {
      ctr_4=2;
      ctr_2=2;
           jug++;
      do
        {
        do
      {
                /*Entrada y validacion de la casilla a bombardear*/
      pnt_ord(mtz_pc,fila,columna);// usuario ve matriz pc en blanco
      pnt_mtz(mtz_jug,fila,columna);// mi matriz con mis barquitos
                gotoxy(25,16);
                textcolor(WHITE);

                cprintf(" Jugador: %s ",nombre );
      gotoxy(25,17);
      cprintf(" Que casilla quieres bombardear?: ");
      gotoxy(25,19);
      cprintf(" Introduce la fila: ");
      scanf("%d",&cord_1);
if(kbhit())
    {teclado=getch();
if(teclado==27){despedida();}}
      cord_1--;
      gotoxy(25,21);
      cprintf(" Introduce la columna: ");
      scanf("%d",&cord_2);
if(kbhit())
    {teclado=getch();
if(teclado==27){despedida();}}
      cord_2--;
      }while ( ( (cord_2<0) || (cord_2>columna-1) )||( (cord_1<0) || (cord_1>fila-1) ) );
      }while ( (mtz_mac[cord_1][cord_2]=='X') || (mtz_mac[cord_1][cord_2]=='A') );
           /*Mira en matriz pc */
      if (mtz_pc[cord_1][cord_2]=='A') /*Caso agua*/
         {
         mtz_mac[cord_1][cord_2]='A';
   textcolor(YELLOW);
         gotoxy (25,25); cprintf ("agua");
         delay(900);
         clrscr();
        }      
     else
    {
         if(mtz_pc[cord_1][cord_2]=='P')
      {
   textcolor(YELLOW);
         gotoxy (36,23); cprintf ("Tocado");
         delay(900);
         vct[0]++;
         if(vct[0]==6)
      {
        textcolor(12);
         gotoxy(25,24);cprintf("jugador Terminator Portaviones hundido");
 delay(2000);
      }  
      }  
      if(mtz_pc[cord_1][cord_2]=='B')
      {
   textcolor(YELLOW);
         gotoxy (36,23);cprintf ("Tocado");
   delay(900);
         vct[1]++;
         if(vct[1]==5)
      {

        textcolor(12);
         gotoxy(25,24);cprintf("jugador Terminator Buque hundido");
 delay(2000);
      }  
      }
      if(mtz_pc[cord_1][cord_2]=='F')
      {
   textcolor(YELLOW);
         gotoxy (36,23);  cprintf ("Tocado");
         delay(900);
         vct[2]++;
         if(vct[2]==4)
      {
        textcolor(12);
         gotoxy(25,24);cprintf("jugador Terminator Fragata hundido");
 delay(2000);
      }  
      }
      if(mtz_pc[cord_1][cord_2]=='S')
      {
   textcolor(YELLOW);
         gotoxy (36,23);  cprintf ("Tocado");
         delay(900);
         vct[3]++;
         if(vct[3]==3)
      {
        textcolor(12);
         gotoxy(25,24);cprintf("jugador Terminator Submarino hundido");
 delay(2000);
      }  
      }
     if(mtz_pc[cord_1][cord_2]=='D')
      {
   textcolor(YELLOW);
         gotoxy (36,23);  cprintf ("Tocado");
         delay(900);
         vct[4]++;
         if(vct[4]==2)
      {
        textcolor(12);
         gotoxy(25,24);cprintf("jugador Terminator Dragaminas hundido");
      delay(2000);
     }  
     }
         mtz_pc[cord_1][cord_2]='A';
         mtz_mac[cord_1][cord_2]='X';  /*Caso tocado*/
         ctr_2=1;  /*Es 1 para poder volver a tirar*/
  clrscr();
   }
        pnt_ord(mtz_pc,fila,columna);
        pnt_mtz(mtz_jug,fila,columna);
  if(kbhit())
    {teclado=getch();
if(teclado==27){despedida();}} /////////////////////////////////////////////////////////////////// esc salir programa
        // for chekea si fue gano usuario
        for (f=0; f<fila;f++)
       {
       for (c=0; c<columna; c++)
          {
          if (mtz_pc[f][c]!='A')  /*Detecta cuando no hay mas barcos*/
             ctr_4=3;
          }
       }
      }while((ctr_2==1)&&(ctr_4==3));//condicion no se cumple  ganamos a pc

    }///cierra if///////////////////////////////////////////////////////////////////////////////////////////////////////

     /*Del mismo modo que la matriz del jugador pero haciendo tiradas aleatorias*/
     if ((i % 2) ==0)////////////////////////////////////////turno computadora//////////////////////////////////////////////
   {

   ctr_5=2;
   do               //comienza a bombardear la tabla de usuario  
     {
       clrscr();
       pnt_mtz(mtz_jug,fila,columna);
       pnt_ord(mtz_mac,fila,columna);// se muestra en blanco
       gotoxy(25,14);
       printf(" Ordenador: terminator ");
     ctr_3=2;
     do
       {
       randomize();
       cord_1=random(fila);
       cord_2=random(columna);
       }while ( (mtz_jug[cord_1][cord_2]=='X') || (mtz_jug[cord_1][cord_2]=='T') );//simbolo si toque barco al usuario u erre
     if (mtz_jug[cord_1][cord_2]=='A')
       {
       mtz_jug[cord_1][cord_2]='X';  //pifio la pc
       textcolor(YELLOW);
       gotoxy (25,25); cprintf ("agua");
       delay(900);
       }
     if ( (mtz_jug[cord_1][cord_2]!='A') && (mtz_jug[cord_1][cord_2]!='X') )
       {
         if(mtz_jug[cord_1][cord_2]=='P')
      {
         vct2[0]++;
         if(vct2[0]==6)
      {
        textcolor(12);
         gotoxy(25,24);cprintf("jugador %s te Hundieron tu Portaviones ",nombre);
delay(2000);
      }  
      }
     if(mtz_jug[cord_1][cord_2]=='B')
      {
         vct2[1]++;
         if(vct2[1]==5)
      {
        textcolor(12);
         gotoxy(25,24);cprintf("jugador %s te Hundieron tu Buque",nombre);
delay(2000);
      }  
      }
      if(mtz_jug[cord_1][cord_2]=='F')
      {
         vct2[2]++;
         if(vct2[2]==4)
      {
        textcolor(12);
         gotoxy(25,24);cprintf("jugador %s te Hundieron tu Fragata ",nombre);
delay(2000);
      }  
      }
      if(mtz_jug[cord_1][cord_2]=='S')
      {
         vct2[3]++;
         if(vct2[3]==3)
      {
        textcolor(12);
         gotoxy(25,24);cprintf("jugador %s te Hundieron tu Submarino ",nombre);
delay(2000);
      }  
      }
      if(mtz_jug[cord_1][cord_2]=='D')
      {
         vct2[4]++;
         if(vct2[4]==2)
      {
        textcolor(12);
         gotoxy(25,24);cprintf("jugador %s te Hundieron tu Dragaminas ",nombre);
delay(2000);
     }  
      }  
       mtz_jug[cord_1][cord_2]='T'; //le di a una parte del barco usuario del usuario
       textcolor(YELLOW);
       gotoxy (36,23); cprintf ("tocado");
       delay(900);
       ctr_3=1;
      
   }
       gotoxy(25,21);
       printf(" Disparo: (%d,%d)",cord_1+1,cord_2+1); //coordenadas de la pc
       gotoxy(25,23);
       delay(1800);
       pnt_mtz(mtz_jug,fila,columna); // muestra tabla usuario barcos hundios
       pnt_ord(mtz_pc,fila,columna);
       textcolor(WHITE);
       gotoxy(25,25);
       cprintf(" Pulse una tecla para continuar");
       getch();//stop
clrscr();
     }while(ctr_3==1);//////////////////////////////

     for (f=0; f<fila;f++)
         {
         for (c=0; c<columna; c++)
       {
       if ( (mtz_jug[f][c]!='A') || (mtz_jug[f][c]!='X') )//no entra gano pc
          ctr_5=3;
       }
         }
   }/////////////////////////////////////////////////////////final IF/////////////////////////////////////77

     if (ctr_4==2)  /*El jugador gana y sale del bucle*/
   i=1000;
     if (ctr_5==2)  /*El jugador pierde y sale del bucle*/
   i=1000;
     }  /////final del for/////////////////////////////////////

textcolor(WHITE);
if(ctr_4==2)
gotoxy (36,23);
   cprintf("HAS GANADO"); //winner usuario
if(ctr_5==2)
   cprintf("HAS PERDIDO"); //winner pc
getch();

fclose(fp);
/*Almacena el record si es mejor que el guardado*/
if (jug<atoi(rec))
   {
   if ( (fp=fopen("C:\\Hf.TXT", "w+") )==NULL)
      printf("Error al abrir el archivo");
   else
       fputs(itoa(jug,rec,10),fp);
}
fclose(fp);
/*Lee el fichero para mostrarlo*/
if ( (fp=fopen("C:\\Hf.TXT", "r") )==NULL)
   printf("Error, no se puede leer el archivo indicado");
else
    fgets (rec,3,fp);
fclose(fp);
printf("\n\t\t\t\tEl record actual es %s",rec);

}     // cierra if 1

if(menu_opcion+1==2)
{
clrscr();
  gotoxy(30,2);
  cprintf("Reglas Generales\n");
  gotoxy(1,4);
  cprintf("1 - El juego consiste en destruir todas las naves del enemigo\n");
        gotoxy(1,5);
  cprintf("2 - El Modo de Juego consiste en 1 Versus la maquina \n");
  gotoxy(1,6);
  cprintf("3 - El jugador posee 5 Naves \n");
  gotoxy(1,7);
  cprintf("A - 1 Porta-Aviones(6) posiciones\n");
  gotoxy(1,8);
  cprintf("B - 1 Buque(5) posiciones\n");
  gotoxy(1,9);
  cprintf("C - 1 Fragata(4) posiciones\n");
  gotoxy(1,10);
  cprintf("D - 1 Submarino(3) posiciones\n");
  gotoxy(1,11);
  cprintf("E - 1 Dragaminas(2) posiciones\n");
        gotoxy(1,15);
  cprintf("3 - Para destruirlos tienes que introducir los disparos en las coordenadas -\n");
        gotoxy(1,16);
        cprintf("- correctas\n");
  cprintf("Suerte!!!\n");
  gotoxy(1,24);
  cprintf("Presione una tecla");
  
getch();
continuar='s';
}

else
{
if(menu_opcion+1==3)
despedida();

do
   {
textcolor(WHITE);
   puts("\nDesea continuar?(S/N):");
   scanf("%c",&continuar);
   if  ((toupper(continuar)!='S') && (toupper(continuar)!='N'))
      printf("Opcion no valida,introduzca (s) o (n)");
  
}while ((toupper(continuar)!='S') && (toupper(continuar)!='N'));
}
} while (toupper(continuar)=='S');
despedida();
}//fin main

/* Función presentación */
void presentacion (void)
{
clrscr();
textcolor(7);
printf("\n   %c%c%c%c%c%c%c%c%c%c",201,205,205,205,205,205,205,205,205,205);
printf("%c%c%c%c%c%c%c%c%c%c",205,205,205,205,205,205,205,205,205,205);
printf("%c%c%c%c%c%c%c%c%c%c",205,205,205,205,205,205,205,205,205,205);
printf("%c%c%c%c%c%c%c%c%c%c",205,205,205,205,205,205,205,205,205,205);
printf("%c%c%c%c%c%c%c%c%c%c",205,205,205,205,205,205,205,205,205,205);
printf("%c%c%c%c%c%c%c%c%c%c",205,205,205,205,205,205,205,205,205,205);
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c",205,205,205,205,205,205,205,205,205,205,205,205,187);
printf("\n   %c                          Batalla Naval                                %c",186,186);
printf("\n   %c%c%c%c%c%c%c%c%c%c",200,205,205,205,205,205,205,205,205,205);
printf("%c%c%c%c%c%c%c%c%c%c",205,205,205,205,205,205,205,205,205,205);
printf("%c%c%c%c%c%c%c%c%c%c",205,205,205,205,205,205,205,205,205,205);
printf("%c%c%c%c%c%c%c%c%c%c",205,205,205,205,205,205,205,205,205,205);
printf("%c%c%c%c%c%c%c%c%c%c",205,205,205,205,205,205,205,205,205,205);
printf("%c%c%c%c%c%c%c%c%c%c",205,205,205,205,205,205,205,205,205,205);
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c",205,205,205,205,205,205,205,205,205,205,205,205,188);
printf("\n\n\n\n\n");
cprintf("                                    %c%c%c%c",219,219,219,219);
printf("\n");
cprintf("                               %c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
printf("\n");
cprintf("                  %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219);
printf("\n");
textcolor(3);
cprintf("     %c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219);
printf("\n");
cprintf("     %c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219);
printf("\n");
cprintf("     %c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219);
printf("\n");
cprintf("     %c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219);
printf("\n");
cprintf("     %c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219,219,219);
cprintf("%c%c%c%c%c%c%c%c%c%c",219,219,219,219,219,219,219,219,219,219);
textcolor(15);
printf("\n\n\n\n\n\n\n");
cprintf("                                                               Version 1.7");
printf("\n");
cprintf("Pulse una tecla para continuar");
delay(900);
getch();
}

/*Funcion de los barcos horizontales*/
void gen_h (char mtz[MAX_FILA][MAX_COL],int d, char letra,int cor_1,int cor_2)
{
int p;
for (p=1;p<d;p++)
   {
   mtz[cor_1][cor_2]=letra;
   cor_2++;
   }
}
/*Funcion de los barcos verticales*/
void gen_v (char mtz[MAX_FILA][MAX_COL],int d, char letra,int cor_1,int cor_2)
{
int p;
for (p=1;p<d;p++)
   {
   mtz[cor_1][cor_2]=letra;
   cor_1++;
   }
}

void tablaComp(char mtz_pc[MAX_FILA][MAX_COL], int fil ,int col)///////////////////////////////////////////////////////////
{
randomize();  

for (int f=0; f<fil;f++)
   for (int c=0; c<col; c++)
      mtz_pc[f][c]='A'; /*Genera la matriz del ordenador*/
clrscr();

textcolor(15);
gotoxy(10,14); cprintf("Tabla de PC");
gotoxy(1,24);
cprintf("ingrese esc ");
gotoxy(1,25);
cprintf("para salir del programa");


textcolor (15);
 for (int a=1;a<=col;a++) //nros
  {gotoxy (a*2+4+1,1); cprintf ("%d", a);} //coordenada de columna
 for (int b=1;b<=fil;b++)
  {gotoxy (4,b+2); cprintf ("%d", b);} //coordenada de fila

 for (int x=0;x<col;x++) //imprime caracter x caracter
  {for (int y=0;y<fil;y++)
{gotoxy ((x*2)+7,y+3);
  if (mtz_pc[y][x]=='A')
    {
      textbackground(1);
  cprintf("%c",mtz_pc[y][x]);
    }
      if (mtz_pc[y][x]==' ')
    {
    cprintf("%c",mtz_pc[y][x]);
    }
      if (mtz_pc[y][x]=='X')
    {
    textcolor(0);
    textbackground(4);
    cprintf("%c",mtz_pc[y][x]);
    }  
    textcolor(15);
    textbackground(0);
}}

ctr_3=2;
ctr_4=2;

do
   {
   ctr_3=2;
   ctr_4=2;
  
   cord_1=random(fil);
   cord_2=random(col);
   opc_2=random(11);//Número aleatorio entre 0 y 10: a=rand()%11

   if (cord_1>fil-6)
      ctr_3=1;
   if (cord_2>col-6)
      ctr_4=1;
   }while (ctr_3==1 && ctr_4==1);
if ((ctr_3==1) && (ctr_4==2))
   {
   for (i=1;i<7;i++)
      {
      mtz_pc[cord_1][cord_2]='P';
      cord_2++;
      }
   }
if ((ctr_3==2) && (ctr_4==1))
   {
   for (i=1;i<7;i++)
      {
      mtz_pc[cord_1][cord_2]='P';
      cord_1++;
      }
   }
if ((ctr_3==2) && (ctr_4==2))
   {
   if (opc_2>=5)
      {
      for (i=1;i<7;i++)
    {
    mtz_pc[cord_1][cord_2]='P';
    cord_2++;
    }
      }
   if (opc_2<5)
      {
      for (i=1;i<7;i++)
    {
    mtz_pc[cord_1][cord_2]='P';
    cord_1++;
    }
      }
   }
do
   {
   ctr_2=1;
   do
      {
      ctr_3=2;
      ctr_4=2;
    
    cord_1=random(fil);
    cord_2=random(col);
    opc_2=random(11);

      if (cord_1>fil-5)
   ctr_3=1;
      if (cord_2>col-5)
   ctr_4=1;
      }while( (mtz_pc[cord_1][cord_2]!='A') || (ctr_3==1 && ctr_4==1) );
      if ((ctr_3==1) && (ctr_4==2))
   {
   temp=cord_2;
    for (i=1;i<6;i++)
       {
       if (mtz_pc[cord_1][temp] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<6;i++)
          {
          mtz_pc[cord_1][cord_2]='B';
          cord_2++;
          }
       }
    }
      if ((ctr_3==2) && (ctr_4==1))
   {
   temp=cord_1;
    for (i=1;i<6;i++)
       {
       if (mtz_pc[temp][cord_2] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<6;i++)
          {
          mtz_pc[cord_1][cord_2]='B';
          cord_1++;
          }
       }
   }
      if ((ctr_3==2) && (ctr_4==2))
   {
   if (opc_2<=5)
      {
      temp=cord_2;
    for (i=1;i<6;i++)
       {
       if (mtz_pc[cord_1][temp] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<6;i++)
          {
          mtz_pc[cord_1][cord_2]='B';
          cord_2++;
          }
       }
    }
      if (opc_2>5)
    {
    temp=cord_1;
    for (i=1;i<6;i++)
       {
       if (mtz_pc[temp][cord_2] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<6;i++)
          {
          mtz_pc[cord_1][cord_2]='B';
          cord_1++;
          }
       }
    }
      }
   }while (ctr_2==0);
do
   {
   ctr_2=1;
   do
      {
      ctr_3=2;
      ctr_4=2;
    
    cord_1=random(fil);
    cord_2=random(col);
    opc_2=random(11);

      if (cord_1>fil-4)
   ctr_3=1;
      if (cord_2>col-4)
   ctr_4=1;
      }while( (mtz_pc[cord_1][cord_2]!='A') || (ctr_3==1 && ctr_4==1) );
      if ((ctr_3==1) && (ctr_4==2))
   {
   temp=cord_2;
    for (i=1;i<5;i++)
       {
       if (mtz_pc[cord_1][temp] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<5;i++)
          {
          mtz_pc[cord_1][cord_2]='F';
          cord_2++;
          }
       }
    }
      if ((ctr_3==2) && (ctr_4==1))
   {
   temp=cord_1;
    for (i=1;i<5;i++)
       {
       if (mtz_pc[temp][cord_2] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<5;i++)
          {
          mtz_pc[cord_1][cord_2]='F';
          cord_1++;
          }
       }
   }
      if ((ctr_3==2) && (ctr_4==2))
   {
   if (opc_2<=5)
      {
      temp=cord_2;
    for (i=1;i<5;i++)
       {
       if (mtz_pc[cord_1][temp] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<5;i++)
          {
          mtz_pc[cord_1][cord_2]='F';
          cord_2++;
          }
       }
    }
      if (opc_2>5)
    {
    temp=cord_1;
    for (i=1;i<5;i++)
       {
       if (mtz_pc[temp][cord_2] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<5;i++)
          {
          mtz_pc[cord_1][cord_2]='F';
          cord_1++;
          }
       }
    }
      }
   }while (ctr_2==0);
do
   {
   ctr_2=1;
   do
      {
      ctr_3=2;
      ctr_4=2;

    cord_1=random(fil);
    cord_2=random(col);
    opc_2=random(11);

      if (cord_1>fil-3)
   ctr_3=1;
      if (cord_2>col-3)
   ctr_4=1;
      }while( (mtz_pc[cord_1][cord_2]!='A') || (ctr_3==1 && ctr_4==1) );
      if ((ctr_3==1) && (ctr_4==2))
   {
   temp=cord_2;
    for (i=1;i<4;i++)
       {
       if (mtz_pc[cord_1][temp] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<4;i++)
          {
          mtz_pc[cord_1][cord_2]='S';
          cord_2++;
          }
       }
    }
      if ((ctr_3==2) && (ctr_4==1))
   {
   temp=cord_1;
    for (i=1;i<4;i++)
       {
       if (mtz_pc[temp][cord_2] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<4;i++)
          {
          mtz_pc[cord_1][cord_2]='S';
          cord_1++;
          }
       }
   }
      if ((ctr_3==2) && (ctr_4==2))
   {
   if (opc_2<=5)
      {
      temp=cord_2;
    for (i=1;i<4;i++)
       {
       if (mtz_pc[cord_1][temp] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<4;i++)
          {
          mtz_pc[cord_1][cord_2]='S';
          cord_2++;
          }
       }
    }
      if (opc_2>5)
    {
    temp=cord_1;
    for (i=1;i<4;i++)
       {
       if (mtz_pc[temp][cord_2] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<4;i++)
          {
          mtz_pc[cord_1][cord_2]='S';
          cord_1++;
          }
       }
    }
      }
   }while (ctr_2==0);
do
   {
   ctr_2=1;
   do
      {
      ctr_3=2;
      ctr_4=2;
 
    cord_1=random(fil);
    cord_2=random(col);
    opc_2=random(11);

      if (cord_1>fil-2)
   ctr_3=1;
      if (cord_2>col-2)
   ctr_4=1;
      }while( (mtz_pc[cord_1][cord_2]!='A') || (ctr_3==1 && ctr_4==1) );
      if ((ctr_3==1) && (ctr_4==2))
   {
   temp=cord_2;
    for (i=1;i<3;i++)
       {
       if (mtz_pc[cord_1][temp] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<3;i++)
          {
          mtz_pc[cord_1][cord_2]='D';
          cord_2++;
          }
       }
    }
      if ((ctr_3==2) && (ctr_4==1))
   {
   temp=cord_1;
    for (i=1;i<3;i++)
       {
       if (mtz_pc[temp][cord_2] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<3;i++)
          {
          mtz_pc[cord_1][cord_2]='D';
          cord_1++;
          }
       }
   }
      if ((ctr_3==2) && (ctr_4==2))
   {
   if (opc_2<=5)
      {
      temp=cord_2;
    for (i=1;i<3;i++)
       {
       if (mtz_pc[cord_1][temp] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<3;i++)
          {
          mtz_pc[cord_1][cord_2]='D';
          cord_2++;
          }
       }
    }
      if (opc_2>5)
    {
    temp=cord_1;
    for (i=1;i<3;i++)
       {
       if (mtz_pc[temp][cord_2] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       for (i=1;i<3;i++)
          {
          mtz_pc[cord_1][cord_2]='D';
          cord_1++;
          }
       }
    }
      }
   }while (ctr_2==0);
}

void tablaHuman (char mtz_jug[MAX_FILA][MAX_COL], int fil ,int col)////////////////////////////////////////////////////////
{
  for (int f=0; f<fil;f++)
   for (int c=0; c<col; c++)
      mtz_jug[f][c]='A';

textcolor (15);

gotoxy(53,14); cprintf("Tabla del Jugador");

 for (int a=1;a<=col;a++) //nros
  {gotoxy (a*2+48+1,1); cprintf ("%d", a);}
 for (int b=1;b<=fil;b++)
  {gotoxy (48,b+2); cprintf ("%d", b);}

 for (int x=0;x<col;x++) //imprime la matriz en pantalla
  {for (int y=0;y<fil;y++)

{gotoxy ((x*2)+51,y+3);
  if (mtz_jug[y][x]=='A')
    {
      textbackground(1);
  cprintf("%c",mtz_jug[y][x]);
    }
   if ((mtz_jug[y][x]=='P')|| (mtz_jug[y][x]=='B')||(mtz_jug[y][x]=='F')|| (mtz_jug[y][x]=='S')|| (mtz_jug[y][x]=='D'))
    {
    textcolor(0);
    textbackground(7);  
    cprintf("%c",mtz_jug[y][x]);
    }
      if (mtz_jug[y][x]=='T')
    {
    textcolor(0);
    textbackground(4);
    cprintf("%c",mtz_jug[y][x]);
    }
      if (mtz_jug[y][x]=='X')
    {
    textcolor(15);
    textbackground(0);
    cprintf("%c",mtz_jug[y][x]);
    }  
    textcolor(15);
    textbackground(0);
}                                              
}

do
   {
  
   ctr_3=2;
   ctr_4=2;
   control=1;
   do
      {
      pnt_mtz(mtz_jug,fil,col);
      pnt_ord(mtz_aux,fil,col);
      gotoxy(25,17);
      printf("Introduzca la coordenada de");
      gotoxy(25,19);
      printf("las filas del portaviones : ");
      scanf("%d",&cord_1);
      cord_1--; /*Se decrementa el valor de cord_1 ya que la matriz empieza en 0*/
      gotoxy(25,17);
      printf("Introduzca la coordenada de");
      gotoxy(25,21);
      printf("las columnas del portaviones : ");
      scanf("%d",&cord_2);
      cord_2--;
      }while( ( (cord_1<0) || (cord_1>fil) ) || ( (cord_2<0) || (cord_2>col) ) );

      if (cord_1>fil-6) /*En este caso el barco no entra en horizontal*/
    ctr_3=1;
      if (cord_2>col-6) /*En este caso el barco no entra en vertical*/
    ctr_4=1;
   if ((ctr_3==1) && (ctr_4==2)) /*En este caso el barco solo entra en horizontal*/
      {
      gotoxy(25,23);
      printf("Solo puedes colocarlo en horizontal");
      delay(1000);
      gen_h(mtz_jug, 7, 'P', cord_1, cord_2);
      }
   if ((ctr_4==1)  && (ctr_3==2)) /*En este caso el barco solo entra en vertical*/
      {
      gotoxy(25,23);
      printf("Solo puedes colocarlo en vertical");
      delay(1000);
      gen_v(mtz_jug, 7, 'P', cord_1, cord_2);
      }
   if ((ctr_4==2) && (ctr_3==2)) /*El barco entra en ambas*/
      {
      gotoxy(25,23);
      printf("Elija la orientacion (V)/(H): ");
      scanf("%*c%c", &opcion);
      switch(opcion)
    {
    case'h':
    case'H':
       gen_h(mtz_jug, 7, 'P', cord_1, cord_2);
       break;
    case 'v':
    case 'V':
       gen_v(mtz_jug, 7, 'P', cord_1, cord_2);
       break;
    default:
       gotoxy(25,23);
       printf("Opcion incorrecta");
       control=0;
       break;
    }
      }
      if ((ctr_4==1)  && (ctr_3==1)) /*El barco no entra en al matriz y repite*/
    {
    gotoxy(25,23);
    printf(" Opcion no valida");
    delay(800);
    control=0;
    }
clrscr();
   }while (control==0);

do
   {
  
   pnt_mtz(mtz_jug,fil,col);
   pnt_ord(mtz_aux,fil,col);
  ctr_3=2;
   ctr_4=2;
   do
      {
      pnt_mtz(mtz_jug,fil,col);
      pnt_ord(mtz_aux,fil,col);
      do
    {
    pnt_mtz(mtz_jug,fil,col);
   pnt_ord(mtz_aux,fil,col);
    gotoxy(25,17);
    printf("Introduzca la coordenada de");
    gotoxy(25,19);
    printf("las filas del Buque de Guerra: ");
    scanf("%d",&cord_1);
         cord_1--;
    gotoxy(25,17);
    printf("Introduzca la coordenada de");
    gotoxy(25,21);
    printf("las columnas del Buque de Guerra: ");
    scanf("%d",&cord_2);
         cord_2--;
    }while ( ( (cord_2<0) || (cord_2>col) )||( (cord_1<0) || (cord_1>fil) ) );
         if (cord_1>fil-5)
    ctr_3=1;
      if (cord_2>col-5)
    ctr_4=1;
      }while(mtz_jug[cord_1][cord_2]!='A');/*Validación cuando introduces una casilla ocupada*/
   ctr_2=1;
   if ((ctr_3==1) && (ctr_4==2))
      {
      gotoxy(25,23);
      printf("Solo puedes colocarlo en horizontal");
      delay(1000);
      temp=cord_2;
       for (i=1;i<6;i++) /* Recorre la matriz en busca de si el barco pisara otros*/
          {
          if (mtz_jug[cord_1][temp] !='A')
        {
        ctr_2=0;
        }
      temp++;
          }
       if (ctr_2!=0) /*Si no ocurre te lo genera*/
          {
          gen_h(mtz_jug, 6, 'B', cord_1, cord_2);
          }
      }
   if ((ctr_4==1)  && (ctr_3==2))
      {
      gotoxy(25,23);
      printf("Solo puedes colocarlo en vertical");
      delay(1000);
      temp=cord_1;
    for (i=1;i<6;i++)
       {
       if (mtz_jug[temp][cord_2] !='A')
          {
          ctr_2=0;
          }
        temp++;
       }
    if (ctr_2!=0)
       {
       gen_v(mtz_jug, 6, 'B', cord_1, cord_2);
       }
   }
   if ((ctr_4==2) && (ctr_3==2))
 &

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Para Finalizar Programa
« Respuesta #1 en: Lunes 4 de Febrero de 2008, 18:41 »
0
Depuralo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.