#include <winbgim.h>
#include <stdio.h>
#include <stdlib.h>
/*int aleatorio_pantini ();
int f;
A = (rand() % 1001);
return c;
*/
char MAT[16][16] = {'A',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Z'};
int MATEST[16][16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int MARGEN_IZQ_B=10,MARGEN_SUP_B=30,TAM_B=20,MARGEN_SUP_X,N,B,BARCO;
int URX[11],ULX[11],DRX[11],DLX[11],LRX[11],LLX[11],RRX[11],RLX[11];
int URY[11],ULY[11],DRY[11],DLY[11],LRY[11],LLY[11],RRY[11],RLY[11];
int BARCOS[11] = {5,4,4,3,3,3,3,2,2,2,2};
int BARCOT[11] = {0,0,0,0,0,0,0,0,0,0,0};
char DBARCO[11];
int XX,YY,FIL,COL,SALIR=0;
/*int NUMPAR = 10;*/
char CAD[80];
int MARGEN_IZQ=250,MARGEN_SUP=100,TAM=20,FILAS = 16,COLUMNAS=16,TAMLIN=2;
void waitForLeftMouseClick();
void esperaclick()
{
clearmouseclick(WM_LBUTTONDOWN);
const int DELAY = 50;
int x, y;
while (!ismouseclick(WM_LBUTTONDOWN))
delay(DELAY);
}
/*void revisar_tablero(){
NUMPAR = 0;
for(int F=0;F<=15;F++){
for(int C=0;C<=15;C++){
if (MATEST[F][C] == 0) NUMPAR++;
}
}
}*/
void dibujar_tablero(){
int F,C;
for(F=0;F<=15;F++){
for(C=0;C<=15;C++){
if (MATEST[F][C] == 1) setfillstyle(1,RED); // aqui no tendria qu eser espacio en blanco si no cuando encuentre dos casillas iguales
else setfillstyle(1,CYAN);
bar(MARGEN_IZQ + (C * TAM),MARGEN_SUP + (F*TAM),
MARGEN_IZQ + (C * TAM) + TAM,MARGEN_SUP + (F*TAM) + TAM);
sprintf(CAD,"%c",MAT[F][C]);
settextstyle(0,0,2);
setcolor(4);
setbkcolor(CYAN);
outtextxy(MARGEN_IZQ + (C * TAM) + TAM/8, MARGEN_SUP + (F*TAM) + TAM/8,CAD);
}
}
setcolor(YELLOW);
setlinestyle(1,2,TAMLIN); // estilo,?,tamaño
for(F=0;F<=16;F++){
line(MARGEN_IZQ,MARGEN_SUP+(F * TAM),MARGEN_IZQ + (COLUMNAS * TAM),MARGEN_SUP+(F * TAM));
}
for(C=0;C<=16;C++){
line(MARGEN_IZQ+(C*TAM),MARGEN_SUP,MARGEN_IZQ+(C*TAM),MARGEN_SUP+(FILAS * TAM));
}
B = 0;
N = 2;
MARGEN_SUP_X = MARGEN_SUP_B;
while (B<11){
LLX[B] = MARGEN_IZQ_B;
LLY[B] = MARGEN_SUP_X + TAM_B;
LRX[B] = MARGEN_IZQ_B + TAM_B;
LRY[B] = MARGEN_SUP_X + (2 * TAM_B);
ULX[B] = MARGEN_IZQ_B + TAM_B;
ULY[B] = MARGEN_SUP_X;
URX[B] = MARGEN_IZQ_B + (2 * TAM_B);
URY[B] = MARGEN_SUP_X + TAM_B;
RLX[B] = MARGEN_IZQ_B + (2 * TAM_B);
RLY[B] = MARGEN_SUP_X + TAM_B;
RRX[B] = MARGEN_IZQ_B + (3 * TAM_B);
RRY[B] = MARGEN_SUP_X + (2 * TAM_B);
DLX[B] = MARGEN_IZQ_B + (TAM_B);
DLY[B] = MARGEN_SUP_X + (2 * TAM_B);
DRX[B] = MARGEN_IZQ_B + (2 * TAM_B);
DRY[B] = MARGEN_SUP_X + (3 * TAM_B);
if (BARCOT[B]==0){
setcolor(N);
setfillstyle(1,N);
}
else{
setcolor(N);
setfillstyle(2,N);
}
bar(LLX[B],LLY[B],LRX[B],LRY[B]);
bar(ULX[B],ULY[B],URX[B],URY[B]);
bar(RLX[B],RLY[B],RRX[B],RRY[B]);
bar(DLX[B],DLY[B],DRX[B],DRY[B]);
settextstyle(0,0,2);
setcolor(N);
setbkcolor(BLACK);
sprintf(CAD,"%i",BARCOS[B]);
outtextxy(LRX[B] + (TAM_B/8),URY[B] + (TAM_B /8),CAD);
/*
bar(MARGEN_IZQ_B,MARGEN_SUP_X + TAM_B,MARGEN_IZQ_B + TAM_B,MARGEN_SUP_X + (2 * TAM_B));
bar(MARGEN_IZQ_B + TAM_B,MARGEN_SUP_X,MARGEN_IZQ_B + (2 * TAM_B),MARGEN_SUP_X + TAM_B);
bar(MARGEN_IZQ_B + (2 * TAM_B),MARGEN_SUP_X + TAM_B,MARGEN_IZQ_B + (3 * TAM_B),MARGEN_SUP_X + (2 * TAM_B));
bar(MARGEN_IZQ_B + (TAM_B),MARGEN_SUP_X + (2 * TAM_B),MARGEN_IZQ_B + (2 * TAM_B),MARGEN_SUP_X + (3 * TAM_B));
settextstyle(0,0,2);
setcolor(N);
sprintf(CAD,"4");
outtextxy(MARGEN_IZQ_B + TAM_B + (TAM_B/8),MARGEN_SUP_X + TAM_B + (TAM_B /8),CAD);
*/
MARGEN_SUP_X = MARGEN_SUP_X + (4 * TAM_B);
N++;
B++;
}
setfillstyle(1,RED);
bar(300,700,400,750);
sprintf(CAD,"SALIR");
setbkcolor(RED);
setcolor(YELLOW);
outtextxy(310,720,CAD);
sprintf(CAD,"SELECCIONADO BARCO %2i DE %2i DIRECCION %c",BARCO,BARCOS[BARCO],DBARCO[BARCO]);
outtextxy(100,600,CAD);
}
void detectar_barco(){
dibujar_tablero();
sprintf(CAD,"SELECCIONE UN BARCO Y DIRECCION");
outtextxy(100,50,CAD);
waitForLeftMouseClick();
if(XX >= 300 and XX <= 400 and
YY >= 700 and YY <= 750) SALIR = 1;
else {
for(B=0;B<11;B++){
if (XX >= LLX[B] and XX <= LRX[B] and
YY >= LLY[B] and YY <= LRY[B]){
BARCO = B;
DBARCO[B] = 'L';
}
if (XX >= ULX[B] and XX <= URX[B] and
YY >= ULY[B] and YY <= URY[B]){
BARCO = B;
DBARCO[B] = 'U';
}
if (XX >= RLX[B] and XX <= RRX[B] and
YY >= RLY[B] and YY <= RRY[B]){
BARCO = B;
DBARCO[B] = 'R';
}
if (XX >= DLX[B] and XX <= DRX[B] and
YY >= DLY[B] and YY <= DRY[B]){
BARCO = B;
DBARCO[B] = 'D';
}
}
}
sprintf(CAD,"detectar barco BARCO = %i, DIRECCION = %c XX = %i YY = %i FIL = %i COL = %i",BARCO,DBARCO[BARCO],XX,YY,FIL,COL);
outtextxy(20,700,CAD);
void detectar_cuadro(){
dibujar_tablero();
sprintf(CAD,"SELECCIONE UNA POSICION PARA SITUAR EL BARCO");
outtextxy(100,50,CAD);
waitForLeftMouseClick();
if(XX >= 300 and XX <= 400 and
YY >= 700 and YY <= 750) SALIR = 1;
else {
COL = ((XX - MARGEN_IZQ) / TAM);
FIL = ((YY - MARGEN_SUP) / TAM);
sprintf(CAD,"detectar cuadroBARCO = %i, DIRECCION = %c XX = %i YY = %i FIL = %i COL = %i",BARCO,DBARCO[BARCO],XX,YY,FIL,COL);
outtextxy(20,700,CAD);
}
}
void situar_barco(){
int C,FB=FIL,CB=COL;
if ((DBARCO[BARCO]=='U' and FB - BARCOS[BARCO] + 1 >= 0)or
(DBARCO[BARCO]=='D' and FB + BARCOS[BARCO] - 1 <= 15)or
(DBARCO[BARCO]=='L' and CB - BARCOS[BARCO] + 1 >= 0)or
(DBARCO[BARCO]=='R' and CB + BARCOS[BARCO] - 1 <= 15)){
for(C=0;C<BARCOS[BARCO];C++){
MAT[FB][CB] = BARCO + 48;
switch(DBARCO[BARCO]){
case 'U': FB--;
break;
case 'D': FB++;
break;
case 'L': CB--;
break;
case 'R': CB++;
break;
}
}
BARCOT[BARCO] = 1;
BARCO = -1;
}
else{
sprintf(CAD,"SPACE NOT ENOUGH. PULSA BOTON RATON PARA CONTINUAR");
outtextxy(200,500,CAD);
esperaclick();
}
if (BARCO != -1 and BARCOT[BARCO] != 0){
sprintf(CAD,"BARCO YA SITUADO. PULSE TECLA");
outtextxy(200,600,CAD);
BARCO = -1;
esperaclick();
}
}
/*int color_cuadro(){
int V_RETURN;
if (MAT[FIL][COL] == ' ') V_RETURN = RED;// aqui no tendria qu eser espacio en blanco si no cuando encuentre dos casillas iguales
else V_RETURN = CYAN;
return V_RETURN;
}*/
int main()
{
int VALOR,TURNO = 1,FIL_ANT,COL_ANT;
initwindow(900,600);
BARCO = -1;
FIL = -1;
COL = -1;
do{
/*dibujar_tablero();
settextstyle(0,0,2);
setcolor(2);
sprintf(CAD,"Estas Jugando a hundir la Flota");
outtextxy(100,400,CAD);
sprintf(CAD,"X = %i Y = %i FIL = %i COL = %i",XX,YY,FIL,COL);
outtextxy(100,422,CAD);
sprintf(CAD,"NUMPAR = %i",NUMPAR);
outtextxy(100,440,CAD);
*/
if (BARCO == -1) detectar_barco();
if (BARCO != -1) detectar_cuadro();
if (BARCO != -1 and FIL >= 0 and COL <= 15 and BARCOT[BARCO] == 0){
situar_barco();
}
/*
if (FIL >= 0 and FIL <= 9 and
COL >= 0 and COL <=9 and
MATEST[FIL][COL] == 0){
dibujar_tablero(1);
delay(2000);
sprintf(CAD,"FILA = %i COLUMNA = %i",FIL,COL);
outtextxy(50,500,CAD);
if (TURNO == 1) {
FIL_ANT = FIL;
COL_ANT = COL;
MATEST[FIL_ANT][COL_ANT] = 1;
TURNO++;
}
else {
if (MAT[FIL][COL] == MAT[FIL_ANT] [COL_ANT]) {
MATEST[FIL][COL] = 1;
}
else{
MATEST[FIL_ANT][COL_ANT] = 0;
}
TURNO = 1;
}
//sprintf(CAD,"%c",MAT[FIL][COL]);
//settextstyle(0,0,3);
//setbkcolor(color_cuadro()); // Color fondo texto
//outtextxy(MARGEN_IZQ + (COL * TAM) + (TAM/5),MARGEN_SUP + (FIL * TAM) + TAM/5,CAD);
}
revisar_tablero();
*/
}while (!SALIR);
closegraph(); //close graphics window
return 0;
}
void waitForLeftMouseClick()
{
clearmouseclick(WM_LBUTTONDOWN);
const int DELAY = 50;
int x, y;
while (!ismouseclick(WM_LBUTTONDOWN))
delay(DELAY);
getmouseclick(WM_LBUTTONDOWN, XX, YY);
}