00:00
00:00
ORHX
No el mejor usuario de este sitio web
Pyro W+M1 por siempre
free(NULL);
Todos ponen BI en sus descripciones, pero que pasaria si hubiera 5/2 generos? O √10 generos? O incluso una cantidad compleja de generos 6+i9? Jaquemate progres.

Robertototototototototototototototototototototototototototototototototototototototototo Higgs Xavier @ORHX

Pelotudo pero no tanto

Soy vago

E=mc^2

La Pampa, Calchin Oeste,

Joined on 1/17/21

Level:
22
Exp Points:
4,932 / 5,380
Exp Rank:
9,658
Vote Power:
6.34 votes
Rank:
Police Officer
Global Rank:
18,433
Blams:
247
Saves:
295
B/P Bonus:
10%
Whistle:
Normal
Medals:
40
Supporter:
1m

Programe Ajedrez en C++

Posted by ORHX - October 28th, 2021


Se que a nadie le interesa esto, pero es mi cuenta y publico lo que se me cante

Programe Ajedrez en C++

A ver, deberia conseguir un motor grafico, programar una IA que juegue contra ti, cambiar el programa casa la mitad para que funcione con mouse, y probablemente agrege fichas que nunca se hallan visto,blablabla

Pueden descargarlo en este archivo drive o copiarlo de este post, y por si se lo prenguntan, si, tengo pensado crear juegos y subirlos aqui

Ah, y cualquier recomendacion o error que encuentren me lo dicen ok?

Ahora si, aqui esta el (desastre de) codigo:

#include<iostream>

#include<stdlib.h>

using namespace std;

char tabla[8][8];//nos servira para la ubicacion de las fichas

char f_elims[7][2];//fichas eliminadas

bool comprobarpos(int,int,int,int,int);//necesaria para el movimiento

int cambiarcolpos(int,int);

int cambiarcol(int);

bool buscar(int,int,int,bool);//elimina las fichas

bool moverf(int &,int &,int &,bool &,int,int);//mueve las fichas

bool moverf_c(int &,int &,int &,bool &,int,int);//movimiento para el caballo

int moverf_c_v(int);

bool moverf_r(int &,int &,int &,bool &,int,int);//para el rey

int cambiarv(int);

class ficha{

public:

int color;

int px;//posicion vertical

int py;//posicion horizontal

bool elim;//eliminado o no

ficha(int,int,int,bool);

};

ficha::ficha(int _color,int _px,int _py,bool _elim){

color=_color;

px=_px;

py=_py;

elim=_elim;

}

class torre:public ficha{

public:

char sim;

  torre(int,int,int,bool,char);

  bool mostrarop(int);

  bool movert();

};

torre::torre(int _color,int _px,int _py,bool _elim,char _sim):ficha(_color,_px,_py,_elim){

sim=_sim;

}

bool torre::mostrarop(int n){

int op;

 bool romper=false;

 do{

  cout<<"Opciones para la torre "<<n<<":\n1-Comer y/o mover torre\n2-Volver atras\nElija una opcion:\n";

  cin>>op;

  switch(op){

   case 1:romper=movert();break;

   case 2:return false;

   default:cout<<"No ha ingresado una opcion correcta\n";

  }

 }while((op<1)||(op>2));

 return romper;

}

bool torre::movert(){//las funciones en cada ficha son practicamente las mismas

 int op,op2;

 while(true){

  cout<<"Seleccione de que lado se desea mover(1 hacia arriba,2 hacia la derecha,3 hacia abajo,4 hacia la izquierda) o ingrese 0 para salir: ";cin>>op;

  if(op==0)return false;

  if((op<1)||(op>4)){

  cout<<"Opcion incorrecta. Intentelo de nuevo\n";

}else break;

 }

 while(true){

  cout<<"Ingrese la cantidad de casillas que se desea mover, o ingrese 0 para salir: ";cin>>op2;

  if(op2==0)return false;

  if((op2<0)||(op2>7)){

   cout<<"Movimiento ilegal. Intentelo de nuevo\n";

  }else{

   switch(op){

    case 1:return moverf(color,px,py,elim,op2,0);break;

case 2:return moverf(color,px,py,elim,0,op2);break;

case 3:return moverf(color,px,py,elim,0-op2,0);break;

case 4:return moverf(color,px,py,elim,0,0-op2);break;

}

  }

 }

}

torre *t[4];//prefiero declararlas globalmente para su uso en otras funciones

