250 lines
5.3 KiB
C++
250 lines
5.3 KiB
C++
/////////////////////////////////TRES EN RALLA////////////////////////////////
|
|
#include<graphics.h>
|
|
#include<stdio.h>
|
|
#include<conio.h>
|
|
#include<stdlib.h>
|
|
#include<dos.h>
|
|
|
|
|
|
extern unsigned _stklen = 4096;
|
|
///////////////////////////DECLARACION DE FUNCIONES///////////////////////////
|
|
void jugador1(int array[3][3]);
|
|
void jugador2(int array[3][3]);
|
|
void ordenador(int array[3][3],char opcion);
|
|
void dibujamalla();
|
|
int comprobacion(int array[3][3]);
|
|
char menu();
|
|
|
|
//////////////////////////////FUNCION PRINCIPAL///////////////////////////////
|
|
void main()
|
|
{
|
|
char opcion;
|
|
int array[3][3];
|
|
int x,y,a=0,c=0;
|
|
int gdriver=DETECT,gmode;
|
|
initgraph(&gdriver,&gmode,"c:\\program\\borlandc\\bgi");
|
|
clearviewport();
|
|
//INICIALIZACION DE ARRAY
|
|
for(x=0;x<3;x++)
|
|
for(y=0;y<3;y++)
|
|
array[x][y]=0;
|
|
////////////////////////////////JUEGO PRINCIPAL///////////////////////////////
|
|
opcion=menu();
|
|
dibujamalla();
|
|
while(a==0&&c<5)
|
|
{
|
|
if(opcion=='1')
|
|
{
|
|
jugador1(array);
|
|
if(c!=4) jugador2(array);
|
|
a=comprobacion(array);
|
|
c++;
|
|
}
|
|
else
|
|
{
|
|
jugador1(array);
|
|
if(c!=4) ordenador(array,opcion);
|
|
a=comprobacion(array);
|
|
c++;
|
|
}
|
|
}
|
|
///////////////////////////////RESULTADO FINAL////////////////////////////////
|
|
setcolor(2);
|
|
if(a==0) outtextxy(310,400,"EMPATAMOS");
|
|
if(a==1) outtextxy(270,400,"GANAS TU:MATI WOMAN");
|
|
if(a==2) outtextxy(270,400,"GANO YO:OSCAR COMPUTER");
|
|
getch();
|
|
closegraph();
|
|
}
|
|
|
|
////////////////////////////////////MENU//////////////////////////////////////
|
|
char menu()
|
|
{
|
|
char o='0';
|
|
outtextxy(230,230,"1.-DOS JUGADORES");
|
|
outtextxy(230,250,"2.-CONTRA EL ORDENADOR");
|
|
while(o!='1'&&o!='2')
|
|
{
|
|
o=getch();
|
|
}
|
|
clearviewport();
|
|
if(o=='2')
|
|
{
|
|
o='0';
|
|
outtextxy(230,230,"1.-NIVEL APLATANADO");
|
|
outtextxy(230,250,"2.-NIVEL ENCABRONAO");
|
|
while(o!='1'&&o!='2')
|
|
{
|
|
o=getch();
|
|
}
|
|
if(o=='1') o='3'; else o='4';
|
|
}
|
|
clearviewport();
|
|
return o;
|
|
}
|
|
|
|
//////////////////////COMPROBACION DEL TRES EN RALLA//////////////////////////
|
|
int comprobacion(int array[3][3])
|
|
|
|
{
|
|
int x,y,w=0,suma=0,suma1=0,suma2=0,suma3=0;
|
|
|
|
//////////////////LECTURA DEL ARRAY HORIZONTAL Y VERTICAL/////////////////////
|
|
for(x=0;x<3;x++)
|
|
{
|
|
for(y=0;y<3;y++)
|
|
{
|
|
if(array[x][y]==1) suma++;
|
|
if(array[x][y]==2) suma1++;
|
|
if(array[y][x]==1) suma2++;
|
|
if(array[y][x]==2) suma3++;
|
|
}
|
|
if(suma==3||suma2==3) w=1;
|
|
if(suma1==3||suma3==3) w=2;
|
|
suma=0;suma1=0;suma2=0;suma3=0;
|
|
}
|
|
|
|
//////////////////////LECTURA DEL ARRAY DIAGONAL//////////////////////////////
|
|
suma=0;suma1=0;suma2=0;suma3=0;
|
|
for(x=0;x<3;x++)
|
|
{
|
|
if(array[x][x]==1) suma++;
|
|
if(array[x][x]==2) suma1++;
|
|
if(array[2-x][x]==1) suma2++;
|
|
if(array[2-x][x]==2) suma3++;
|
|
|
|
}
|
|
if(suma==3||suma2==3) w=1;
|
|
if(suma1==3||suma3==3) w=2;
|
|
|
|
////////////////VALOR DEVUELTO DEL ANALISIS DEL ARRAY/////////////////////////
|
|
return w;
|
|
}
|
|
|
|
////////////////////////////////DIBUJA MALLA//////////////////////////////////
|
|
void dibujamalla()
|
|
{
|
|
int x,y;
|
|
setcolor(15);
|
|
for(x=300;x<400;x+=30)
|
|
{
|
|
y=150;
|
|
line(x,y,x,y+200);
|
|
line(y+100,x-100,y+290,x-100);
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////JUGADOR1/////////////////////////////////////
|
|
void jugador1(int array[3][3])
|
|
{
|
|
int a,b;
|
|
//JUEGAS TU
|
|
outtextxy(1,1,"Introduce coordenada[x,y]:");
|
|
gotoxy(27,1);
|
|
scanf("%i,%i",&a,&b);
|
|
gotoxy(27,1);
|
|
printf(" ");
|
|
while(a<1||a>3||b<1||b>3||array[a-1][b-1]!=0)
|
|
{
|
|
outtextxy(200,400,"Introduzca coordenada correcta(pulsa tecla)");
|
|
getch();
|
|
setcolor(0);
|
|
outtextxy(200,400,"Introduzca coordenada correcta(pulsa tecla)");
|
|
gotoxy(27,1);
|
|
scanf("%i,%i",&a,&b);
|
|
gotoxy(27,1);
|
|
printf(" ");
|
|
}
|
|
array[a-1][b-1]=1;
|
|
setcolor(5);
|
|
circle(315+((a-1)*30),215+((b-1)*30),10);
|
|
}
|
|
|
|
/////////////////////////////////JUGADOR2/////////////////////////////////////
|
|
void jugador2(int array[3][3])
|
|
{
|
|
int a,b;
|
|
//JUEGAS TU
|
|
outtextxy(1,1,"Introduce coordenada[x,y]:");
|
|
gotoxy(27,1);
|
|
scanf("%i,%i",&a,&b);
|
|
gotoxy(27,1);
|
|
printf(" ");
|
|
while(a<1||a>3||b<1||b>3||array[a-1][b-1]!=0)
|
|
{
|
|
outtextxy(200,400,"Introduzca coordenada correcta(pulsa tecla)");
|
|
getch();
|
|
setcolor(0);
|
|
outtextxy(200,400,"Introduzca coordenada correcta(pulsa tecla)");
|
|
gotoxy(27,1);
|
|
scanf("%i,%i",&a,&b);
|
|
gotoxy(27,1);
|
|
printf(" ");
|
|
}
|
|
array[a-1][b-1]=2;
|
|
setcolor(3);
|
|
circle(315+((a-1)*30),215+((b-1)*30),10);
|
|
}
|
|
|
|
/////////////////////////////////ORDENADOR/////////////////////////////////////
|
|
void ordenador(int array[3][3],char opcion)
|
|
{
|
|
int a,b,x=-1,y=-1,r=-1,caso[4]={0,0,0,0},fin=0;
|
|
int suma=0,suma1=0,suma2=0,suma3=0;
|
|
//JUEGA EL ORDENADOR
|
|
if(opcion=='3')
|
|
//LECTURA DEL ARRAY
|
|
{
|
|
for(a=0;a<3;a++)
|
|
{
|
|
for(b=0;b<3;b++)
|
|
{
|
|
if(array[a][b]==1) suma++;//VERTICAL
|
|
if(suma==2) {caso[0]=1;r=a;}
|
|
if(array[b][a]==1) suma1++;//HORIZONTAL
|
|
if(suma1==2) {caso[1]=1;r=a;}
|
|
}
|
|
if(array[a][a]==1) suma2++;//DIAGONAL
|
|
if(suma2==2) caso[2]=1;
|
|
if(array[2-a][a]==1) suma3++;//DIAGONAL INVERSA
|
|
if(suma3==2) caso[3]=1;
|
|
if(suma!=3&&suma1!=3&&suma2!=3&&suma3!=3)
|
|
{suma=0;suma1=0;}
|
|
else fin=1;
|
|
}
|
|
if(caso[0]==1)
|
|
{
|
|
for(a=0;a<3;a++)
|
|
if(array[r][a]==0) {y=a;x=r;}
|
|
}
|
|
if(caso[1]==1&&(x==-1||y==-1))
|
|
{
|
|
for(a=0;a<3;a++)
|
|
if(array[a][r]==0) {x=a;y=r;}
|
|
}
|
|
if(caso[2]==1&&(x==-1||y==-1))
|
|
{
|
|
for(a=0;a<3;a++)
|
|
if(array[a][a]==0) {x=a;y=x;}
|
|
}
|
|
if(caso[3]==1&&(x==-1||y==-1))
|
|
{
|
|
for(a=0;a<3;a++)
|
|
if(array[2-a][a]==0) {y=a;x=2-y;}
|
|
}
|
|
}
|
|
if(x==-1||y==-1)
|
|
{
|
|
for(a=0;a<3;a++)
|
|
for(b=0;b<3;b++)
|
|
if(array[a][b]==0) {x=a;y=b;}
|
|
}
|
|
//da valores
|
|
if(fin!=1||(x==-1)&&(y==-1))
|
|
{
|
|
array[x][y]=2;
|
|
setcolor(3);
|
|
circle(315+(x*30),215+(y*30),10);
|
|
}
|
|
}
|