Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/12/2012, 20:11
bigguns
 
Fecha de Ingreso: diciembre-2012
Mensajes: 7
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Codigo Otelo Proyecto

}



// fase de juego //
void juego::jugador1(bool blanco)
{
int i=0,j=0;
bool acepto=false;
char blancos=(char)2, negros=(char)1;

while (!acepto)
{
char fila='\0',columna='\0';
while (!((fila>='a')&&(fila<='h')&&(columna>='1')&&(colu mna<='8')))
{
printf("\nlos %s (%c) jugadores : ",(blanco?"blancos":"negros"),(blanco?blancos:negr os));
scanf("%c%c",&fila,&columna);
fflush(stdin);
fila=menos(fila);
}
// Convertir la fila y columna par (i, j) de enteros entre 0 y 7
i=fila-'a';
j=columna-'1';
//llama la funcion de juego::jugada()
acepto=this->jugada(blanco,i,j);
if (!acepto)
printf("Le jugada no es posible");
}
// visualizar la tabla despus de la Jugada del Jugador 1 1:
this->muestra();
}//////////////////////////////////////////////////////////////////////////////////////////
//////// verificación de las condiciones de juego para los jugadores ////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
bool juego::posible(bool blanco)
{
//bool ok;
// tomando en cuenta el jugador
int yo, el; // mi color y su color
if (blanco)
{
yo=1; //yo juego blanco
el=2; //el juega negro
}
else
{
yo=2; //yo juego negro
el=1; //el juega blanco
}

// arreglo principal
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
{
if (*(tablero+8*i+j)==0)
{
//A la derecha////////////////
int c=j+1;
while((*(tablero+8*i+c)==el) && (c<7))
c++;
if ((*(tablero+8*i+c)==yo) && (c>j+1))
return true;
//////////////////////////

//A izquierda////////////////
c=j-1;
while ((*(tablero+8*i+c)==el) && (c>0))
c--;
if ((*(tablero+8*i+c)==yo) && (c<j-1))
return true;
//////////////////////////

// abajo//////////////////
int l=i+1;
while ((*(tablero+8*l+j)==el) && (l<7))
l++;
if ((*(tablero+8*l+j)==yo) && (l>i+1))
return true;
//////////////////////////

// arriba /////////////////
l=i-1;
while ((*(tablero+8*l+j)==el) && (l>0))
l--;
if ((*(tablero+8*l+j)==yo) && (l<i-1))
return true;
//////////////////////////

//parte superior izquierda////////
int ld1=i-1;
int cd1=j-1;
while ((*(tablero+8*ld1+cd1)==el) && (ld1>0) && (cd1>0))
{
cd1--;
ld1--;
}
if ((*(tablero+8*ld1+cd1)==yo) && (cd1<j-1))
return true;
//////////////////////////

//parte superior derecha///////
int ld2=i-1;
int cd2=j+1;
while ((*(tablero+8*ld2+cd2)==el) && (ld2>0) && (cd2<7))
{
cd2++;
ld2--;
}
if ((*(tablero+8*ld2+cd2)==yo) && (cd2>j+1))
return true;
//////////////////////////

//parte inferior izquierda//////////
int ld3=i+1;
int cd3=j-1;
while ((*(tablero+8*ld3+cd3)==el) && (ld3<7) && (cd3>0))
{
cd3--;
ld3++;
}
if ((*(tablero+8*ld3+cd3)==yo) && (ld3>i+1))
return true;
///////////////////////////

//parte superior derecha//////////
int ld4=i+1;
int cd4=j+1;
while ((*(tablero+8*ld4+cd4)==el) && (ld4<7) && (cd4<7))
{
cd4++;
ld4++;
}
if ((*(tablero+8*ld4+cd4)==yo) && (ld4>i+1))
return true;
////////////////////////////
}
}
return false;
}

