ayuda en programa

Exodus
28 de Febrero del 2008
Mirar haber si me podeis echar una mano con esto, mi problema es que en todas las comprobaciones que le hago en los if y demas.

void mover(tablero v, bool cont)
{
char w [2];
char s [2];
char h;
int x,y, z, t;
int d,e;
d=0;
e=0;

if(cont==true)
{
do{
cout<<"Introduzca posicion de la casilla origen"<<endl;
cin>>w;
x=w[0]-'a';
y=w[1]-'1';
cout<<x<<"t"<<y<<endl;
cout<<v[x][y]<<"t"<<v[y][x]<<endl;
h=v[x][y];
if(x>8 || x<=0 || y<=0 || y>8)
{
d=1;
}

if(h=='P' || h=='T' || h=='C' || h=='A' || h=='R' || h=='Y')
{
cout<<"Casilla correcta";
}

if(h!='P' || h!='T' || h!='C' || h!='A' || h!='R' || h!='Y')
{
cout<<"Casilla equivocada, corrijala";
e=1;

}
}while(cont!=true);

do{
cout<<"Introduzca posicion de la casilla de destino";
cin>>s;
z=s[0]-'a';
t=s[1]-'1';

if(z>8 || z<1 || t<1 || t>8)
{
cout<<"t POSICION ERRONEA, VUELVA A INTRODUCIRLA "<<endl;
}

if(v[z][t]=='P' || v[z][t]=='T' || v[z][t]=='C' || v[z][t]=='A' ||
v[z][t]=='R' || v[z][t]=='Y')
{
cout<<"Casilla equivocada, corrijala";
}

else
cout<<"Casilla correcta";

}while(z>8 || z<1 || t<1 || t>8 || v[z][t]=='P' || v[z][t]=='T' || v[z][t]=='C' || v[z][t]=='A' || v[z][t]=='R' || v[z][t]=='Y');
}
v[z][t]=v[x][y];
v[z][t]=' ';
}