Hey,
Ill show you what i have done:
Code:
bool Game::move(Square *dest, Draught *current){
bool fm = false;
bool valid = false;
Square * sq1 = current->getSquare();
if (dest->isOccupied()) return false;
if (cp==1){ //FORCED MOVE CHECK
for(int i=0; i<player2->getNDraughts(); i++){ // here i get each draught and check if there is forced move
Draught * d = player2->getDraught(i);
Square * sqq = current->getSquare();
if(sq1->getX() == 0 && sq1->getX() == 1){ // THIS IS PROBLEM ZONE- i am saying if draught is in position '0' or '1'
//then dont check certain squares - AVOIDING the segmaentation error - it dont work ??
Square * s = board->getSquare(sqq->getX()+1, sqq->getY() +1); // getting squares for top right from current draught
Square * o = board->getSquare(sqq->getX()+2, sqq->getY() +2);
Square * s1 = board->getSquare(sqq->getX()+1, sqq->getY() -1); // getting squares for bottom right
Square * o1 = board->getSquare(sqq->getX()+2, sqq->getY() -2);
if ((d->getSquare() == s) && !o->isOccupied()){ // checking if top right square is occupied
fm = true;
}
if ((d->getSquare() == s1) && !o1->isOccupied()){ // checking if bottom right square is occupied
fm = true;
}
}
else if (sq1->getX() == 6 && sq1->getX() == 7){ //SAME PROBLEM, this time i do for the other end of the ROW '6' and '7'
//but for some reason, it works here?? now i am baffed???
Square * s = board->getSquare(sqq->getX()-1, sqq->getY()+1); // getting squares for top left focred move
Square * o = board->getSquare(sqq->getX()-2, sqq->getY()+2);
Square * s1 = board->getSquare(sqq->getX()-1, sqq->getY() -1); // getting squares for bottom left
Square * o1 = board->getSquare(sqq->getX()-2, sqq->getY() -2);
if ((d->getSquare() == s) && !o->isOccupied()){ // checking if top right square is occupied
fm = true;
}
if ((d->getSquare() == s1) && !o1->isOccupied()){ // checking if bottom right square is occupied
fm = true;
}
}
else { //THIS IS FOR THE SQUARES NOT ON THE EDGES, AND IT WORKS - squares '2' '3' '4' '5' in the row
Square * s = board->getSquare(sqq->getX()+1, sqq->getY()-1); // getting squares for top left focred move
Square * o = board->getSquare(sqq->getX()+2, sqq->getY()-2);
Square * s1 = board->getSquare(sqq->getX()+1, sqq->getY() +1); // getting squares for top right
Square * o1 = board->getSquare(sqq->getX()+2, sqq->getY() +2);
Square * s2 = board->getSquare(sqq->getX()-1, sqq->getY() -1); // getting squares for bottom left
Square * o2 = board->getSquare(sqq->getX()-2, sqq->getY() -2);
Square * s3 = board->getSquare(sqq->getX()-1, sqq->getY() +1); // getting squares for bottom right
Square * o3 = board->getSquare(sqq->getX()-2, sqq->getY() +2);
if ((d->getSquare() == s) && !o->isOccupied()){ // checking if top left square is occupied
fm = true;
}
if ((d->getSquare() == s1) && !o1->isOccupied()){ // checking if top right square is occupied
fm = true;
}
if (current->isKing()){
if ((d->getSquare() == s2) && !o2->isOccupied()){ // checking if bottom left square is occupied
fm = true;
}
}
if (current->isKing()){
if ((d->getSquare() == s3) && !o3->isOccupied()){ // checking if bottom right square is occupied
fm = true;
}
}
}
}
if (fm){ //IF FORCED MOVE IS TRUE, MAKE SURE PLAYER CARRIES IT OUT
if (sq1->getX()!=dest->getX()-2) {}
else if ((sq1->getY()!=dest->getY()+2) && (sq1->getY()!=dest->getY()-2)) {} // check if move made by player is valid
else if (current->isKing()){
if(sq1->getX()!=dest->getX()+2){}
else
{valid = true;}
}
else {
valid = true;
}
}
/* END OF FORCED MOVE CHECK FOR P1
NOW CHECK FOR STANDARD MOVES FOR P1*/
if (!fm){ //IF FORCED MOVE FALSE THEN CHECK MOVE IS VALID
if (sq1->getX()!=dest->getX()-1){} // Checking conditon for P1
else if ((sq1->getY()!=dest->getY()+1) && (sq1->getY()!=dest->getY()-1)){}
else if (current->isKing()){
if (sq1->getX()!=dest->getX()+1){}
else
{valid = true;} // for the king
}
else {
valid = true; // standard piece
}
}
}
If you need more code, like from my other classes let me know, and also im a little confused on how which is x and y on the board, this is how it was created:
Code:
Board::Board(int x, int y){
squares = (Square **) malloc(sizeof(Square *) * x);
for(int i=0; i<x; i++)
squares[i] = (Square *) malloc(sizeof(Square) * y);
for(int i=0; i<x; i++)
for(int j=0;j<y; j++)
squares[i][j].setXY(i, j);
sizeX=x; sizeY=y;
}
Thanks!