class alfil:public ficha{

public:

char sim;

alfil(int,int,int,bool,char);

bool mostrarop(int);

bool movera();

};

alfil::alfil(int _color,int _px,int _py,bool _elim,char _sim):ficha(_color,_px,_py,_elim){

sim=_sim;

}

bool alfil::mostrarop(int n){

 int op;

 bool romper=false;

 while(true){

  cout<<"Opciones para el alfil "<<n<<":\n1-Comer y/o mover alfil\n2-Volver atras\nElija una opcion:\n";cin>>op;

  switch(op){

   case 1:romper=movera();break;

   case 2:return false;

   default:cout<<"No ha ingresado una opcion correcta\n";

  }

  if(op==1)break;

 }

 return romper;

}

bool alfil::movera(){

int op,op2;

while(true){

cout<<"Ingrese 1 para moverse hacia arriba a la derecha, 2 para arriba a la izquierda, 3 para abajo a la izquierda, 4 para abajo a la derecha, o 0 para salir:\n";cin>>op;

if(op==0){

return false;

}

if((op<1)||(op>4)){

cout<<"No ha seleccionado una opcion posible.\n";

}else{

while(true){

cout<<"Elija cuantas casillas se desea mover, o seleccione 0 para salir:\n";cin>>op2;if(op2==0)return false;

switch(op){

case 1:return moverf(color,px,py,elim,op2,op2);break;

case 2:return moverf(color,px,py,elim,op2,0-op2);break;

case 3:return moverf(color,px,py,elim,0-op2,0-op2);break;

case 4:return moverf(color,px,py,elim,0-op2,op2);break;

}

}

}

}

}

alfil *a[4];

class caballo:public ficha{

public:

char sim;

caballo(int,int,int,bool,char);

bool mostrarop(int);

bool moverc();

};

caballo::caballo(int _color,int _px,int _py,bool _elim,char _sim):ficha(_color,_px,_py,_elim){

sim=_sim;

}

bool caballo::mostrarop(int n){

int op;

 bool romper=false;

 do{

  cout<<"Opciones para el caballo "<<n<<":\n1-Comer y/o mover caballo\n2-Volver atras\nElija una opcion:\n";

  cin>>op;

  switch(op){

   case 1:romper=moverc();break;

   case 2:return false;

   default:cout<<"No ha ingresado una opcion correcta\n";

  }

 }while((op<1)||(op>2));

 return romper;

}

bool caballo::moverc(){

int op,op2;

while(true){

cout<<"Ingrese 1 para moverse hacia arriba, 2 hacia la derecha, 3 para abajo, 4 para la izquierda, o 0 para salir:\n";cin>>op;

if(op==0){

return false;

}

if((op<1)||(op>4)){

cout<<"No ha seleccionado una opcion posible.\n";

}else{

while(true){

switch(op){

case 1:cout<<"Seleccione 1 para moverse a la izquierda, 2 para la derecha o 0 para salir: ";cin>>op2;return moverf_c(color,px,py,elim,2,moverf_c_v(op2));

case 2:cout<<"Seleccione 1 para moverse hacia arriba, 2 hacia abajo o 0 para salir: ";cin>>op2;return moverf_c(color,px,py,elim,moverf_c_v(op2),2);

case 3:cout<<"Seleccione 1 para moverse a la izquierda, 2 para la derecha o 0 para salir: ";cin>>op2;return moverf_c(color,px,py,elim,-2,moverf_c_v(op2));

case 4:cout<<"Seleccione 1 para moverse hacia arriba, 2 hacia abajo o 0 para salir: ";cin>>op2;return moverf_c(color,px,py,elim,moverf_c_v(op2),-2);

}

}

}

}

}

caballo *c[4];

class dama:public ficha{

public:

char sim;

dama(int,int,int,bool,char);

bool mostrarop(int);

bool moverd();

};

dama::dama(int _color,int _px,int _py,bool _elim,char _sim):ficha(_color,_px,_py,_elim){

sim=_sim;

}

bool dama::mostrarop(int n){

int op;

 bool romper=false;

 do{

  cout<<"Opciones para la dama "<<n<<":\n1-Comer y/o mover dama\n2-Volver atras\nElija una opcion:\n";

  cin>>op;

  switch(op){

   case 1:romper=moverd();break;

   case 2:return false;

   default:cout<<"No ha ingresado una opcion correcta\n";

  }

 }while((op<1)||(op>2));

 return romper;

}

