Przenosząc szachownicę na układ kartezjański goniec może siedzieć w dowolnym punkcie od 0,0 do 8,8.Wektor ruchu jaki może wykonać jest opisany funkcjami y=x+b i y=-x+b.Ponieważ jak widzę nie wprowadziłeś rozpatrywania blokowania ruchu przez inne figury zadanie sprowadza się do znalezienia b i punktów przecięcia prostych z osiami układu współrzędnych oraz prostymi y=8 i x=8
A co tam,masz kod funkcji (nie testowany za mocno wprawdzie,ale w 3 przypadkach dał wyniki dobre)
void bishopVectors(int bishopX, int bishopY)
{
//tutaj wiadomo,trza by sprawdzić czy dostajesz współrzędne z przedziału <0, maxPos>,ale to Ty się baw w implementację Bracie ;P
#define maxPos 7
//znalezienie b1 i b2 dla wspomnianych funkcji y = x + b i y = -x + b
int b1 = bishopY - bishopX;
int b2 = bishopY + bishopX;
//wyznaczenie punktów przecięcia wektorów ruchu z krawędziami szachownicy
//dla y = x + b1 rozpatrując "w prawo" albo przetnie y = maxPos albo x = maxPos
//jeśli przetnie y = maxPos to równanie ma postać maxPos = x + b1
int x1 = (maxPos - b1) > maxPos ? maxPos : maxPos - b1;//jeśli x1 wyjdzie większy od maxPos,znaczy to że przecina prostą x = maxPos
int y1 = x1 + b1;
//rozpatrując "w lewo" przetnie y = 0 albo x = 0
//jeśli przecina y=0 to równaniem jest 0 = x+b1
int x2 = -b1 < 0 ? 0 : -b1;//jeśli wyjdzie x < 0 to znak,że prosta przecina prostą x=0
int y2 = x2 + b1;
//teraz pora na prostą y = -x + b2
//rozpatrując "w prawo" proste mogą się przeciąć na y = 0 albo x = maxPos
//dla przecięcia na y = 0 równanie ma postać 0 = -x + b2
int x3 = b2 > maxPos ? maxPos : b2;
int y3 = -x3 + b2;
//patrząc "w lewo" przecięcie nastąpi na y = maxPos albo x = 0
//jeśli przecina y = maxPos to równaniem jest maxPos = -x + b2
int x4 = b2 - maxPos < 0 ? 0 : b2-maxPos;
int y4 = -x4 + b2;
//jakoś se ładnie to poukładaj teraz,wypełnij jakąś tablicę otrzymanymi współrzednymi czy cuś w ten deseń
//qDebug()<<"Punkt1("<<x1<<','<<y1<<')';
//qDebug()<<"Punkt2("<<x2<<','<<y2<<')';
//qDebug()<<"Punkt3("<<x3<<','<<y3<<')';
//qDebug()<<"Punkt4("<<x4<<','<<y4<<')';
#undef maxPos
}