613 lines
11 KiB
C++
613 lines
11 KiB
C++
// Prog9
|
||
//
|
||
// Programadores:
|
||
//
|
||
// Juan L¢pez Fern ndez
|
||
// Mois‚s Virumbrales Cuenca
|
||
// DAI 1§A
|
||
//
|
||
// Juego de las tres en raya.
|
||
|
||
|
||
#include<stdio.h>
|
||
#include<conio.h>
|
||
|
||
int pos_x,pos_y,jfila,jcolumna;
|
||
int sw1,sw2,sw3,sw4,sw5,sw6,sw7,sw8,sw9;
|
||
int con,conaux;
|
||
int turno,turnoaux;
|
||
int lugar,tablalugar [3][3];
|
||
int ganar;
|
||
int vaciaf,vaciac;
|
||
char jugador1[8],jugador2[8];
|
||
char continua;
|
||
int limpia;
|
||
char fichaX [5][5],ficha0 [5][5];
|
||
int win1,win2;
|
||
|
||
void main()
|
||
{
|
||
|
||
// Inicializaci¢n de funciones.
|
||
|
||
char pintar(int pos_x,int pos_y, int turno, int color);
|
||
char tablero();
|
||
char borrar(int pos_y);
|
||
int comprobar(int turno);
|
||
char leerdatos();
|
||
char pantalla(char jugador1[8],char jugador2[8]);
|
||
|
||
// Inicializaci¢n de la ficha X.
|
||
fichaX [0][0]='Û';fichaX [0][4]='Û';fichaX [1][1]='Û';fichaX [1][3]='Û';
|
||
fichaX [3][1]='Û';fichaX [3][3]='Û';fichaX [4][0]='Û';fichaX [4][4]='Û';
|
||
fichaX [2][2]='Û';
|
||
// Inicializaci¢n de la ficha 0.
|
||
ficha0 [0][2]='Û';ficha0 [1][1]='Û';ficha0 [1][3]='Û';ficha0 [2][0]='Û';
|
||
ficha0 [2][4]='Û';ficha0 [3][1]='Û';ficha0 [3][3]='Û';ficha0 [4][2]='Û';
|
||
// Introducci¢n de datos
|
||
|
||
leerdatos();
|
||
do
|
||
{
|
||
|
||
// Pantalla general
|
||
if (continua!='s')
|
||
{
|
||
pantalla(jugador1,jugador2);
|
||
}
|
||
tablero();
|
||
if (turno==1 && continua=='s')
|
||
{
|
||
if (ganar==1)
|
||
{
|
||
win1++;
|
||
gotoxy (17,2);
|
||
printf ("Partidas ganadas: %d",win1);
|
||
}
|
||
turno=2;
|
||
borrar(24);
|
||
textcolor (7);
|
||
gotoxy (17,24);
|
||
cprintf ("Es el turno de ");
|
||
textcolor(2+BLINK);
|
||
cprintf ("%s",jugador2);
|
||
}
|
||
else
|
||
{
|
||
if (turno==2 && continua=='s')
|
||
{
|
||
if (ganar==2)
|
||
{
|
||
win2++;
|
||
gotoxy (45,2);
|
||
printf ("Partidas ganadas: %d",win2);
|
||
}
|
||
turno=1;
|
||
borrar(24);
|
||
textcolor (7);
|
||
gotoxy (17,24);
|
||
cprintf ("Es el turno de ");
|
||
textcolor(14+BLINK);
|
||
cprintf ("%s",jugador1);
|
||
}
|
||
}
|
||
// El programa.
|
||
|
||
for (vaciaf=0;vaciaf<3;vaciaf++)
|
||
{
|
||
for (vaciac=0;vaciac<3;vaciac++)
|
||
{
|
||
tablalugar[vaciaf][vaciac]=0;
|
||
}
|
||
}
|
||
sw1=0;sw2=0;sw3=0;sw4=0;sw5=0;sw6=0;sw7=0;sw8=0;sw9=0;
|
||
conaux=1;
|
||
lugar=0;
|
||
for (con=1,ganar=0;con<=9;con++)
|
||
{
|
||
con=conaux;
|
||
gotoxy (79,25);
|
||
fflush(stdin);
|
||
textcolor(0);
|
||
cscanf("%1d",&lugar);
|
||
|
||
if (lugar==1 && sw1==0)
|
||
{
|
||
pos_x=22;pos_y=17;
|
||
sw1=1;
|
||
if (turno==1)
|
||
{
|
||
tablalugar [0][2]=1;
|
||
}
|
||
else
|
||
{
|
||
tablalugar [0][2]=2;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (lugar==2 && sw2==0)
|
||
{
|
||
pos_x=38;pos_y=17;
|
||
sw2=1;
|
||
if (turno==1)
|
||
{
|
||
tablalugar [1][2]=1;
|
||
}
|
||
else
|
||
{
|
||
tablalugar [1][2]=2;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (lugar==3 && sw3==0)
|
||
{
|
||
pos_x=54;pos_y=17;
|
||
sw3=1;
|
||
if (turno==1)
|
||
{
|
||
tablalugar [2][2]=1;
|
||
}
|
||
else
|
||
{
|
||
tablalugar [2][2]=2;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (lugar==4 && sw4==0)
|
||
{
|
||
pos_x=22;pos_y=11;
|
||
sw4=1;
|
||
if (turno==1)
|
||
{
|
||
tablalugar [0][1]=1;
|
||
}
|
||
else
|
||
{
|
||
tablalugar [0][1]=2;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (lugar==5 && sw5==0)
|
||
{
|
||
pos_x=38;pos_y=11;
|
||
sw5=1;
|
||
if (turno==1)
|
||
{
|
||
tablalugar [1][1]=1;
|
||
}
|
||
else
|
||
{
|
||
tablalugar [1][1]=2;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (lugar==6 && sw6==0)
|
||
{
|
||
pos_x=54;pos_y=11;
|
||
sw6=1;
|
||
if (turno==1)
|
||
{
|
||
tablalugar [2][1]=1;
|
||
}
|
||
else
|
||
{
|
||
tablalugar [2][1]=2;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (lugar==7 && sw7==0)
|
||
{
|
||
pos_x=22;pos_y=5;
|
||
sw7=1;
|
||
if (turno==1)
|
||
{
|
||
tablalugar [0][0]=1;
|
||
}
|
||
else
|
||
{
|
||
tablalugar [0][0]=2;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (lugar==8 && sw8==0)
|
||
{
|
||
pos_x=38;pos_y=5;
|
||
sw8=1;
|
||
if (turno==1)
|
||
{
|
||
tablalugar [1][0]=1;
|
||
}
|
||
else
|
||
{
|
||
tablalugar [1][0]=2;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (lugar==9 && sw9==0)
|
||
{
|
||
pos_x=54;pos_y=5;
|
||
sw9=1;
|
||
if (turno==1)
|
||
{
|
||
tablalugar [2][0]=1;
|
||
}
|
||
else
|
||
{
|
||
tablalugar [2][0]=2;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
borrar (24);
|
||
textcolor (7);
|
||
gotoxy (17,24);
|
||
cprintf ("Esa casilla est ocupada, pierde turno.");
|
||
fflush (stdin);
|
||
getch();
|
||
conaux=con;
|
||
turnoaux=turno;
|
||
turno=0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
comprobar(turno);
|
||
|
||
|
||
|
||
// Pintar la ficha correspondiente.
|
||
|
||
if (turno==1 && ganar==0)
|
||
{
|
||
pintar(pos_x,pos_y,turno,14);
|
||
}
|
||
else
|
||
{
|
||
if (turno==2 && ganar==0)
|
||
{
|
||
pintar(pos_x,pos_y,turno,2);
|
||
}
|
||
}
|
||
// Siguiente turno.
|
||
|
||
if (turno==2 && con!=9 && ganar==0)
|
||
{
|
||
borrar(24);
|
||
textcolor (7);
|
||
gotoxy (17,24);
|
||
cprintf ("Es el turno de ");
|
||
textcolor(14+BLINK);
|
||
cprintf ("%s",jugador1);
|
||
turno=1;
|
||
conaux++;
|
||
}
|
||
else
|
||
{
|
||
if (turno==1 && con!=9 && ganar==0)
|
||
{
|
||
borrar(24);
|
||
textcolor (7);
|
||
gotoxy (17,24);
|
||
cprintf ("Es el turno de ");
|
||
textcolor(2+BLINK);
|
||
cprintf ("%s",jugador2);
|
||
turno=2;
|
||
conaux++;
|
||
}
|
||
else
|
||
{
|
||
if (turnoaux==2 && con!=9 && ganar==0)
|
||
{
|
||
borrar(24);
|
||
textcolor (7);
|
||
gotoxy (17,24);
|
||
cprintf ("Es el turno de ");
|
||
textcolor(14+BLINK);
|
||
cprintf ("%s",jugador1);
|
||
turno=1;
|
||
}
|
||
else
|
||
{
|
||
if (turnoaux==1 && con!=9 && ganar==0)
|
||
{
|
||
borrar(24);
|
||
textcolor (7);
|
||
gotoxy (17,24);
|
||
cprintf ("Es el turno de ");
|
||
textcolor(2+BLINK);
|
||
cprintf ("%s",jugador2);
|
||
turno=2;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (con==9 && ganar==0)
|
||
{
|
||
borrar(24);
|
||
gotoxy (17,24);
|
||
textcolor(7);
|
||
cprintf ("Partida finalizada.");
|
||
fflush(stdin);
|
||
getch();
|
||
}
|
||
if (ganar==1)
|
||
{
|
||
borrar(24);
|
||
gotoxy (17,24);
|
||
textcolor (14+BLINK);
|
||
cprintf (" Ha ganado %s !!",jugador1);
|
||
con=10;
|
||
fflush (stdin);
|
||
getch();
|
||
}
|
||
else
|
||
{
|
||
if (ganar==2)
|
||
{
|
||
borrar(24);
|
||
gotoxy (17,24);
|
||
textcolor (10+BLINK);
|
||
cprintf (" Ha ganado %s !!",jugador2);
|
||
con=10;
|
||
fflush (stdin);
|
||
getch();
|
||
}
|
||
}
|
||
}
|
||
borrar(24);
|
||
gotoxy (17,24);
|
||
textcolor(7);
|
||
cprintf ("¨Desea jugar otra vez? ");
|
||
fflush(stdin);
|
||
cscanf ("%s",&continua);
|
||
}
|
||
while (continua!='n');
|
||
fflush (stdin);
|
||
getch();
|
||
clrscr();
|
||
textcolor (7);
|
||
}
|
||
|
||
// Funci¢n pintar
|
||
|
||
char pintar(int pos_x,int pos_y,int turno,int color)
|
||
{
|
||
for (jfila=0;jfila<=4;jfila++)
|
||
{
|
||
for (jcolumna=0;jcolumna<=4;jcolumna++)
|
||
{
|
||
gotoxy (jcolumna+pos_x,jfila+pos_y);
|
||
if (turno==1)
|
||
{
|
||
if (fichaX[jfila][jcolumna]=='Û')
|
||
{
|
||
textcolor (color);
|
||
cprintf ("%c",fichaX[jfila][jcolumna]);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (turno==2)
|
||
{
|
||
if (ficha0[jfila][jcolumna]=='Û')
|
||
{
|
||
textcolor (color);
|
||
cprintf ("%c",ficha0[jfila][jcolumna]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
return(0);
|
||
}
|
||
|
||
// Funci¢n tablero
|
||
|
||
char tablero()
|
||
{
|
||
// Fondo tablero.
|
||
for (pos_x=15,pos_y=4;pos_y<=22;)
|
||
{
|
||
textcolor(7);
|
||
gotoxy(pos_x,pos_y);
|
||
cprintf("Û");
|
||
if (pos_x!=65)
|
||
{
|
||
pos_x++;
|
||
}
|
||
else
|
||
{
|
||
pos_x=15;
|
||
pos_y++;
|
||
}
|
||
}
|
||
// Recuadro tablero y lineas interior.
|
||
for (pos_x=15;pos_x<=65;pos_x++)
|
||
{
|
||
textcolor (1);
|
||
gotoxy (pos_x,4);cprintf ("Û");
|
||
gotoxy (pos_x,22);cprintf ("Û");
|
||
gotoxy (pos_x,10);cprintf ("Û");
|
||
gotoxy (pos_x,16);cprintf ("Û");
|
||
}
|
||
for (pos_y=4;pos_y<=22;pos_y++)
|
||
{
|
||
textcolor (1);
|
||
gotoxy (15,pos_y);cprintf ("Û");
|
||
gotoxy (16,pos_y);cprintf ("Û");
|
||
gotoxy (65,pos_y);cprintf ("Û");
|
||
gotoxy (64,pos_y);cprintf ("Û");
|
||
gotoxy (32,pos_y);cprintf ("Û");
|
||
gotoxy (48,pos_y);cprintf ("Û");
|
||
}
|
||
|
||
return(0);
|
||
}
|
||
|
||
// Borrador de l¡nea
|
||
char borrar(int pos_y)
|
||
{
|
||
for (limpia=1;limpia<=80;limpia++)
|
||
{
|
||
gotoxy (limpia,pos_y);
|
||
textcolor (0);
|
||
cprintf ("Û");
|
||
}
|
||
return (0);
|
||
}
|
||
|
||
// Comprobaci¢n de tres en raya
|
||
|
||
int comprobar(int turno)
|
||
{
|
||
if (turno!=0)
|
||
{
|
||
if (tablalugar[0][0]==turno)
|
||
{
|
||
if (tablalugar[1][0]==turno)
|
||
{
|
||
if (tablalugar[2][0]==turno)
|
||
{
|
||
ganar=turno;
|
||
pintar(22,5,turno,4+BLINK);pintar(38,5,turno,4+BLINK);
|
||
pintar(54,5,turno,4+BLINK);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (tablalugar[1][1]==turno)
|
||
{
|
||
if (tablalugar[2][2]==turno)
|
||
{
|
||
ganar=turno;
|
||
pintar(22,5,turno,4+BLINK);pintar(38,11,turno,4+BLINK);
|
||
pintar(54,17,turno,4+BLINK);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (tablalugar[0][1]==turno)
|
||
{
|
||
if (tablalugar[0][2]==turno)
|
||
{
|
||
ganar=turno;
|
||
pintar(22,5,turno,4+BLINK);pintar(22,11,turno,4+BLINK);
|
||
pintar(22,17,turno,4+BLINK);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (tablalugar[2][0]==turno)
|
||
{
|
||
if (tablalugar[2][1]==turno)
|
||
{
|
||
if (tablalugar[2][2]==turno)
|
||
{
|
||
ganar=turno;
|
||
pintar(54,5,turno,4+BLINK);pintar(54,11,turno,4+BLINK);
|
||
pintar(54,17,turno,4+BLINK);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (tablalugar[1][1]==turno)
|
||
{
|
||
if (tablalugar[0][2]==turno)
|
||
{
|
||
ganar=turno;
|
||
pintar(54,5,turno,4+BLINK);pintar(38,11,turno,4+BLINK);
|
||
pintar(22,17,turno,4+BLINK);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (tablalugar[2][2]==turno)
|
||
{
|
||
if (tablalugar[1][2]==turno)
|
||
{
|
||
if (tablalugar[0][2]==turno)
|
||
{
|
||
ganar=turno;
|
||
pintar(22,17,turno,4+BLINK);pintar(38,17,turno,4+BLINK);
|
||
pintar(54,17,turno,4+BLINK);
|
||
}
|
||
}
|
||
}
|
||
if (tablalugar[1][0]==turno)
|
||
{
|
||
if (tablalugar[1][1]==turno)
|
||
{
|
||
if (tablalugar[1][2]==turno)
|
||
{
|
||
ganar=turno;
|
||
pintar(38,5,turno,4+BLINK);pintar(38,11,turno,4+BLINK);
|
||
pintar(38,17,turno,4+BLINK);
|
||
}
|
||
}
|
||
}
|
||
if (tablalugar[0][1]==turno)
|
||
{
|
||
if (tablalugar[1][1]==turno)
|
||
{
|
||
if (tablalugar[2][1]==turno)
|
||
{
|
||
ganar=turno;
|
||
pintar(22,11,turno,4+BLINK);pintar(38,11,turno,4+BLINK);
|
||
pintar(54,11,turno,4+BLINK);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return(ganar);
|
||
}
|
||
|
||
// Datos
|
||
|
||
char leerdatos()
|
||
{
|
||
clrscr();
|
||
textcolor(7);
|
||
gotoxy (20,11);
|
||
cprintf ("Nombre jugador 1: ");
|
||
fflush(stdin);
|
||
cscanf("%8s",&jugador1);
|
||
gotoxy (20,13);
|
||
cprintf ("Nombre jugador 2: ");
|
||
fflush(stdin);
|
||
cscanf("%8s",&jugador2);
|
||
return (jugador1[8],jugador2[8]);
|
||
}
|
||
|
||
// Pantalla general
|
||
|
||
char pantalla(char jugador1[8],char jugador2[8])
|
||
{
|
||
clrscr();
|
||
gotoxy (17,1);
|
||
textcolor(14);
|
||
cprintf ("X ");textcolor (7);cprintf ("-> %s",jugador1);
|
||
gotoxy (53,1);
|
||
textcolor (2);
|
||
cprintf ("O ");textcolor (7);cprintf ("-> %s",jugador2);
|
||
gotoxy (17,24);
|
||
printf ("Es el turno de ");
|
||
textcolor(14+BLINK);
|
||
cprintf ("%s",jugador1);
|
||
turno=1;
|
||
return(turno);
|
||
} |