bool dama::moverd(){

int op,op2;

while(true){

cout<<"Ingrese 1 para moverse hacia arriba, 2 para arriba a la der, 3 hacia la der, 4 para abajo a la der, 5 hacia abajo, 6 hacia abajo a la izq, 7 hacia la izq, 8 hacia arriba a la izq, o 0 para salir:\n";cin>>op;

if(op==0){

return false;

}

if((op<1)||(op>8)){

cout<<"No ha seleccionado una opcion posible.\n";

}else{

while(true){

cout<<"Elija cuantas casillas se desea mover, o seleccione 0 para salir:\n";cin>>op2;if(op2==0)return false;

switch(op){

case 1:return moverf(color,px,py,elim,op2,0);break;

case 2:return moverf(color,px,py,elim,op2,op2);break;

case 3:return moverf(color,px,py,elim,0,op2);break;

case 4:return moverf(color,px,py,elim,0-op2,op2);break;

case 5:return moverf(color,px,py,elim,0-op2,0);break;

case 6:return moverf(color,px,py,elim,0-op2,0-op2);break;

case 7:return moverf(color,px,py,elim,0,0-op2);break;

case 8:return moverf(color,px,py,elim,op2,0-op2);break;

}

}

}

}

}

dama *d[2];

class rey:public ficha{

public:

char sim;

rey(int,int,int,bool,char);

bool mostrarop(int);

bool moverr();

};

rey::rey(int _color,int _px,int _py,bool _elim,char _sim):ficha(_color,_px,_py,_elim){

sim=_sim;

}

bool rey::mostrarop(int n){

int op;

 bool romper=false;

 do{

  cout<<"Opciones para el rey "<<n<<":\n1-Comer y/o mover rey\n2-Volver atras\nElija una opcion:\n";

  cin>>op;

  switch(op){

   case 1:romper=moverr();break;

   case 2:return false;

   default:cout<<"No ha ingresado una opcion correcta\n";

  }

 }while((op<1)||(op>2));

 return romper;

}

bool rey::moverr(){

int op,op2;

while(true){

cout<<"Ingrese 1 para moverse hacia arriba, 2 para arriba a la der, 3 hacia la der, 4 para abajo a la der, 5 hacia abajo, 6 hacia abajo a la izq, 7 hacia la izq, 8 hacia arriba a la izq, o 0 para salir:\n";cin>>op;

if(op==0){

return false;

}

if((op<1)||(op>8)){

cout<<"No ha seleccionado una opcion posible.\n";

}else{

while(true){

switch(op){

case 1:return moverf(color,px,py,elim,1,0);

case 2:return moverf(color,px,py,elim,1,1);

case 3:return moverf(color,px,py,elim,0,1);

case 4:return moverf(color,px,py,elim,-1,1);

case 5:return moverf(color,px,py,elim,-1,0);

case 6:return moverf(color,px,py,elim,-1,-1);

case 7:return moverf(color,px,py,elim,0,-1);

case 8:return moverf(color,px,py,elim,1,-1);

}

}

}

}

}

rey *r[2];

class peon:public ficha{//posiblemente la ficha peor programada

 public:

  char sim;

  bool movido;

  peon(int,int,int,bool,char,bool);

  bool mostrarop(int);

  bool movpe();

  bool movpeon();

  bool comerpe();

  bool cambiarf();

};

peon::peon(int _color,int _px,int _py,bool _elim,char _sim,bool _movido):ficha(_color,_px,_py,_elim){

 sim=_sim;

 movido=_movido;

}

bool peon::mostrarop(int n){

 int op;

 bool romper=false;

 do{

  cout<<"Opciones para el peon "<<n<<":\n1-Mover peon 1 espacio hacia delante\n2-Comer una ficha\n";

  if(movido==false){

   cout<<"3-Mover dos casillas\n";

  }

  if((color==0)&&(px==7)){

  cout<<"4-Volver atras\n5-Cambiar peon por una ficha eliminada\nElija una opcion:\n";

}else if((color==1)&&(px==0)){

cout<<"4-Volver atras\n5-Cambiar peon por una ficha eliminada\nElija una opcion:\n";

}else{

cout<<"4-Volver atras\nElija una opcion:\n";

}

  cin>>op;

  switch(op){

   case 1:romper=movpe();break;

   case 2:romper=comerpe();break;

   case 3:if(movido==true){cout<<"No puede hacer eso.\n";system("pause");}else romper=movpeon();break;

   case 4:return false;

   case 5:if(((color==0)&&(px!=7))||((color==1)&&(px!=0))){cout<<"No puede hacer eso.\n";system("pause");return false;}else{romper=cambiarf();}break;

   default:cout<<"No ha ingresado una opcion correcta\n";

  }

 }while((op<1)||(op>4));

 return romper;

}

