¿Alguien Me Puede Ayudar A Hacer Programa En C++?
| Autor |
Mensaje |
El Media Vida


Registrado: Octubre 2011
Mensajes: 68
Gracias
Dadas: 1
Ubicación: Distrito Federal
|
 ¿Alguien Me Puede Ayudar A Hacer Programa En C++?
Lo que pasa es que tengo de proyecto final hacer un juego de submarinos en C++ me pidieron lo siguiente
Submarino
El juego contara con un tablero de 10x10, y tendra 5 barcos de las siguientes dimenciones : uno de 5, uno de 4, dos de 3 y uno de 2. El programa deber4a colocar los barcos aleatoriamente en forma orizontal y vertical, cuidando que no se ubiquen en las mismas dimenciones.
Deberas desplegar el tablero con ceros para indicar que esta iniciando el juego demostrando las coordenadas del tablero para que el jugador tenga la referencia de donde puede tirar.
Una vez que el jugador de las coordenadas de su tiro, deberas validar que éste sea valido. Si es valido entonces deberá verificar si existe alguna parte del barco en esa posición sino es asi deberás desplegar algun caracter que indique que no existe ningun barco en este lugar y si le dio a alguda parte de un barco deberas colocar una letra "B" que lo indique. Si el barco ya fue hundido deberás indicarlo en el tablero para saber que ese barco ya no esta.
Cada vez que el jugador tire debes actualizar el tablero.
cuando el jugador haya encontrado los 5 barcos, deberá indicar que el jugador ganó y deberas preguntar si deseas volver a jugar.
Obligatorio utilizar arreglos y funciones.
Si pueden solo una parte
|
#1 Lun 21 Nov, 2011 18:25 |
|
 |
Patrocinadores

|
|
 |
petoscal

  
Registrado: Noviembre 2009
Mensajes: 685
Gracias
Recibidas: 19
|
 Re: ¿Alguien Me Puede Ayudar A Hacer Programa En C++?
ok, estoy completamente oxidado en la programación de C++ hace mucho que no lo veo, pero por que no vas poniendo lo que llevas a ver en que te podemos ayudar, me imagino que ya tienes las funciones y el diagrama o el algoritmo a seguir ¿o no?.
¿para cuando lo necesitas? eso es importante, por que bien que mal nosotros no tenemos la presión, pero podemos ayudar, a mi me sirve para "volver a mis raíces" pero el escrito de la programación me da mucha flojera, pero dentro de los algoritmos a ver que podemos hacer. ¿sale?
SALUDOS
|
#2 Lun 21 Nov, 2011 22:24 |
|
 |
El Media Vida


Registrado: Octubre 2011
Mensajes: 68
Gracias
Dadas: 1
Ubicación: Distrito Federal
|
 Re: ¿Alguien Me Puede Ayudar A Hacer Programa En C++?
