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))
&