bool peon::movpe(){

 if(comprobarpos(color,px,py,cambiarcolpos(color,1),0)==true){

  cout<<"Movimiento ilegal, hay una ficha de tu equipo en ese lugar.\n";system("pause");return false;

 }else{

  if(color==0){

   if((px+1)>7){

    cout<<"Movimiento ilegal, se sale del tablero.\n";system("pause");return false;

   }

   px++;

   movido=true;

  }else{

   if((px-1)<0){

    cout<<"Movimiento ilegal, se sale del tablero.\n";system("pause");return false;

   }

   px--;

   movido=true;

  }

  return true;

 }

}

bool peon::movpeon(){

 if(comprobarpos(color,px,py,cambiarcolpos(color,2),0)==true){

  cout<<"Movimiento ilegal, hay una ficha obstruyendo el paso.\n";system("pause");return false;

 }else{

  if(color==0){

   px+=2;

   movido=true;

  }else{

   px-=2;

   movido=true;

  }

  return true;

 }

}

bool peon::comerpe(){

 int op=0;

 do{

  cout<<"Ingrese a que lado desea moverse(1-Izquierda, 2-Derecha),ingrese 3 para cancelar: ";cin>>op;

  if((op<1)||(op>3)){

   cout<<"No ha ingresado una opcion correcta.";

  }else if(op==3){

   return false;

  }else{

   break;

  }

 }while(true);

  if(color==0){

   if(op==1){

    if((px+1>7)||(py-1<0)){

     cout<<"Movimiento ilegal, se sale del tablero.\n";system("pause");return false;

    }

    if(buscar(cambiarcol(color),px+1,py-1,false)==false){

    cout<<"No hay una ficha enemiga en esa ubicacion.\n";system("pause");return false;

}

    px++;

    py--;

   }else{

    if((px+1>7)||(py+1>7)){

     cout<<"Movimiento ilegal, se sale del tablero.\n";system("pause");return false;

    }

    if(buscar(cambiarcol(color),px+1,py+1,false)==false){

    cout<<"No hay una ficha enemiga en esa ubicacion.\n";system("pause");return false;

}

    px++;

    py++;

   }

  }else{

   if(op==1){

    if((px-1<0)||(py-1<0)){

     cout<<"Movimiento ilegal, se sale del tablero.\n";system("pause");return false;

    }

    if(buscar(cambiarcol(color),px-1,py-1,false)==false){

    cout<<"No hay una ficha enemiga en esa ubicacion.\n";system("pause");return false;

}

    px--;

    py--;

   }else{

    if((px+1>7)||(py+1>7)){

     cout<<"Movimiento ilegal, se sale del tablero.\n";system("pause");return false;

    }

    if(buscar(cambiarcol(color),px-1,py+1,false)==false){

    cout<<"No hay una ficha enemiga en esa ubicacion.\n";system("pause");return false;

}

    px--;

    py++;

   }

  }

  movido=true;

  return true;

 }

bool peon::cambiarf(){

int op=0;

while(true){

for(int i=0;i<8;i++){

if(f_elims[i][color]!=' '){

cout<<"Ficha '"<<f_elims[i][color]<<"' disponible para intercambiar.\n";

}

}

cout<<"Elija una opcion, o ingrese 0 para salir:\n";cin>>op;

if(op==0)return false;

if(f_elims[op][color]==' '){

cout<<"Esta ficha no esta disponible.\n";system("pause");

}else{

switch(op){//se autoelimina y cambia los valores de la ficha seleccionada

case 1:buscar(color,px,py,false);t[0+color*2]->elim=false;t[0+color*2]->px=px;t[0+color*2]->py=py;f_elims[0][color]=' ';break;

case 2:buscar(color,px,py,false);t[1+color*2]->elim=false;t[1+color*2]->px=px;t[1+color*2]->py=py;f_elims[1][color]=' ';break;

case 3:buscar(color,px,py,false);a[0+color*2]->elim=false;a[0+color*2]->px=px;a[0+color*2]->py=py;f_elims[2][color]=' ';break;

case 4:buscar(color,px,py,false);a[1+color*2]->elim=false;a[1+color*2]->px=px;a[1+color*2]->py=py;f_elims[3][color]=' ';break;

case 5:buscar(color,px,py,false);c[0+color*2]->elim=false;c[0+color*2]->px=px;c[0+color*2]->py=py;f_elims[4][color]=' ';break;

case 6:buscar(color,px,py,false);c[1+color*2]->elim=false;c[1+color*2]->px=px;c[1+color*2]->py=py;f_elims[5][color]=' ';break;

case 7:buscar(color,px,py,false);d[color]->elim=false;d[color]->px=px;d[color]->py=py;f_elims[6][color]=' ';break;

default:cout<<"No ha ingresado una opcion posible.\n";

}

}

}

}

