You are on page 1of 8

#include<stdio.

h>
#include<conio.h>
#include<graphics.h>
#include<stdlib.h>
#include<dos.h>
struct juego
{
int njugador,p1,p2,p3;
};
struct jugadores
{
char nombre[41];
};
int busca_ganador(int x,int y, int z,int k);
int nadie_gano(int ntiros,int x,int y,int z,int n);
int tiro_repetido(int x,int y,int z);
void dibuja(int x, int y, int z);
void tira(int x,int y,int z,int k);
int posiciones[6][6][6];
void main(void)
{
char conf,*nc,*xc,*yc,*zc;
int i,n,x,y,z,ganador,gato,k,ntiros;
struct jugadores jugador[3];
conf='s';
while (conf!='n')
{
for (z=0;z<=5;z++)
{
for (y=0;y<=5;y++)
{
for (x=0;x<=5;x++)
{
posiciones[x][y][z]=3;
}
}
}
ntiros=0;
k=0;
x=2;
y=2;
z=2;
n=1;
while (x<3 || x>6 || y<3 || y>6 || z<3 || z>6 || n<2 || n>3)
{
clrscr();
printf("solo introduzca 2 o 3 para el numero de jugadores\n");
printf("introduce el numero de jugadores (2 o 3)\n");
*nc=getche();
n=atoi(nc);
// scanf("%d",&n) ;
printf("\nlas dimensiones del juego son 3<= x,y,z <=6\n");
printf("las dimensiones del juego se colocan asi: 666\n");

printf("introduce las dimensiones del juego (xyz)\n");


*xc=getche();
x=atoi(xc);
*yc=getche();
y=atoi(yc);
*zc=getche();
z=atoi(zc);
// scanf("%d %d %d",&x,&y,&z);
}
for (i=0;i<=n-1;i++)
{
printf("\nintroduce el nombre del jugador %d\n",i+1);
gets(jugador[i].nombre);
}
clrscr();
printf("las coordenadas se escriben del 1 al valor de x,y,z dado\n");
printf("\ny se deben leer los horizontales x leyendo desde la izquierda
\n");
printf("\nlas verticales y desde la parte superior hacia abajo\n");
printf("\nlos planos z del superior hacia abajo\n");
printf("\nen el ingreso del tiro no es necesario pulsar <enter>\n");
printf("\nlos tonos indican al jugador que le toca tirar\n");
printf("\nel tono mas grave pertenece al primer jugador \n");
printf("\nel tono intermedio al segundo\n");
printf("\ny el mas agudo al tercero\n");
printf("\npresione cualquier tecla para continuar\a");
getch();
dibuja(x,y,z);
do
{
if (k==n)
k=0;
outtextxy(380,1+10*k,jugador[k].nombre);
tira(x,y,z,k);
ntiros++;
ganador=busca_ganador(x,y,z,k);
gato=nadie_gano(ntiros,x,y,z,n);
k++;
}
while (gato!=1 && ganador>n);
if (gato==1)
{
outtextxy(30,400,"no hay ganador");
putchar(7);
}
else
{
outtextxy(30,400,"el ganador es:");
outtextxy(1,420,jugador[ganador].nombre);
putchar(7);
}
getch();
restorecrtmode();
printf("desea jugar de nuevo s/n");

conf=getch();
}
}
/*************************************************************************
ESTA FUNCION PIDE LAS COORDENADAS DEL TIRO
**************************************************************************/
void tira(int x,int y,int z,int k)
{
int x1,y1,z1,dx,dy,ya;
char *pa,*pb,*pc;
dx=340/(x+y);
dy=460/((y+2)*z);
struct juego nuevo;
do
{
sound(240+200*k);
delay(500);
nosound();
outtextxy(1,20,"tiro:");
//
scanf("%d %d %d",&(nuevo.p1),&(nuevo.p2),&(nuevo.p3));
*pa=getch();
nuevo.p1=atoi(pa);
*pb=getch();
nuevo.p2=atoi(pb);
*pc=getch();
nuevo.p3=atoi(pc);
(nuevo.njugador)=k;
ya=tiro_repetido(nuevo.p1,nuevo.p2,nuevo.p3);
}
while((nuevo.p1)<1 || (nuevo.p1)>x || (nuevo.p2)<1 || (nuevo.p2)>y || (n
uevo.p3)<1 || (nuevo.p3)>z || ya!=0);
x1=nuevo.p1;
y1=nuevo.p2;
z1=nuevo.p3;
posiciones[x1-1][y1-1][z1-1]=nuevo.njugador;
setfillstyle(SOLID_FILL,k+2);
floodfill(150+((x1+y1-1)*dx),20+(y1-0.5+(y*(z1-1)))*dy+3*z*(z1-1),WHITE);
}
/***************************************************************************
ESTA FUNCION BUSCA UN GANADOR
***************************************************************************/
int busca_ganador(int x,int y,int z,int k)
{
int i,j,l,cont;
for (l=0;l<z;l++)
for (j=0;j<y;j++)
{
cont =0;

for (i=0;i<x;i++)
{
if (posiciones[i][j][l]==k)
{
cont=cont+1;
if (cont==x)
return(k);
}
}
}
for (l=0;l<z;l++)
for (j=0;j<x;j++)
{
cont =0;
for (i=0;i<y;i++)
{
if (posiciones[j][i][l]==k)
{
cont=cont+1;
if (cont==y)
return(k);
}
}
}
for (l=0;l<x;l++)
for (j=0;j<y;j++)
{
cont =0;
for (i=0;i<z;i++)
{
if (posiciones[l][j][i]==k)
{
cont=cont+1;
if (cont==z)
return(k);
}
}
}
if ((x*y)==(x*x))
{
for (l=0;l<z;l++)
{
cont=0;
for (i=0;i<x;i++)
{
if (posiciones[i][i][l]==k)
{
cont=cont+1;
if (cont==x)
return(k);
}
}
}
for (l=0;l<z;l++)
{
cont=0;
for (i=0;i<x;i++)

//verifica lineas horizontales "-"

//verifica lineas verticales "|"

//verifica lineas en el eje z "."

// verifica diagonal xy "\"

{
if (posiciones[i][(y-1)-i][l]==k)
{
cont=cont+1;
if (cont==x)
return(k);
}
}

//verifica diagonal xy "/"

}
}
if ((x*z)==(x*x))
{
for (j=0;j<y;j++)
{
cont=0;
for (i=0;i<x;i++)
{
if (posiciones[i][j][i]==k)
{
cont=cont+1;
if (cont==x)
return(k);
}
}
}

// verifica diagonal xz "\"

for (j=0;j<y;j++)
{
cont=0;
for (i=0;i<x;i++)
{
if (posiciones[i][j][(z-1)-i]==k)
{
cont=cont+1;
if (cont==x)
return(k);
}
}
}

//verifica diagonal xz "/"

}
if ((y*z)==(y*y))
{
for (i=0;i<x;i++)
{
cont=0;
for (j=0;j<y;j++)
{
if (posiciones[i][j][j]==k)
{
cont=cont+1;
if (cont==y)
return(k);
}
}
}

// verifica diagonal yz "\"

for (i=0;i<x;i++)
{
cont=0;
for (j=0;j<y;j++)
{
if (posiciones[i][j][(z-1)-j]==k)
{
cont=cont+1;
if (cont==y)
return(k);
}
}
}

//verifica diagonal yz "/"

if ((z*y*z)==(x*x*x))
//verifica diagonales 3d
{
cont=0;
for (i=0;i<x;i++)
{
if (posiciones[i][i][i]==k)
{
cont=cont+1;
}
}
if (cont==x)
return(k);
cont=0;
for (i=0;i<x;i++)
{
if (posiciones[i][(y-1)-i][i]==k)
{
cont=cont+1;
}
}
if (cont==x)
return(k);
cont=0;
for (i=0;i<x;i++)
{
if (posiciones[(x-1)-i][i][i]==k)
{
cont=cont+1;
}
}
if (cont==x)
return(k);
cont=0;
for (i=0;i<x;i++)
{
if (posiciones[i][i][(z-1)-i]==k)
{
cont=cont+1;
}

}
if (cont==x)
return(k);
}
return(4);
}
/**************************************************************************
ESTA FUNCION VERIFICA SI NADIE PUEDE GANAR
***************************************************************************/
int nadie_gano(int ntiros,int x,int y,int z,int n)
{
if (ntiros==(x*y*z-n))
return(1);
else
return(0);
}
/**************************************************************************
ESTA FUNCION VERIFICA QUE LA POSICION DEL TIRO NO SE REPITA
***************************************************************************/
int tiro_repetido(int x,int y,int z)
{
if (posiciones[x-1][y-1][z-1]==3)
return(0);
else
return(1);
}
/*************************************************************************
ESTA FUNCION TRAZA EL TABLERO DEL JUEGO
**************************************************************************/
void dibuja(int x, int y, int z)
{
int dx,dy,i,j,k;
int driver,modo;
int hor,ver;
hor=150;
ver=20;
driver=DETECT;
modo=0;
initgraph(&driver,&modo,"");
setbkcolor(BLUE);
dx=340/(x+y);
dy=460/((y+2)*z);
for (k=0;k<=z-1;k++)
{
for (j=0;j<=y-1;j++)
{
hor=150+(j*dx);
for (i=0;i<=x-1;i++)
{
line(hor,ver,hor+dx,ver);
line(hor,ver,hor+dx,ver+dy);

line(hor+dx,ver,hor+2*dx,ver+dy);
line(hor+dx,ver+dy,hor+2*dx,ver+dy);
hor=hor+dx;
}
ver=ver+dy;
}
ver=ver+(3*z);
}
}

You might also like