Encontre este que esta mas largo que 40 cuaresmas  y no le entiendo nada, si de favor me lo pueden explicar
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#include <stdarg.h>
#include <dir.h>
#include "include\ratonlib.h"
#define M 16
#define MAR 0
#define FRAG 1
#define CRUC 2
#define BARRE 3
#define DESTRUC 4
#define DFALLO -'?'
#define CELFRAG 3
#define CELCRUC 4
#define CELBARRE 2
#define CELDESTRUC 5
#define CANTFRAG 4
#define CANTCRUC 2
#define CANTBARRE 4
#define CANTDESTRUC 1
#define TOTALBARCOS 11
#define C 8
#define SP 12
#define CLOSE "x"
#define DRIVER "bgi"
#define ARCH1S "arch1s.img"
#define ARCH1I "arch1i.img"
#define ARCH2S "arch2s.img"
#define ARCH2I "arch2i.img"
/////////////////////////////////////////////////////////////////////////////
//************************** FUNCIONES GRAFICAS *****************************
/////////////////////////////////////////////////////////////////////////////
int absclick(){
int ctime=0,click=0;
ctime=getclickmouse();
if(ctime){
click=ctime;
while(ctime){
ctime=getclickmouse();
delay(10);
}
}
return(click);
}
int absclickxy(int *x,int *y){
int ctime=0,click=0;
ctime=getclickxymouse(x,y);
if(ctime){
click=ctime;
while(ctime){
ctime=getclickxymouse(x,y);
delay(10);
}
}
return(click);
}
void inigraph(char *cad){
int gdriver=DETECT,gmode,errorcode;
initgraph(&gdriver,&gmode,cad);
errorcode=graphresult();
if(errorcode!=grOk){
clrscr();
printf("Error: Driver Grafico No Encontrdo\n");
printf("Presione Culquier Tecla para Salir...");
getch();
exit(1);
}
}
void tapiz(int relleno,int color){
setcolor(color);
setfillstyle(relleno,color);
bar(0,0,getmaxx(),getmaxy());
}
void button(int x1,int y1,int x2,int y2){
offmouse();
setcolor(7);
setfillstyle(1,7);
bar(x1,y1,x2,y2);
setcolor(0);
//detalles grises
setcolor(8);
setfillstyle(1,8);
bar(x1+1,y2-1,x2-1,y2-1);//hori
bar(x2-1,y1+1,x2-1,y2-2);//vert
//detalles blancos
setcolor(15);
setfillstyle(1,15);
bar(x1,y1,x2-1,y1);
bar(x1,y1+1,x1,y2-1);
//detalles negros
setcolor(0);
setfillstyle(1,0);
bar(x1,y2,x2,y2);
bar(x2,y1,x2,y2-1);
onmouse();
}
void oncadbutton(int x1,int y1,int x2,int y2,char far *cad){
int mitx=0, mity=0;
settextstyle(0,0,1);
settextjustify(1,1);
mitx=(x2+x1)/2;
mity=(y2+y1)/2;
offmouse();
//boton on
setcolor(7);
setfillstyle(1,7);
bar(x1,y1,x2,y2);
setcolor(0);
outtextxy(mitx+2,mity+2,cad);
//detalles grises
setcolor(8);
setfillstyle(1,8);
bar(x1+1,y1+1,x2-2,y1+1);
bar(x1+1,y1+2,x1+1,y2-2);
//detalles negros
setcolor(0);
setfillstyle(1,0);
bar(x1,y1,x2-1,y1);
bar(x1,y1+1,x1,y2-1);
//detalles blancos
setcolor(15);
setfillstyle(1,15);
bar(x1,y2,x2,y2);
bar(x2,y1,x2,y2-1);
onmouse();
}
void offcadbutton(int x1,int y1,int x2,int y2,char far *cad){
int mitx=0, mity=0;
settextstyle(0,0,1);
settextjustify(1,1);
mitx=(x2+x1)/2;
mity=(y2+y1)/2;
offmouse();
//boton off}
setcolor(7);
setfillstyle(1,7);
bar(x1,y1,x2,y2);
setcolor(0);
outtextxy(mitx,mity,cad);
//detalles grises
setcolor(8);
setfillstyle(1,8);
bar(x1+1,y2-1,x2-1,y2-1);//hori
bar(x2-1,y1+1,x2-1,y2-2);//vert
//detalles blancos
setcolor(15);
setfillstyle(1,15);
bar(x1,y1,x2-1,y1);
bar(x1,y1+1,x1,y2-1);
//detalles negros
setcolor(0);
setfillstyle(1,0);
bar(x1,y2,x2,y2);
bar(x2,y1,x2,y2-1);
onmouse();
}
void efectcadbutton(int x1,int y1,int x2,int y2,char far *cad){
int click=0, bx=0, by=0;
oncadbutton(x1,y1,x2,y2,cad);
delay(100);
click=getclickxymouse(&bx,&by);
if(click)
while((click==1)&&(((bx>=x1)&&(bx<=x2))&&((by>=y1)&&(by<=y2))))
click=getclickxymouse(&bx,&by);
offcadbutton(x1,y1,x2,y2,cad);
}
void onbox(int x1,int y1,int x2,int y2){
//detalles grises
setcolor(8);
setfillstyle(1,8);
bar(x1,y1,x2-1,y1);
bar(x1,y1+1,x1,y2-1);
//detalles blancos
setcolor(15);
setfillstyle(1,15);
bar(x1,y2,x2,y2);
bar(x2,y1,x2,y2-1);
}
void cuadro(int x1,int y1,int x2,int y2){
setcolor(8);
setfillstyle(1,8);
bar(x1,y1,x2,y1);
bar(x1,y2,x2,y2);
bar(x1,y1,x1,y2);
bar(x2,y1,x2,y2);
setcolor(15);
setfillstyle(1,15);
bar(x1+1,y1+1,x2-1,y1+1);
bar(x1,y2+1,x2+1,y2+1);
bar(x1+1,y1+2,x1+1,y2-1);
bar(x2+1,y1,x2+1,y2);
}
typedef struct acces{
int cx1;
int cy1;
int cx2;
int cy2;
int bmx1;
int bmy1;
int bmx2;
int bmy2;
};
void crearwin(int x1,int y1,int x2,int y2,char *cad,acces *menu)
{
int mity=0;
setcolor(7);
setfillstyle(1,7);
bar(x1,y1,x2,y2);
bar(x1-1,y1-1,x2-1,y1-1);
bar(x1-1,y1,x1-1,y2-1);
//detalles grises
setcolor(8);
setfillstyle(1,8);
bar(x1+1,y2-1,x2-1,y2-1);//hori
bar(x2-1,y1+1,x2-1,y2-2);//vert
//detalles blancos
setcolor(15);
setfillstyle(1,15);
bar(x1,y1,x2-1,y1);
bar(x1,y1+1,x1,y2-1);
//detalles negros
setcolor(0);
setfillstyle(1,0);
bar(x1-1,y2,x2,y2);
bar(x2,y1-1,x2,y2-1);
//barra de titulo
(*menu).bmx1=x1+2;
(*menu).bmx2=x2-3;
(*menu).bmy1=y1+20;
(*menu).bmy2=y1+45;
setcolor(1);
setfillstyle(1,1);
bar((*menu).bmx1,y1+2,(*menu).bmx2,(*menu).bmy1);
mity=(y1+2+y1+20)/2;
settextstyle(0,0,1);
settextjustify(0,1);
setcolor(15);
outtextxy(x1+5,mity,cad);
(*menu).cx1=x2-20;
(*menu).cy1=y1+4;
(*menu).cx2=x2-5;
(*menu).cy2=y1+18;
offcadbutton((*menu).cx1,(*menu).cy1,(*menu).cx2,(*menu).cy2,CLOSE);
onbox(x1+2,(*menu).bmy2,x2-3,y2-3);
}
void bmenu(acces ac,char far *cad){
int mity=0;
setcolor(0);
mity=(ac.bmy1+ac.bmy2)/2;
settextstyle(0,0,1);
settextjustify(0,1);
outtextxy(ac.bmx1+6,mity+2,cad);
}
void msgbox(char *cad1,char *cad2){
delay(100);
int click=0,sw=0,x=0,y=0,
x1=getmaxx()/2-125,
x2=getmaxx()/2+125,
y1=getmaxy()/2-50,
y2=getmaxy()/2+50;
unsigned int size;
void *fond=NULL;
free(fond);
offmouse();
size=imagesize(x1,y1,x2,y2);
fond=malloc(size);
getimage(x1,y1,x2,y2,fond);
offcadbutton(x1,y1,x2,y2,cad2);
setcolor(1);
setfillstyle(1,1);
bar(x1+2,y1+2,x2-3,y1+20);
setcolor(15);
settextjustify(0,1);
outtextxy(x1+5,(y1*2+22)/2,cad1);
setcolor(0);
rectangle(x1+79,y1+64,x2-79,y2-9);
offcadbutton(x1+80,y1+65,x2-80,y2-10,"Aceptar");
onmouse();
do{
if(click)
if((x>=x1+60)&&(x<=x2-60)&&(y>=y1+70)&&(y2-10)){
efectcadbutton(x1+80,y1+65,x2-80,y2-10,"Aceptar");
sw=1;
}
delay(100);
click=getclickxymouse(&x,&y);
}while(!sw);
offmouse();
putimage(x1,y1,fond,COPY_PUT);
free(fond);
onmouse();
delay(500);
}
////////////////////////////////////////////////////////////////////////////
//******************************TIPOS DEFINIDOS******************************
/////////////////////////////////////////////////////////////////////////////
typedef struct coord{
int x1;
int y1;
int x2;
int y2;
};
typedef struct fico{
int fi;
int co;
};
typedef struct impacto{
int cont;
int hund;
};
typedef fico fragata[CELFRAG];
typedef fico crucero[CELCRUC];
typedef fico baminas[CELBARRE];
typedef struct barcos{
fragata vecfrag[CANTFRAG];
crucero veccruc[CANTCRUC];
baminas vecbarre[CANTBARRE];
fico destruc[CELDESTRUC];
impacto impactf[CANTFRAG];
impacto impactc[CANTCRUC];
impacto impactb[CANTBARRE];
impacto impactd;
int fragh;
int cruch;
int barreh;
int destruch;
int barcosh;
int tbarcos;
int swf,swc,swb,swd;
};
typedef int matriz[M][M];
typedef coord mgraf[M][M];
typedef enum player {COMPUTER,HUMAN};
/////////////////////////////////////////////////////////////////////////////
//************************FUNCIONES Y PROCEDIMIENTOS*************************
/////////////////////////////////////////////////////////////////////////////
void inibarco(barcos *brcs){
int cant=0,cel=0;
for(cant=0;cant<CANTFRAG;cant++){
for(cel=0;cel<CELFRAG;cel++){
(*brcs).vecfrag[cant][cel].fi=0;
(*brcs).vecfrag[cant][cel].co=0;
}
(*brcs).impactf[cant].cont=0;
(*brcs).impactf[cant].hund=0;
}
for(cant=0;cant<CANTCRUC;cant++){
for(cel=0;cel<CELCRUC;cel++){
(*brcs).veccruc[cant][cel].fi=0;
(*brcs).veccruc[cant][cel].co=0;
}
(*brcs).impactc[cant].cont=0;
(*brcs).impactc[cant].hund=0;
}
for(cant=0;cant<CANTBARRE;cant++){
for(cel=0;cel<CELBARRE;cel++){
(*brcs).vecbarre[cant][cel].fi=0;
(*brcs).vecbarre[cant][cel].co=0;
}
(*brcs).impactb[cant].cont=0;
(*brcs).impactb[cant].hund=0;
}
for(cel=0;cel<CELDESTRUC;cel++){
(*brcs).destruc[cel].fi=0;
(*brcs).destruc[cel].co=0;
}
(*brcs).impactd.cont=0;
(*brcs).impactd.hund=0;
(*brcs).fragh=0;
(*brcs).cruch=0;
(*brcs).barreh=0;
(*brcs).destruch=0;
(*brcs).barcosh=0,
(*brcs).tbarcos=TOTALBARCOS;
(*brcs).swf=0;
(*brcs).swc=0;
(*brcs).swb=0;
(*brcs).swd=0;
}
void inibarcos(barcos *bs1,barcos *bs2){
inibarco(bs1);
inibarco(bs2);
}
void inimatrices(matriz m1,matriz m2){
for(int f=0;f<M;f++){
for(int c=0;c<M;c++){
m1[f][c]=MAR;
m2[f][c]=MAR;
}//for
c=0;
}//for
}
void inimgraf(mgraf mg){
for(int f=0;f<M;f++){
for(int c=0;c<M;c++){
mg[f][c].x1=0;
mg[f][c].y1=0;
mg[f][c].x2=0;
mg[f][c].y2=0;
}//for
c=0;
}//for
}
void inimgrafcs(mgraf mg1,mgraf mg2){
inimgraf(mg1);
inimgraf(mg2);
}
void cargarmgraf(int x,int y,mgraf mg){
int x1=x, y1=y, x2=x+C, y2=y+C;
char carf='A', carc='a',
cadf[2]="", cadc[35]="";
for(int c=0;c<M;c++,x1+=SP){ //x
cadc[0]=carc;
carc++;
setcolor(0);
settextjustify(0,0);
settextstyle(2,0,0);
outtextxy(x1,y-8,cadc);
}
x1=x;
for(int f=0;f<M;f++,y1+=SP,y2=y1+C){ //y
cadf[0]=carf;
carf++;
setcolor(0);
settextjustify(0,0);
settextstyle(2,0,0);
outtextxy(x-15,y2,cadf);
for(int c=0;c<M;c++,x1+=SP,x2=x1+C){ //x
mg[f][c].x1=x1;
mg[f][c].y1=y1;
mg[f][c].x2=x2;
mg[f][c].y2=y2;
onbox(x1,y1,x2,y2);
}//for
x1=x; x2=x+C;
}
cuadro(x-5,y-5,x+192,y+192);
}
void cargarmgrafcs(int xms,int yms,mgraf mgs,int xmi,int ymi,mgraf mgi){
cargarmgraf(xms,yms,mgs);
cargarmgraf(xmi,ymi,mgi);
}
void pintarmgraf(int x,int y){
int x1=x, y1=y, x2=x+C, y2=y+C;
for(int f=0;f<M;f++,y1+=SP,y2=y1+C){ //y
for(int c=0;c<M;c++,x1+=SP,x2=x1+C){ //x
onbox(x1,y1,x2,y2);
}//for
x1=x; x2=x+C;
}
}
int espacio(int celdas,int fi,int ci,int direc,matriz m){
int cel=0,libre=1,columns=0,filas=0;
if(direc==0){
for(cel=0;(cel<celdas)&&libre;cel++){
columns=ci+cel;
if((m[fi][columns]!=MAR)||(columns>=M))
libre=0;
}//for
}//if
if(direc==1){
for(cel=0;(cel<celdas)&&libre;cel++){
filas=fi+cel;
if((m[filas][ci]!=MAR)||(filas>=M))
libre=0;
}//for
}//if
return(libre);
}
void ubicarbarco(matriz m,mgraf mgi,int tipo,int *fi,int *ci,int *direc){
int click=0,sw=0,celdas=0,f=0,c=0,x=0,y=0,
x1=0,y1=0,x2=0,y2=0,ubicado=0,color=0;
*direc=0;
switch(tipo){
case FRAG:
color=10;
celdas=CELFRAG;
break;
case CRUC:
color=11;
celdas=CELCRUC;
break;
case BARRE:
color=13;
celdas=CELBARRE;
break;
case DESTRUC:
color=14;
celdas=CELDESTRUC;
break;
}//case
for(;!ubicado;){
click=getclickxymouse(&x,&y);
if(click){
for(f=0;(f<M)&&(!sw);f++)
for(c=0;(c<M)&&(!sw);c++){
x1=mgi[f][c].x1;
y1=mgi[f][c].y1;
x2=mgi[f][c].x2;
y2=mgi[f][c].y2;
if((((x>=x1)&&(x<=x2))&&((y>=y1)&&(y<=y2)))){
*fi=f;
*ci=c;
sw=1;
switch(click){
case 1: *direc=0; break;
case 2: *direc=1; break;
}//case
}//if
}//for
}//if
if(sw){
sw=0;
ubicado=espacio(celdas,(*fi),(*ci),(*direc),m);
if(ubicado){
setcolor(color);
offmouse();
switch(*direc){
case 0: rectangle(x1-1,y1-1,x2+(celdas-1)*SP+1,y2+1);
break;
case 1: rectangle(x1-1,y1-1,x2+1,y2+(celdas-1)*SP+1);
break;
}
onmouse();
}//if
else
msgbox("Batalla Naval","Tama¤o de Celdas Insuficiente");
}//if
while(click){
click=getclickmouse();
delay(100);
}//while
}
}
void barcoshuman(matriz m,mgraf mgi,barcos *flota){
int cant=0,fi=0,ci=0,direc=0,cel=0;
char msg[80];
int x1=170,y1=80,x2=x1+CELFRAG*SP,y2=y1+SP;
setcolor(10);
rectangle(x1,y1,x2,y2);
rectangle(x1,y1+100,x2,y2+100);
setcolor(0);
settextstyle(2,0,4);
settextjustify(0,1);
outtextxy(x2+18,(y1+y2+200)/2,"= 3 Celdas");
outtextxy(x2+5,(y1+y2)/2,"= Click Izquierdo");
x1=180,y1=100,x2=x1+SP,y2=y1+CELFRAG*SP;
setcolor(10);
rectangle(x1,y1,x2,y2);
setcolor(0);
outtextxy(x2+18,(y1+y2)/2,"= Click Derecho");
settextjustify(1,1);
setcolor(1);
outtextxy((155+352)/2,y1+60,"Ubicar Fragatas...");
setcolor(4);
outtextxy((155+352)/2,y1+125,"Ubicando Embarcaciones...");
for(cant=0;cant<CANTFRAG;cant++){
ubicarbarco(m,mgi,FRAG,&fi,&ci,&direc);
switch(direc){
case 0: for(cel=0;cel<CELFRAG;cel++){
m[fi][ci+cel]=FRAG;
(*flota).vecfrag[cant][cel].fi=fi;
(*flota).vecfrag[cant][cel].co=ci+cel;
}
break;
case 1: for(cel=0;cel<CELFRAG;cel++){
m[fi+cel][ci]=FRAG;
(*flota).vecfrag[cant][cel].fi=fi+cel;
(*flota).vecfrag[cant][cel].co=ci;
}
break;
}//case
}//for
setcolor(7);
x1=170,y1=80,x2=x1+CELFRAG*SP,y2=y1+SP;
rectangle(x1,y1+100,x2,y2+100);
settextjustify(0,1);
settextstyle(2,0,4);
outtextxy(x2+18,(y1+y2+200)/2,"= 3 Celdas");
settextjustify(1,1);
outtextxy((155+352)/2,160,"Ubicar Fragatas...");
x1=170,y1=80,x2=x1+CELCRUC*SP,y2=y1+SP;
setcolor(11);
rectangle(x1,y1+100,x2,y2+100);
setcolor(0);
settextjustify(0,1);
outtextxy(x2+18,(y1+y2+200)/2,"= 4 Celdas");
setcolor(1);
settextjustify(1,1);
outtextxy((155+352)/2,160,"Ubicar Cruceros...");
fi=0,ci=0,direc=0;
for(cant=0;cant<CANTCRUC;cant++){
ubicarbarco(m,mgi,CRUC,&fi,&ci,&direc);
switch(direc){
case 0: for(cel=0;cel<CELCRUC;cel++){
m[fi][ci+cel]=CRUC;
(*flota).veccruc[cant][cel].fi=fi;
(*flota).veccruc[cant][cel].co=ci+cel;
}
break;
case 1: for(cel=0;cel<CELCRUC;cel++){
m[fi+cel][ci]=CRUC;
(*flota).veccruc[cant][cel].fi=fi+cel;
(*flota).veccruc[cant][cel].co=ci;
}
break;
}//case
}//for
setcolor(7);
x1=170,y1=80,x2=x1+CELCRUC*SP,y2=y1+SP;
rectangle(x1,y1+100,x2,y2+100);
settextjustify(0,1);
settextstyle(2,0,4);
outtextxy(x2+18,(y1+y2+200)/2,"= 4 Celdas");
x1=180,y1=100,x2=x1+SP,y2=y1+CELCRUC*SP;
settextjustify(1,1);
outtextxy((155+352)/2,y1+60,"Ubicar Cruceros...");
x1=170,y1=80,x2=x1+CELBARRE*SP,y2=y1+SP;
setcolor(13);
rectangle(x1,y1+100,x2,y2+100);
setcolor(0);
settextjustify(0,1);
outtextxy(x2+18,(y1+y2+200)/2,"= 2 Celdas");
setcolor(1);
settextjustify(1,1);
outtextxy((155+352)/2,160,"Ubicar Barreminas...");
fi=0,ci=0,direc=0;
for(cant=0;cant<CANTBARRE;cant++){
ubicarbarco(m,mgi,BARRE,&fi,&ci,&direc);
switch(direc){
case 0: for(cel=0;cel<CELBARRE;cel++){
m[fi][ci+cel]=BARRE;
(*flota).vecbarre[cant][cel].fi=fi;
(*flota).vecbarre[cant][cel].co=ci+cel;
}
break;
case 1: for(cel=0;cel<CELBARRE;cel++){
m[fi+cel][ci]=BARRE;
(*flota).vecbarre[cant][cel].fi=fi+cel;
(*flota).vecbarre[cant][cel].co=ci;
}
break;
}//case
}//for
setcolor(7);
x1=170,y1=80,x2=x1+CELBARRE*SP,y2=y1+SP;
rectangle(x1,y1+100,x2,y2+100);
settextjustify(0,1);
settextstyle(2,0,4);
outtextxy(x2+18,(y1+y2+200)/2,"= 2 Celdas");
settextjustify(1,1);
outtextxy((155+352)/2,160,"Ubicar Barreminas...");
x1=170,y1=80,x2=x1+CELDESTRUC*SP,y2=y1+SP;
setcolor(14);
rectangle(x1,y1+100,x2,y2+100);
setcolor(0);
settextjustify(0,1);
outtextxy(x2+18,(y1+y2+200)/2,"= 5 Celdas");
setcolor(1);
settextjustify(1,1);
outtextxy((155+352)/2,160,"Ubicar Destructor...");
fi=0,ci=0,direc=0;
ubicarbarco(m,mgi,DESTRUC,&fi,&ci,&direc);
switch(direc){
case 0: for(cel=0;cel<CELDESTRUC;cel++){
m[fi][ci+cel]=DESTRUC;
(*flota).destruc[cel].fi=fi;
(*flota).destruc[cel].co=ci+cel;
}
break;
case 1: for(cel=0;cel<CELDESTRUC;cel++){
m[fi+cel][ci]=DESTRUC;
(*flota).destruc[cel].fi=fi+cel;
(*flota).destruc[cel].co=ci;
}
break;
}//case
delay(500);
}
int contador(barcos *flota,int tipo,int fila,int colum,char *cadjug,player tp){
int cant=0,cel=0,sw=0,fi=0,co=0,num=0,
impacts=0,hundido=0;
switch(tipo){
case FRAG:{
for(cant=0;(cant<CANTFRAG)&&(!sw);cant++)
for(cel=0;(cel<CELFRAG)&&(!sw);cel++){
fi=(*flota).vecfrag[cant][cel].fi;
co=(*flota).vecfrag[cant][cel].co;
if((fi==fila)&&(co==colum)){
(*flota).impactf[cant].cont++;
num=cant;
sw=1;
}//if
}//for
if(sw){
sw=0;
impacts=(*flota).impactf[num].cont;
hundido=(*flota).impactf[num].hund;
if((impacts==CELFRAG)&&(!hundido)){
if(tp)
msgbox(cadjug,"Hundistes Fragata");
(*flota).fragh++;
(*flota).impactf[num].hund=1;
}//if
}//if
}break;
case CRUC:{
for(cant=0;(cant<CANTCRUC)&&(!sw);cant++)
for(cel=0;(cel<CELCRUC)&&(!sw);cel++){
fi=(*flota).veccruc[cant][cel].fi;
co=(*flota).veccruc[cant][cel].co;
if((fi==fila)&&(co==colum)){
(*flota).impactc[cant].cont++;
num=cant;
sw=1;
}//if
}//for
if(sw){
sw=0;
impacts=(*flota).impactc[num].cont;
hundido=(*flota).impactc[num].hund;
if((impacts==CELCRUC)&&(!hundido)){
if(tp)
msgbox(cadjug,"Hundistes Crucero");
(*flota).cruch++;
(*flota).impactc[num].hund=1;
}//if
}//if
}break;
case BARRE:{
for(cant=0;(cant<CANTBARRE)&&(!sw);cant++)
for(cel=0;(cel<CELBARRE)&&(!sw);cel++){
fi=(*flota).vecbarre[cant][cel].fi;
co=(*flota).vecbarre[cant][cel].co;
if((fi==fila)&&(co==colum)){
(*flota).impactb[cant].cont++;
num=cant;
sw=1;
}//if
}//for
if(sw){
sw=0;
impacts=(*flota).impactb[num].cont;
hundido=(*flota).impactb[num].hund;
if((impacts==CELBARRE)&&(!hundido)){
if(tp)
msgbox(cadjug,"Hundistes Barreminas");
(*flota).barreh++;
(*flota).impactb[num].hund=1;
}//if
}//if
}break;
case DESTRUC:{
for(cel=0;(cel<CELDESTRUC)&&(!sw);cel++){
fi=(*flota).destruc[cel].fi;
co=(*flota).destruc[cel].co;
if((fi==fila)&&(co==colum)){
(*flota).impactd.cont++;
sw=1;
}//if
}//for
if(sw){
sw=0;
impacts=(*flota).impactd.cont;
hundido=(*flota).impactd.hund;
if((impacts==CELDESTRUC)&&(!hundido)){
if(tp)
msgbox(cadjug,"Hundistes Destructor");
(*flota).destruch++;
(*flota).impactd.hund=1;
}//if
}//if
}break;
}
if((*flota).fragh==CANTFRAG&&!(*flota).swf){
if(tp)
msgbox(cadjug,"Todas sus Fragatas Hundidas");
(*flota).swf=1;
}
if((*flota).cruch==CANTCRUC&&!(*flota).swc){
if(tp)
msgbox(cadjug,"Todos sus Cruceros Hundidos");
(*flota).swc=1;
}
if((*flota).barreh==CANTBARRE&&!(*flota).swb){
if(tp)
msgbox(cadjug,"Sus Barreminas Hundidos");
(*flota).swb=1;
}
(*flota).barcosh=(*flota).fragh+(*flota).cruch+(*flota).barreh+(*flota).destruch;
(*flota).tbarcos=TOTALBARCOS-(*flota).barcosh;
if((*flota).barcosh==TOTALBARCOS){
if(tp)
msgbox(cadjug,"GANASTES EL JUEGO!!!");
else
msgbox("Jugador","PERDISTES EL JUEGO!!!");
return(1);
}
return(0);
}
int gamehuman(int x,int y,matriz m,mgraf mg,barcos *flota,char *cadjug,player tp){
int x1=0,y1=0,x2=0,y2=0,salir=0,go=0,faux=0,caux=0;
for(int f=0;((f<M)&&(!salir));f++){
for(int c=0;((c<M)&&(!salir));c++){
x1=mg[f][c].x1;
y1=mg[f][c].y1;
x2=mg[f][c].x2;
y2=mg[f][c].y2;
if(((x>=x1)&&(x<=x2))&&((y>=y1)&&(y<=y2))){
salir=1;
faux=f;
caux=c;
}//if
}//for
}//for
if(salir){
if(m[faux][caux]==MAR){
m[faux][caux]=DFALLO;
setcolor(9); //azulclaro
setfillstyle(1,9);
offmouse();
bar(x1+2,y1+2,x2-2,y2-2);
onmouse();
}else
if(m[faux][caux]>MAR){
setcolor(12); //rojolaro
setfillstyle(1,12);
offmouse();
bar(x1+2,y1+2,x2-2,y2-2);
onmouse();
go=contador(flota,m[faux][caux],faux,caux,cadjug,tp);
m[faux][caux]*=-1;
}else
if(m[faux][caux]<MAR){
go=-1;
msgbox(cadjug,"Intente de Nuevo");
}
}//if
else{
go=-1;
}
return(go);
}
int espcomp(int celdas,int *fi,int *ci,int *direc,matriz m){
int cel=0,esp=1,columns=0,filas=0;
*fi=random(M);
*ci=random(M);
*direc=random(2);
if(*direc==0){
for(cel=0;(cel<celdas)&&esp;cel++){
columns=*ci+cel;
if((m[*fi][columns]!=MAR)||(columns>=M))
esp=0;
}//for
}//if
if(*direc==1){
for(cel=0;(cel<celdas)&&esp;cel++){
filas=*fi+cel;
if((m[filas][*ci]!=MAR)||(filas>=M))
esp=0;
}//for
}//if
return(esp);
}
void barcoscomp(matriz m,barcos *flota){
int cant=0,fi=0,ci=0,direc=0,cel=0;
for(cant=0;cant<CANTFRAG;cant++){
while(!espcomp(CELFRAG,&fi,&ci,&direc,m));
switch(direc){
case 0: for(cel=0;cel<CELFRAG;cel++){
m[fi][ci+cel]=FRAG;
(*flota).vecfrag[cant][cel].fi=fi;
(*flota).vecfrag[cant][cel].co=ci+cel;
}
break;
case 1: for(cel=0;cel<CELFRAG;cel++){
m[fi+cel][ci]=FRAG;
(*flota).vecfrag[cant][cel].fi=fi+cel;
(*flota).vecfrag[cant][cel].co=ci;
}
break;
}//case
}//for
fi=0,ci=0,direc=0;
for(cant=0;cant<CANTCRUC;cant++){
while(!espcomp(CELCRUC,&fi,&ci,&direc,m));
switch(direc){
case 0: for(cel=0;cel<CELCRUC;cel++){
m[fi][ci+cel]=CRUC;
(*flota).veccruc[cant][cel].fi=fi;
(*flota).veccruc[cant][cel].co=ci+cel;
}
break;
case 1: for(cel=0;cel<CELCRUC;cel++){
m[fi+cel][ci]=CRUC;
(*flota).veccruc[cant][cel].fi=fi+cel;
(*flota).veccruc[cant][cel].co=ci;
}
break;
}//case
}//for
fi=0,ci=0,direc=0;
for(cant=0;cant<CANTBARRE;cant++){
while(!espcomp(CELBARRE,&fi,&ci,&direc,m));
switch(direc){
case 0: for(cel=0;cel<CELBARRE;cel++){
m[fi][ci+cel]=BARRE;
(*flota).vecbarre[cant][cel].fi=fi;
(*flota).vecbarre[cant][cel].co=ci+cel;
}
break;
case 1: for(cel=0;cel<CELBARRE;cel++){
m[fi+cel][ci]=BARRE;
(*flota).vecbarre[cant][cel].fi=fi+cel;
(*flota).vecbarre[cant][cel].co=ci;
}
break;
}//case
}//for
fi=0,ci=0,direc=0;
while(!espcomp(CELDESTRUC,&fi,&ci,&direc,m));
switch(direc){
case 0: for(cel=0;cel<CELDESTRUC;cel++){
m[fi][ci+cel]=DESTRUC;
(*flota).destruc[cel].fi=fi;
(*flota).destruc[cel].co=ci+cel;
}
break;
case 1: for(cel=0;cel<CELDESTRUC;cel++){
m[fi+cel][ci]=DESTRUC;
(*flota).destruc[cel].fi=fi+cel;
(*flota).destruc[cel].co=ci;
}
break;
}//case
}
int gamecomputer(matriz m,mgraf mgi,barcos *flota,char *cadjug,player tp){
int go=0,x1=0,y1=0,x2=0,y2=0,repetir=0,faux=0,caux=0;
static int f=0,c=0,impact=0,cont=0;
do{
if((impact)||((cont>=1)&&(cont<=4))){
cont++;
switch(cont){
case 1: c++;
break;
case 2: c--;
f++;
break;
case 3: f--;
c--;
break;
case 4: c++;
f--;
break;
}//case
faux=f;
caux=c;
if(faux<0)
faux++;
if(faux>15)
faux--;
if(caux<0)
caux++;
if(caux>15)
caux++;
}
else{
cont=0;
faux=random(M);
caux=random(M);
}
x1=mgi[faux][caux].x1;
y1=mgi[faux][caux].y1;
x2=mgi[faux][caux].x2;
y2=mgi[faux][caux].y2;
if(m[faux][caux]==MAR){
m[faux][caux]=DFALLO;
setcolor(9); //azulclaro
setfillstyle(1,9);
offmouse();
bar(x1+2,y1+2,x2-2,y2-2);
onmouse();
repetir=0;
impact=0;
}else
if(m[faux][caux]>MAR){
setcolor(12); //rojolaro
setfillstyle(1,12);
offmouse();
bar(x1+2,y1+2,x2-2,y2-2);
onmouse();
go=contador(flota,m[faux][caux],faux,caux,cadjug,tp);
m[faux][caux]*=-1;
repetir=0;
impact=1;
cont=0;
f=faux;
c=caux;
}else
repetir=1;
}while(repetir);
return(go);
}
void cleartab(int x,int y){
setcolor(7);
setfillstyle(1,7);
offmouse();
bar(x-3,y-3,x+190,y+190);
onmouse();
}
void erasetab(int x,int y){
setcolor(7);
setfillstyle(1,7);
offmouse();
bar(x-3,y-3,x+190,y+190);
pintarmgraf(x,y);
onmouse();
}
void *savetab(int x,int y,unsigned *dimen){
void *imagen;
*dimen=imagesize(x-3,y-3,x+190,y+190);
imagen=malloc(*dimen);
offmouse();
getimage(x-3,y-3,x+190,y+190,imagen);
putimage(x-3,y-3,imagen,COPY_PUT);
onmouse();
return(imagen);
}
void archtab(void *imagen,unsigned dimen,char *nombre){
FILE *f1=fopen(nombre,"w");
fwrite(imagen,dimen,1,f1);
fflush(f1);
fclose(f1);
free(imagen);
}
void loadtab(int x,int y,char *nombre){
unsigned xdimen,ydimen,dimen;
FILE *f1=fopen(nombre,"r");
void *imagen;
xdimen=(fgetc(f1)|(fgetc(f1)<8));
ydimen=(fgetc(f1)|(fgetc(f1)<8));
dimen=imagesize(0,0,xdimen,ydimen);
imagen=malloc(dimen);
rewind(f1);
fread(imagen,dimen,1,f1);
fclose(f1);
offmouse();
putimage(x-3,y-3,imagen,COPY_PUT);
onmouse();
free(imagen);
}
void marcar(matriz m,mgraf mgi){
int f,c,x1=0,y1=0,x2=0,y2=0;
for(f=0;(f<M);f++)
for(c=0;(c<M);c++)
if(m[f][c]<0){
x1=mgi[f][c].x1;
y1=mgi[f][c].y1;
x2=mgi[f][c].x2;
y2=mgi[f][c].y2;
offmouse();
if(m[f][c]==DFALLO){
setcolor(9); //azulclaro
setfillstyle(1,9);
}//if
else{
setcolor(12); //rojoclaro
setfillstyle(1,12);
}//else
bar(x1+2,y1+2,x2-2,y2-2);
onmouse();
}//if
}
int juegosalir(int *x,int *y,acces bm){
int click=0;
click=getclickxymouse(x,y);
if(click==1){
if((*x>=370)&&(*x<=470)&&(*y>=80)&&(*y<=120)){
efectcadbutton(370,80,470,120,"Jug vs Comp");
return(3);
}else
if((*x>=370)&&(*x<=470)&&(*y>=130)&&(*y<=170)){
efectcadbutton(370,130,470,170,"Jug vs Jug");
return(4);
}else
if((*x>=370)&&(*x<=470)&&(*y>=180)&&(*y<=220)){
efectcadbutton(370,180,470,220,"Salir");
return(5);
}else
if((*x>=bm.cx1)&&(*x<=bm.cx2)&&(*y>=bm.cy1)&&(*y<=bm.cy2)){
efectcadbutton(bm.cx1,bm.cy1,bm.cx2,bm.cy2,CLOSE);
return(5);
}
}
return(click);
}
//Humano Vs Humano
int hvsh(acces bm){
int click=0,x=0,y=0,gover=0,turno=1,js=0;
matriz m1,m2;
barcos barcos1,barcos2;
mgraf mgs,mgi;
void *tabla;
unsigned dimen=0;
inimatrices(m1,m2);
inimgrafcs(mgs,mgi);
inibarcos(&barcos1,&barcos2);
cleartab(160,bm.bmy2+20);
cleartab(160,283);
cargarmgraf(160,283,mgi);
cuadro(155,62,352,259);
msgbox("Jugador 1","Ubique su Flota");
barcoshuman(m1,mgi,&barcos1);
cleartab(160,bm.bmy2+20);
tabla=savetab(160,283,&dimen);
archtab(tabla,dimen,ARCH1I);
erasetab(160,283);
msgbox("Jugador 2","Ubique su Flota");
barcoshuman(m2,mgi,&barcos2);
cleartab(160,bm.bmy2+20);
tabla=savetab(160,283,&dimen);
archtab(tabla,dimen,ARCH2I);
cargarmgraf(160,bm.bmy2+20,mgs);
tabla=savetab(160,bm.bmy2+20,&dimen);
archtab(tabla,dimen,ARCH1S);
tabla=savetab(160,bm.bmy2+20,&dimen);
archtab(tabla,dimen,ARCH2S);
erasetab(160,283);
msgbox("Batalla Naval","Comienza el Juego!!!");
msgbox("Turno del:","Jugador 1");
loadtab(160,283,ARCH1I);
for(;(gover<=0);){
js=juegosalir(&x,&y,bm);
if(js>2) return(js);
//humano vs humano
if(turno==1)
if(js==1){
gover=gamehuman(x,y,m2,mgs,&barcos2,"Jugador 1",HUMAN);
if(gover==0){
tabla=savetab(160,bm.bmy2+20,&dimen);
archtab(tabla,dimen,ARCH1S);
tabla=savetab(160,283,&dimen);
archtab(tabla,dimen,ARCH1I);
erasetab(160,283);
erasetab(160,bm.bmy2+20);
turno=0;
msgbox("Turno del","Jugador 2");
loadtab(160,bm.bmy2+20,ARCH2S);
loadtab(160,283,ARCH2I);
marcar(m2,mgi);
}
js=0;
click=0;
}
if(turno==0)
if(js==1){
gover=gamehuman(x,y,m1,mgs,&barcos1,"Jugador 2",HUMAN);
click=0;
if(gover==0){
tabla=savetab(160,bm.bmy2+20,&dimen);
archtab(tabla,dimen,ARCH2S);
tabla=savetab(160,283,&dimen);
archtab(tabla,dimen,ARCH2I);
erasetab(160,283);
erasetab(160,bm.bmy2+20);
turno=1;
msgbox("Turno del","Jugador 1");
loadtab(160,bm.bmy2+20,ARCH1S);
loadtab(160,283,ARCH1I);
marcar(m1,mgi);
}
js=0;
click=0;
}
do{
click=getclickxymouse(&x,&y);
delay(10);
}while(click);
}//for
return(0);
}
//Humano Vs Computadora
int hvsc(acces bm){
int click=0,x=0,y=0,gover=0,turno=1,js=0;
matriz m1,m2;
barcos barcos1,barcos2;
mgraf mgs,mgi;
inimatrices(m1,m2);
inimgrafcs(mgs,mgi);
inibarcos(&barcos1,&barcos2);
cleartab(160,bm.bmy2+20);
cleartab(160,283);
cargarmgraf(160,283,mgi);
cuadro(155,62,352,259);
onmouse();
barcoscomp(m2,&barcos2);
msgbox("Batalla Naval","Ubique su Flota");
barcoshuman(m1,mgi,&barcos1);
erasetab(160,bm.bmy2+20);
cargarmgraf(160,bm.bmy2+20,mgs);
msgbox("Batalla Naval","Comienza el Juego!!!");
for(;(gover<=0);){
js=juegosalir(&x,&y,bm);
if(js>2) return(js);
if(js==1)
if(turno){
gover=gamehuman(x,y,m2,mgs,&barcos2,"Jugador: ",HUMAN);
if(gover==0)
turno=0;
}//if
if(!turno){
gover=gamecomputer(m1,mgi,&barcos1,"Computadora: ",COMPUTER);
if(gover==0)
turno=1;
}//if
do{
click=getclickxymouse(&x,&y);
delay(10);
}while(click);
}//for
return(0);
}
void main(void){
randomize();
int click=0,x=0,y=0,jusa=0;
acces bm;
inigraph(DRIVER);
tapiz(8,1);
crearwin(100,2,500,479,"Batalla Naval",&bm);
bmenu(bm,"Hecho por: Cesar Lanz y Luis Guzman");
offcadbutton(370,80,470,120,"Jug vs Comp");
offcadbutton(370,130,470,170,"Jug vs Jug");
offcadbutton(370,180,470,220,"Salir");
if(!inimouse(&click)){
setcolor(15);
outtextxy(0,0,"Error al Inicializar Mouse...");
}
changecursor(FLECHA);
putxymouse(320,240);
onmouse();
for(;jusa<5;){
if(jusa==3) jusa=hvsc(bm);
if(jusa==4) jusa=hvsh(bm);
if(jusa<3)
jusa=juegosalir(&x,&y,bm);
do{
click=getclickxymouse(&x,&y);
delay(10);
}while(click);
}//for
closegraph();
rmdir(ARCH1S);
rmdir(ARCH1I);
rmdir(ARCH2S);
rmdir(ARCH2I);
}
|
#3 Mar 22 Nov, 2011 11:37 |
|
 |
|
|
Temas parecidos
Temas parecidos
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos No puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|