peon *p[16];

int main(){

 int op,x=0;

 bool romper=false;

 for(int i=0;i<8;i++){//se dan los valores a los punteros

  p[i]=new peon(0,1,i,false,'A',false);

 }

 for(int i=0;i<8;i++){

  p[i+8]=new peon(1,6,i,false,'B',false);

 }

 for(int i=0;i<2;i++){

  t[i]=new torre(0,0,i*7,false,'+');

 }

 for(int i=0;i<2;i++){

  t[i+2]=new torre(1,7,i*7,false,'*');

 }

 for(int i=0;i<2;i++){

 a[i]=new alfil(0,0,2+i*3,false,';');

 }

 for(int i=0;i<2;i++){

 a[i+2]=new alfil(1,7,2+i*3,false,':');

 }

 for(int i=0;i<2;i++){

 c[i]=new caballo(0,0,1+i*5,false,'?');

 }

 for(int i=0;i<2;i++){

 c[i+2]=new caballo(1,7,1+i*5,false,'!');

 }

 d[0]=new dama(0,0,3,false,'&');

 d[1]=new dama(1,7,3,false,'@');

 r[0]=new rey(0,0,4,false,'$');

 r[1]=new rey(1,7,4,false,'#');

 for(int i=0;i<8;i++){

  for(int j=0;j<2;j++){

   f_elims[i][j]=' ';

  }

 }

 for(int i=0;i<8;i++){//se "vacia" la tabla y se vuelven a colocar las fichas en sus nuevas posiciones

  for(int j=0;j<8;j++){

   tabla[i][j]=' ';

  }

 }

 for(int i=0;i<16;i++){

 if(p[i]->elim==true){

 tabla[p[i]->px][p[i]->py]=' ';

}else{

tabla[p[i]->px][p[i]->py]=p[i]->sim;

}

 }

 for(int i=0;i<4;i++){

 if(t[i]->elim==true){

 tabla[t[i]->px][t[i]->py]=' ';

}else{

tabla[t[i]->px][t[i]->py]=t[i]->sim;

}

 }

 for(int i=0;i<4;i++){

 if(a[i]->elim==true){

 tabla[a[i]->px][a[i]->py]=' ';

}else{

tabla[a[i]->px][a[i]->py]=a[i]->sim;

}

 }

 for(int i=0;i<4;i++){

 if(c[i]->elim==true){

 tabla[c[i]->px][c[i]->py]=' ';

}else{

tabla[c[i]->px][c[i]->py]=c[i]->sim;

}

 }

 for(int i=0;i<2;i++){

 if(d[i]->elim==true){

 tabla[d[i]->px][d[i]->py]=' ';

}else{

tabla[d[i]->px][d[i]->py]=d[i]->sim;

}

 }

 for(int i=0;i<2;i++){

 if(r[i]->elim==true){

 tabla[r[i]->px][r[i]->py]=' ';

}else{

tabla[r[i]->px][r[i]->py]=r[i]->sim;

}

 }

 cout<<"Ajedrez en C++\nLos peones blancos se caracterizan por la 'A', los negros por la 'B'\nLas torres blancas son los '+' y las negras los '*'\nLos caballos blancos son los '?' y los negros son '!'\nLos alfileres blancos son los ';' y los negros los ':'\nLa reina blanca es '&' y la negra es '@'\nEl rey blanco es '$' y el negro es '#'\n";

 system("pause");

 system("cls");

 while(true){

 do{

  cout<<"\t\t\t\t A B C D E F G H\n\n";

  for(int i=7;i>-1;i--){

   cout<<i+1<<"\t\t\t\t|";

   for(int j=0;j<8;j++){

    cout<<tabla[i][j]<<"|";

   }

   if(i==7){

   cout<<"\t";

   for(int k=0;k<8;k++){

   cout<<f_elims[k][1]<<" ";

 }

 }else if(i==0){

 cout<<"\t";

   for(int k=0;k<8;k++){

   cout<<f_elims[k][0]<<" ";

 }

 }

 cout<<endl;

  }

  cout<<endl;

  cout<<"Seleccionar peon ";

  for(int i=0;i<8;i++){

   if(p[i+x]->elim==true){

cout<<"Peon "<<i+x<<" eliminado,";

 }else{

 cout<<i+x<<"("<<p[i+x]->px+1;

   switch(p[i]->py){

    case 0:cout<<"A";break;

    case 1:cout<<"B";break;

    case 2:cout<<"C";break;

    case 3:cout<<"D";break;

    case 4:cout<<"E";break;

    case 5:cout<<"F";break;

    case 6:cout<<"G";break;

    case 7:cout<<"H";break;

   }

   cout<<"): "<<i<<", ";

 }

  }

  cout<<endl;

  for(int i=0;i<2;i++){

   if(t[i+x/4]->elim==true){

   cout<<"Torre "<<i+x/4<<" actualmente eliminada.\n";

 }else{

 cout<<"Seleccionar torre "<<i+x/4<<"(Posicion "<<t[i+x/4]->px+1;

   switch(t[i]->py){

    case 0:cout<<"A";break;

    case 1:cout<<"B";break;

    case 2:cout<<"C";break;

    case 3:cout<<"D";break;

    case 4:cout<<"E";break;

    case 5:cout<<"F";break;

    case 6:cout<<"G";break;

    case 7:cout<<"H";break;

   }

   cout<<"): "<<i+8<<endl;

}

  }

  for(int i=0;i<2;i++){

   if(a[i+x/4]->elim==true){

   cout<<"Alfil "<<i+x/4<<" actualmente eliminada.\n";

 }else{

 cout<<"Seleccionar alfil "<<i+x/4<<"(Posicion "<<a[i+x/4]->px+1;

   switch(a[i]->py){

    case 0:cout<<"A";break;

    case 1:cout<<"B";break;

    case 2:cout<<"C";break;

    case 3:cout<<"D";break;

    case 4:cout<<"E";break;

    case 5:cout<<"F";break;

    case 6:cout<<"G";break;

    case 7:cout<<"H";break;

   }

   cout<<"): "<<i+10<<endl;

}

  }

  for(int i=0;i<2;i++){

   if(c[i+x/4]->elim==true){

   cout<<"Caballo "<<i+x/4<<" actualmente eliminado.\n";

 }else{

 cout<<"Seleccionar caballo "<<i+x/4<<"(Posicion "<<c[i+x/4]->px+1;

   switch(c[i]->py){

    case 0:cout<<"A";break;

    case 1:cout<<"B";break;

    case 2:cout<<"C";break;

    case 3:cout<<"D";break;

    case 4:cout<<"E";break;

    case 5:cout<<"F";break;

    case 6:cout<<"G";break;

    case 7:cout<<"H";break;

   }

   cout<<"): "<<i+12<<endl;

}

  }

  if(d[x/8]->elim==true){

   cout<<"Dama "<<x/8<<" actualmente eliminada.\n";

 }else{

 cout<<"Seleccionar dama "<<x/8<<"(Posicion "<<c[x/8]->px+1;

   switch(d[x/8]->py){

    case 0:cout<<"A";break;

    case 1:cout<<"B";break;

    case 2:cout<<"C";break;

    case 3:cout<<"D";break;

    case 4:cout<<"E";break;

    case 5:cout<<"F";break;

    case 6:cout<<"G";break;

    case 7:cout<<"H";break;

   }

   cout<<"): "<<14<<endl;

}

cout<<"Seleccionar rey "<<x/8<<"(Posicion "<<r[x/8]->px+1;

   switch(r[x/8]->py){

    case 0:cout<<"A";break;

    case 1:cout<<"B";break;

    case 2:cout<<"C";break;

    case 3:cout<<"D";break;

    case 4:cout<<"E";break;

    case 5:cout<<"F";break;

    case 6:cout<<"G";break;

    case 7:cout<<"H";break;

   }

   cout<<"): "<<15<<endl;

  cin>>op;

  switch(op){

   case 0:

 case 1:

 case 2:

 case 3:

 case 4:

 case 5:

 case 6: 

   case 7:if(p[op+x]->elim==true){cout<<"Esta ficha no esta disponible.\n";system("pause");}else romper=p[op+x]->mostrarop(op+x);break;

   case 8:

   case 9:if(t[(op-8)+x/4]->elim==true){cout<<"Esta ficha no esta disponible.\n";system("pause");}else romper=t[(op-8)+x/4]->mostrarop((op-8)+x/4);break;

   case 10:

   case 11:if(a[(op-10)+x/4]->elim==true){cout<<"Esta ficha no esta disponible.\n";system("pause");}else romper=a[(op-10)+x/4]->mostrarop((op-10)+x/4);break;

   case 12:

   case 13:if(c[(op-12)+x/4]->elim==true){cout<<"Esta ficha no esta disponible.\n";system("pause");}else romper=c[(op-12)+x/4]->mostrarop((op-12)+x/4);break;

   case 14:if(d[(op-14)+x/8]->elim==true){cout<<"Esta ficha no esta disponible.\n";system("pause");}else romper=d[(op-14)+x/8]->mostrarop((op-14)+x/8);break;

   case 15:if(r[(op-15)+x/8]->elim==true){cout<<"Esta ficha no esta disponible.\n";system("pause");}else romper=r[(op-15)+x/8]->mostrarop((op-15)+x/8);break;

   default:cout<<"No ha seleccionado una ficha posible, intentelo de nuevo\n";system("pause");

   }

  system("cls");

  for(int i=0;i<8;i++){

  for(int j=0;j<8;j++){

   tabla[i][j]=' ';

  }

 }

 for(int i=0;i<16;i++){

 if(p[i]->elim==true){

 if(tabla[p[i]->px][p[i]->py]==' '){

 tabla[p[i]->px][p[i]->py]=' ';

 }

}else{

tabla[p[i]->px][p[i]->py]=p[i]->sim;

}

 }

 for(int i=0;i<4;i++){

 if(t[i]->elim==true){

 if(tabla[t[i]->px][t[i]->py]==' '){

 tabla[t[i]->px][t[i]->py]=' ';

 }

}else{

tabla[t[i]->px][t[i]->py]=t[i]->sim;

}

 }

 for(int i=0;i<4;i++){

 if(a[i]->elim==true){

 if(tabla[a[i]->px][a[i]->py]==' '){

 tabla[a[i]->px][a[i]->py]=' ';

 }

}else{

tabla[a[i]->px][a[i]->py]=a[i]->sim;

}

 }

 for(int i=0;i<4;i++){

 if(c[i]->elim==true){

 tabla[c[i]->px][c[i]->py]=' ';

}else{

tabla[c[i]->px][c[i]->py]=c[i]->sim;

}

 }

 for(int i=0;i<2;i++){

 if(d[i]->elim==true){

 tabla[d[i]->px][d[i]->py]=' ';

}else{

tabla[d[i]->px][d[i]->py]=d[i]->sim;

}

 }

 for(int i=0;i<2;i++){

 if(r[i]->elim==true){

 tabla[r[i]->px][r[i]->py]=' ';

}else{

tabla[r[i]->px][r[i]->py]=r[i]->sim;

}

 }

  }while(romper==false);

  if(r[0]->elim==true){

   cout<<"\nEl rey 1 ha sido elimnado, el ganador es el jugador de las fichas negras(B,!,:,*,@,#)\n";system("pause");system("cls");break;break;

 }else if(r[1]->elim==true){

 cout<<"\nEl rey 2 ha sido elimnado, el ganador es el jugador de las fichas blancas(A,?,;,+,&,$)\n";system("pause");system("cls");break;break;

 }

 romper=false;//la razon de que casi todas las funciones retornen un valor bool es para romper este bucle necesario para que cada jugador tenga su turno,lo cualtambien me llevo a la declaracion de la variable x

 if(x==0){

  x+=8;

 }else{

  x=0;

 }

}

}

