Wenas... He estado buskando el kodigo del juego de los barkitos en c++, sé ke lo tengo ke tener por algun lado, lo ke pasa es ke ahora mismo pos no lo enkuentro.. Lo uniko ke te puedo dejar por el momento es una especie de hundir la flota en C... Hace muxo ke empezé ese programa, y aunke basikamente funciona, le faltan muxisimos retokes... Usa la librería graphics.h (Incluida en el Turbo C) y una libreria de manejo del raton ke adjunto.. Weno y nada más, espero ke te sirva de ayuda...
SALUD!
PD: No tiene komentarios, así ke espero ke no te kueste muxo entenderlo....
#include <stdio.h>
#include <graphics.h>
#include <stdlib.h>
#include "mouse.h"
int fila(void);
int num(int);
void menu();
void asigna(int [20][20],int [20][20],int [20][20],int [20][20],int [20][20],int);
void dibuja_tabla(int [20][20],int [20][20],int);
void marco(int,int,int,int);
void koloka_player1(int [20][20],int [20][20],int[20][20],int,int);
void koloka_player2(int [20][20],int [20][20],int[20][20],int,int);
void koloka_cpu(int [20][20],int,int);
void pinta_barko (int [20][20],int[ 20][20],int,int);
void agua (int [20][20],int [20][20],int,int);
void dibuja_tablero_cpu (int [20][20],int [20][20],int [20][20],int);
void dibuja_tablero_player1 (int [20][20],int [20][20],int [20][20],int);
void dibuja_tablero_player2 (int [20][20],int [20][20],int [20][20],int);
void dispara_player1 (int [20][20],int [20][20],int [20][20],int,int *);
void dispara_player1_2 (int [20][20],int [20][20],int [20][20],int,int *);
void dispara_cpu(int [20][20],int [20][20],int [20][20],int,int *);
void dispara_player2 (int [20][20],int [20][20],int [20][20],int,int *);
main()
{
int controlador,modo,i,j,filas,boton,numbarkos,x,y,puntos_cpu,puntos_1,puntos_2,opcion;
int tablax[20][20],tablay[20][20],player1[20][20],cpu[20][20],player2[20][20];
controlador=DETECT;
modo=0;
randomize();
initgraph(&controlador,&modo,"");
inicializar_raton();
estado_raton(&x,&y,&boton);
menu();
opcion=getch();
while (opcion!=3)
{
switch(opcion)
{
case '1':
puntos_cpu=puntos_1=0;
filas=fila();
numbarkos=num(filas);
asigna(tablax,tablay,player1,player2,cpu,filas);
dibuja_tabla(tablax,tablay,filas);
koloka_player1(tablax,tablay,player1,filas,numbarkos);
koloka_cpu(cpu,filas,numbarkos);
getche();
while (puntos_cpu!=numbarkos && puntos_1!=numbarkos)
{
dibuja_tablero_cpu(tablax,tablay,cpu,filas);
dispara_player1 (tablax,tablay,cpu,filas,&puntos_1);
if (puntos_1==numbarkos)
{
clearviewport();
outtextxy(150,150,"TU GANAS");
getche();
break;
}
dibuja_tablero_player1(tablax,tablay,player1,filas);
dispara_cpu(tablax,tablay,player1,filas,&puntos_cpu);
if(puntos_cpu==numbarkos)
{
clearviewport();
outtextxy(150,150,"CPU GANA");
getche();
break;
}
}
break;
case '2':
puntos_1=puntos_2=0;
filas=fila();
numbarkos=num(filas);
asigna(tablax,tablay,player1,player2,cpu,filas);
dibuja_tabla(tablax,tablay,filas);
koloka_player1(tablax,tablay,player1,filas,numbarkos);
dibuja_tabla(tablax,tablay,filas);
koloka_player2(tablax,tablay,player2,filas,numbarkos);
getche();
while (puntos_1!=numbarkos && puntos_2!=numbarkos)
{
dibuja_tablero_player2(tablax,tablay,player2,filas);
dispara_player1_2 (tablax,tablay,player2,filas,&puntos_1);
if (puntos_1==numbarkos)
{
clearviewport();
outtextxy(150,150,"PLAYER 1 GANA");
getch();
break;
}
dibuja_tablero_player1(tablax,tablay,player1,filas);
dispara_player2 (tablax,tablay,player1,filas,&puntos_2);
if (puntos_2==numbarkos)
{
clearviewport();
outtextxy(150,150,"PLAYER 2 GANA");
getche();
break;
}
}
break;
case '3':
exit(0);
default:
sound(500);
delay(300);
nosound();
}
menu();
opcion=getche();
}
getche();
ocultar_raton();
closegraph();
}
void asigna(int tablax[20][20],int tablay[20][20],int player1[20][20],int cpu[20][20],int player2[20][20],int filas)
{
int i,j,x,y;
y=60;
for(i=0;i<filas;i++)
{
x=60;
for(j=0;j<filas;j++)
{
tablax[j]=x;
tablay[j]=y;
player1[j]=0;
player2[j]=0;
cpu[j]=0;
x=x+20;
}
y=y+20;
}
}
void dibuja_tabla(int tablax[20][20],int tablay[20][20],int filas)
{
int i,j,x0,y0,x1,y1;
char letra[2],tmp;
tmp='A';
x0=tablax[0][0]-10;
y0=tablay[0][0]-10;
x1=(tablax[filas-1][filas-1])+10;
y1=(tablay[filas-1][filas-1])+10;
clearviewport();
marco(x0,y0,x1,y1);
setcolor(BLUE);
for(j=0;j<filas+1;j++)
{
line(x0,y0,x1,y0);
y0=y0+20;
}
y0=tablay[0][0]-10;
for(i=0;i<filas+1;i++)
{
line(x0,y0,x0,y1);
x0=x0+20;
}
x0=tablax[0][0];
for (i=0;i<filas;i++)
{
setcolor(WHITE);
letra[0]=tmp;
letra[1]=' ';
outtextxy(x0-2,tablay[0][0]-20,letra);
outtextxy(tablax[0][0]-20,y0+5,letra);
x0=x0+20;
y0=y0+20;
tmp++;
}
}
void koloka_player1 (int tablax[20][20],int tablay[20][20],int player1[20][20],int filas,int numbarkos)
{
int boton,x,y,i,j,contador;
boton=contador=0;
setcolor(WHITE);
outtextxy(10,10,"PLAYER 1 COLOCA TUS BARCOS");
while (contador!=numbarkos)
{
visualizar_raton();
estado_raton(&x,&y,&boton);
if (boton==1)
{
ocultar_raton();
for(i=0;i<filas;i++)
{
for(j=0;j<filas;j++)
{
if(x>tablax[j]-10 && x<tablax[j]+10 && y>tablay[j]-10 && y<tablay[j]+10)
{
if (player1[j]==1)
{
sound(500);
delay(100);
nosound();
}
if (player1[j]==0)
{
pinta_barko(tablax,tablay,i,j);
contador++;
player1[j]=1;
}
}
}
}
getche();
}
}
}
void koloka_cpu(int cpu[20][20],int filas,int numbarkos)
{
int contador,i,j;
contador=0;
while(contador!=numbarkos)
{
i=(random(filas));
j=(random(filas));
if(cpu[j]==0)
{
cpu[j]=1;
contador++;
}
}
}
void pinta_barko (int tablax[20][20],int tablay[20][20],int i,int j)
{
int var;
for(var=0;var<10;var++)
{
setcolor(RED);
rectangle(tablax[j]-var,tablay[j]+var,tablax[j]+var,tablay[j]-var);
setcolor(WHITE);
outtextxy(tablax[j]-2,tablay[j]-2,"B");
}
}
void agua (int tablax[20][20],int tablay[20][20],int i,int j)
{
int var;
setcolor(BLUE);
for (var=0;var<10;var++)
{
circle(tablax[j],tablay[j],var);
}
setcolor(WHITE);
}
void dibuja_tablero_cpu (int tablax[20][20],int tablay[20][20],int cpu[20][20],int filas)
{
int i,j;
clearviewport();
dibuja_tabla(tablax,tablay,filas);
for (i=0;i<filas;i++)
{
for (j=0;j<filas;j++)
{
if (cpu[j]==3)
{
pinta_barko(tablax,tablay,i,j);
}
if (cpu[j]==2)
{
agua(tablax,tablay,i,j);
}
}
}
}
void dispara_player1 (int tablax[20][20],int tablay[20][20],int cpu[20][20],int filas,int *puntos_1)
{
int boton,x,y,i,j,contador;
boton=contador=0;
outtextxy(60,10," - DISPARA PLAYER 1 - ");
while (contador!=1)
{
visualizar_raton();
estado_raton(&x,&y,&boton);
if (boton==1)
{
ocultar_raton();
for(i=0;i<filas;i++)
{
for(j=0;j<filas;j++)
{
if(x>tablax[j]-10 && x<tablax[j]+10 && y>tablay[j]-10 && y<tablay[j]+10)
{
if (cpu[j]==2 || cpu[j]==3)
{
sound(500);
delay(300);
nosound();
}
if (cpu[j]==1)
{
pinta_barko(tablax,tablay,i,j);
*puntos_1=*puntos_1+1;
contador++;
cpu[j]=3;
}
if (cpu[j]==0)
{
agua(tablax,tablay,i,j);
cpu[j]=2;
contador++;
}
}
}
}
getche();
}
}
}
void dispara_cpu (int tablax [20][20],int tablay [20][20],int player1 [20][20],int filas,int *puntos_cpu)
{
int i,j,contador;
contador=0;
outtextxy(60,10,"TURNO DEL ORDENADOR....");
while (contador!=1)
{
i=(random(filas));
j=(random(filas));
if (player1[j]==0)
{
agua(tablax,tablay,i,j);
player1[j]=2;
contador++;
}
if (player1[j]==1)
{
pinta_barko(tablax,tablay,i,j);
player1[j]=3;
*puntos_cpu=*puntos_cpu+1;
contador++;
}
outtextxy(60,460,"- PULSE UNA TECLA PARA CONTINUAR -");
}
getche();
}
void marco(int x0,int y0,int x1,int y1)
{
int c,a,b,x,f, d;
a=2;
b=10;
while(b!=1)
{
setrgbpalette(a,(a*4)+7,a*2,a);
setpalette(a,a);
setcolor(a);
setfillstyle(SOLID_FILL, a);
rectangle(x0-b, y0-b, x1+b, y1+b);
b--;
a++;
}
}
void dibuja_tablero_player1 (int tablax[20][20],int tablay[20][20],int player1[20][20],int filas)
{
int i,j;
clearviewport();
dibuja_tabla(tablax,tablay,filas);
for (i=0;i<filas;i++)
{
for (j=0;j<filas;j++)
{
if (player1[j]==3)
{
pinta_barko(tablax,tablay,i,j);
}
if (player1[j]==2)
{
agua(tablax,tablay,i,j);
}
}
}
}
void koloka_player2 (int tablax[20][20],int tablay[20][20],int player2[20][20],int filas,int numbarkos)
{
int boton,x,y,i,j,contador;
boton=contador=0;
setcolor(WHITE);
outtextxy(10,10,"PLAYER 2 COLOCA TUS BARCOS");
while (contador!=numbarkos)
{
visualizar_raton();
estado_raton(&x,&y,&boton);
if (boton==1)
{
ocultar_raton();
for(i=0;i<filas;i++)
{
for(j=0;j<filas;j++)
{
if(x>tablax[j]-10 && x<tablax[j]+10 && y>tablay[j]-10 && y<tablay[j]+10)
{
if (player2[j]==1)
{
sound(500);
delay(100);
nosound();
}
if (player2[j]==0)
{
pinta_barko(tablax,tablay,i,j);
contador++;
player2[j]=1;
}
}
}
}
getche();
}
}
}
void menu()
{
clearviewport();
bar3d(200,100,400,260,0,2);
setcolor(BLACK);
outtextxy(220,140,"ESCOGE UNA OPCION : ");
outtextxy(220,160,"( 1 ) -UN JUGADOR");
outtextxy(220,180,"( 2 ) -DOS JUGADORES");
outtextxy(220,200,"( 3 ) -SALIR");
}
void dispara_player2 (int tablax[20][20],int tablay[20][20],int player1[20][20],int filas,int *puntos_2)
{
int boton,x,y,i,j,contador;
boton=contador=0;
outtextxy(60,10," - DISPARA PLAYER 2 - ");
while (contador!=1)
{
visualizar_raton();
estado_raton(&x,&y,&boton);
if (boton==1)
{
ocultar_raton();
for(i=0;i<filas;i++)
{
for(j=0;j<filas;j++)
{
if(x>tablax[j]-10 && x<tablax[j]+10 && y>tablay[j]-10 && y<tablay[j]+10)
{
if (player1[j]==2 || player1[j]==3)
{
sound(500);
delay(300);
nosound();
}
if (player1[j]==1)
{
pinta_barko(tablax,tablay,i,j);
*puntos_2=*puntos_2+1;
contador++;
player1[j]=3;
}
if (player1[j]==0)
{
agua(tablax,tablay,i,j);
player1[j]=2;
contador++;
}
}
}
}
getche();
}
}
}
void dispara_player1_2 (int tablax[20][20],int tablay[20][20],int player2[20][20],int filas,int *puntos_1)
{
int boton,x,y,i,j,contador;
boton=contador=0;
outtextxy(60,10," - DISPARA PLAYER 1 - ");
while (contador!=1)
{
visualizar_raton();
estado_raton(&x,&y,&boton);
if (boton==1)
{
ocultar_raton();
for(i=0;i<filas;i++)
{
for(j=0;j<filas;j++)
{
if(x>tablax[j]-10 && x<tablax[j]+10 && y>tablay[j]-10 && y<tablay[j]+10)
{
if (player2[j]==2 || player2[j]==3)
{
sound(500);
delay(300);
nosound();
}
if (player2[j]==1)
{
pinta_barko(tablax,tablay,i,j);
*puntos_1=*puntos_1+1;
contador++;
player2[j]=3;
}
if (player2[j]==0)
{
agua(tablax,tablay,i,j);
player2[j]=2;
contador++;
}
}
}
}
getche();
}
}
}
void dibuja_tablero_player2 (int tablax[20][20],int tablay[20][20],int player2[20][20],int filas)
{
int i,j;
clearviewport();
dibuja_tabla(tablax,tablay,filas);
for (i=0;i<filas;i++)
{
for (j=0;j<filas;j++)
{
if (player2[j]==3)
{
pinta_barko(tablax,tablay,i,j);
}
if (player2[j]==2)
{
agua(tablax,tablay,i,j);
}
}
}
}
int fila()
{
int filas;
clearviewport();
setcolor(BLUE);
gotoxy(10,10);
printf("nDEFINE TAMA¥O PARA EL TABLERO (DE 2 a 20): ");
scanf("%d",&filas);
while (filas<2 || filas>20)
{
printf("n VENGA S