//////// Calcula la jugada de la computadora ////////////////////////////////////////////
int juego::jugada_PC(bool blanco)
{
int obtenido, maxobtenido=0;
int best=-1;

//tomando en cuenta el jugador
int yo, el; //mi colo y su color
if (blanco)
{
yo=1; //yo juego blanco
el=2; //el juega negro
}
else
{
yo=2; //yo juego negro
el=1; //el juega blanco
}

// arreglo principal
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
{
obtenido=0; //obteniendo su jugada : ininicializa a 0
if (*(tablero+8*i+j)==0)
{
//A la derecha////////////////
int c=j+1;
while((*(tablero+8*i+c)==el) && (c<7))
c++;
if ((*(tablero+8*i+c)==yo) && (c>j+1))
obtenido += c-j-1;
//////////////////////////

//A la izquierda////////////////
c=j-1;
while ((*(tablero+8*i+c)==el) && (c>0))
c--;
if ((*(tablero+8*i+c)==yo) && (c<j-1))
obtenido += (j-1)-c;
//////////////////////////

// abajo //////////////////
int l=i+1;
while ((*(tablero+8*l+j)==el) && (l<7))
l++;
if ((*(tablero+8*l+j)==yo) && (l>i+1))
obtenido+= l-i-1;
//////////////////////////

// arriba/////////////////
l=i-1;
while ((*(tablero+8*l+j)==el) && (l>0))
l--;
if ((*(tablero+8*l+j)==yo) && (l<i-1))
obtenido+= i-1-c;
//////////////////////////

//parte superior izquierda////////
int ld1=i-1;
int cd1=j-1;
while ((*(tablero+8*ld1+cd1)==el) && (ld1>0) && (cd1>0))
{
cd1--;
ld1--;
}
if ((*(tablero+8*ld1+cd1)==yo) && (cd1<j-1))
obtenido+= j-1-cd1;
//////////////////////////

//parte superior derecha///////
int ld2=i-1;
int cd2=j+1;
while ((*(tablero+8*ld2+cd2)==el) && (ld2>0) && (cd2<7))
{
cd2++;
ld2--;
}
if ((*(tablero+8*ld2+cd2)==yo) && (cd2>j+1))
obtenido+= cd2-j-1;
//////////////////////////

//parte inferior izquierda//////////
int ld3=i+1;
int cd3=j-1;
while ((*(tablero+8*ld3+cd3)==el) && (ld3<7) && (cd3>0))
{
cd3--;
ld3++;
}
if ((*(tablero+8*ld3+cd3)==yo) && (ld3>i+1))
obtenido+= ld3-i-1;
///////////////////////////

//parte superior derecha//////////
int ld4=i+1;
int cd4=j+1;
while ((*(tablero+8*ld4+cd4)==el) && (ld4<7) && (cd4<7))
{
cd4++;
ld4++;
}
if ((*(tablero+8*ld4+cd4)==yo) && (ld4>i+1))
obtenido+=ld4-i-1;
////////////////////////////

//es esta la mejor jugada ahora?
if (obtenido > maxobtenido)
{
maxobtenido=obtenido;
best=8*i+j;
}
}
}
return best;
}




/////////////////////////////////////////////////////////////////////////////////
// Programa principal
/////////////////////////////////////////////////////////////////////////////////
void main()
{
juego juego1;
int opc=0;
char blanco=(char)2, negro=(char)1;

//arreglo principal
do{
do
{
printf("\n\ Troyan Wars \n\ ");
printf("\n1 - Jugar contra la computadora \n\t");
printf("\n2 - jugar contra otro jugador \n\t");
printf("\n3 - historia de juego \n\t");
printf("\n4 - instruccionesciones de juego \n\t" );
printf("\n0 - Salir \n\t");
scanf("%d",&opc); fflush(stdin);
}
while ((opc!=0)&&(opc!=1)&&(opc!=2)&&(opc!=3)&&(opc!=4)) ;

switch (opc)
{
case 1: // juegar contra la computadora
{
do // color
{
printf("\n estas jugando contra la computadora \n");
printf("\n que color quieres jugar\n \n\t");
printf("1 - blancos \n \n\t2 - negros \n ");
scanf("%d",&opc);
fflush(stdin);
system ("cls");
}
while ((opc<0)||(opc>2));
if (opc==0)
break;
bool color;
switch (opc)
{
case 1: system("cls");
{ color=true; break;}
case 2: system("cls");
{ color=false; break;}
}
// procedimiento de juego
juego1.start();
int computadora;
if (color)
{
do
{
juego1.jugador1(color);
computadora=juego1.jugada_PC(!color);
if (computadora==-1)
break;
else
{
printf("\nlos %s (%c) jugadores %c%d\n",((!color)?"blancos":"negros"),((!color)?bl anco:negro),'a'+(computadora/8),computadora%8+1);
juego1.jugada(!color,computadora/8,computadora%8);
juego1.muestra();
}
if (!juego1.posible(color))
break;
}while(true);
}
else
{
do
{
computadora=juego1.jugada_PC(!color);
if (computadora==-1)
break;
else
{
printf("\nlos %s (%c) jugadores %c%d\n",(color?"negros":"blancos"),((color)?negro: blanco),'a'+(computadora/8),computadora%8+1);
juego1.jugada(!color,computadora/8,computadora%8);
juego1.muestra();
}
if (!juego1.posible(color))
break;
else
juego1.jugador1(color);

}while(true);
}
int diferente=juego1.ganador();
if (diferente==0)
printf("\n como va el juego \n");
else if ( color == (diferente>0) )
printf("\n Usted ha ganado!\n");
else
printf("\n usted ha perdido! Suerte para la proxima! \n");
break;
}
case 2: system("cls");// jugar a dos ///////////////////////////////////////////
{
juego1.start();
bool color=true; // los blancos empiezan
do //arreglo principal
{
juego1.jugador1(color); //jugador 1 empieza
color = !color; //cambiamos de jugador
}
while (juego1.posible(color));

int diferente=juego1.ganador();
if (diferente>0)
printf("\n los blancos ganan!\n");
else if (diferente<0)
printf("\nlos negros pierden!\n");
else if (diferente==0)
printf("\n esperando\n");
break;
}
/////////////////////////////////////////////////////////////
case 3: system("cls");
{ historia();
break;
}
case 4: system("cls");
{ instrucciones();
break;
}
default: // salir
{
printf("\n Proyecto Othelo programacion! \n\n");
break;
}
}
}while(opc!=0);
}