bool comprobarpos(int color,int px,int py,int pxo,int pyo){//esta funcion recorre el camino que recorrera la ficha para saber si esta libre o no

 int aux=0,aux2=0;

 if(pxo>0){

  aux=1;

 }else if(pxo<0){

  aux=-1;

 }else{

 aux=0;

 }

 if(pyo>0){

  aux2=1;

 }else if(pyo<0){

  aux2=-1;

 }else{

 aux2=0;

 }

 for(int i=aux,i2=aux2;((((i<=pxo)&&(pxo>-1))||((i>=pxo)&&(pxo<0)))&&(((i2<=pyo)&&(pyo>-1))||((i2>=pyo)&&(pyo<0))));){

  switch(tabla[px+i][py+i2]){

   default:return true;

 case ' ':;//en caso de que este ocupado retorna verdadero

  }

  if(i<0){

   i--;

  }else if(i>0){

   i++;

  }

  if(i2<0){

   i2--;

  }else if(i2>0){

   i2++;

  }

 }

 return false;

}

int cambiarcolpos(int color,int n){

 if(color==0){

  return n;

 }else{

  return n*-1;

 }

}

int cambiarcol(int color){

 if(color==0){

  return 1;

 }else{

  return 0;

 }

}

bool buscar(int _color,int _px,int _py,bool _elim){

 for(int i=0;i<16;i++){//se busca y elimina la ficha en cuestion de eliminar

  if((p[i]->color==_color)&&(p[i]->px==_px)&&(p[i]->py==_py)&&(p[i]->elim==false)){

   p[i]->elim=true;return true;

  }

 }

 for(int i=0;i<4;i++){

  if((t[i]->color==_color)&&(t[i]->px==_px)&&(t[i]->py==_py)&&(t[i]->elim==false)){

   t[i]->elim=true;

   if(i>1){

   i-=2;

 }

   if(_color==0){

   f_elims[i][0]='*';

 }else{

 f_elims[i][1]='+';

 }

 return true;

  }

 }

 for(int i=0;i<4;i++){

  if((a[i]->color==_color)&&(a[i]->px==_px)&&(a[i]->py==_py)&&(a[i]->elim==false)){

   a[i]->elim=true;

   if(i>1){

   i-=2;

 }

   if(_color==0){

   f_elims[i+2][0]=';';

 }else{

 f_elims[i+2][1]=':';

 }

 return true;

  }

 }

 for(int i=0;i<4;i++){

  if((c[i]->color==_color)&&(c[i]->px==_px)&&(c[i]->py==_py)&&(c[i]->elim==false)){

   c[i]->elim=true;

   if(i>1){

   i-=2;

 }

   if(_color==0){

   f_elims[i+4][0]='?';

 }else{

 f_elims[i+4][1]='!';

 }

 return true;

  }

 }

  for(int i=0;i<2;i++){

  if((d[i]->color==_color)&&(d[i]->px==_px)&&(d[i]->py==_py)&&(d[i]->elim==false)){

   d[i]->elim=true;

   if(i>1){

   i-=2;

 }

   if(_color==0){

   f_elims[i+6][0]='&';

 }else{

 f_elims[i+6][1]='@';

 }

 return true;

  }

 }

 for(int i=0;i<2;i++){

  if((r[i]->color==_color)&&(r[i]->px==_px)&&(r[i]->py==_py)&&(r[i]->elim==false)){

   r[i]->elim=true;

 return true;

  }

 }

 return false;

}

bool moverf(int &color,int &px,int &py,bool &elim,int pxo,int pyo){//no preguntes

if((px+pxo>7)||(px+pxo<0)||(py+pyo>7)||(py+pyo<0)){cout<<"Movimiento ilegal, se sale del tablero.\n";system("pause");return false;}else{if((tabla[px+pxo][py+pyo]!=' ')&&(comprobarpos(color,px,py,cambiarv(pxo),cambiarv(pyo))==false)&&(buscar(cambiarcol(color),px+pxo,py+pyo,false)==true)){px+=pxo;py+=pyo;}else if(comprobarpos(color,px,py,pxo,pyo)==false){px+=pxo;py+=pyo;}else if((tabla[px+pxo][py+pyo]!=' ')&&((pxo==1)||(pxo==-1))&&((pyo==1)||(pyo==-1))&&(buscar(cambiarcol(color),px+pxo,py+pyo,false)==true)){px+=pxo;py+=pyo;}else{cout<<"Movimeinto ilegal, hay una ficha en el camino.\n";system("pause");return false;}}

return true;

}

bool moverf_c(int &color,int &px,int &py,bool &elim,int pxo,int pyo){

if((px+pxo>7)||(px+pxo<0)||(py+pyo>7)||(py+pyo<0)){

cout<<"Movimiento ilegal, se sale del tablero.\n";system("pause");return false;

}

if(tabla[px+pxo][py+pyo]==' '){

px=pxo;

py+=pyo;

}else if((tabla[px+pxo][py+pyo]!=' ')&&(buscar(cambiarcol(color),px,py,false))){

px=pxo;

py+=pyo;

}else{

cout<<"Movimiento ilegal, hay una ficha aliada en esa posicion.\n";system("pause");return false;

}

return true;

}

int moverf_c_v(int n){

if(n==1){

return -1;

}else{

return 1;

}

}

int cambiarv(int n){

if(n>1){

n-=1;

}else if(n<-1){

n+=1;

}

return n;

}


1

Comments

Saben jugar al ajedrez no?