bool checkLegalInDirection(char board[26][26], int n, int row, int col, char colour, int deltaRow, int deltaCol){ int i; if(positionInBounds(n, row, col)){ if(board[row][col] == 'U'){ //position is on the board and is unoccupied if(positionInBounds(n, row + deltaRow, col + deltaCol)){ if(board[row + deltaRow][col + deltaCol] != colour && board[row + deltaRow][col + deltaCol] != 'U'){ for(i = 1; (positionInBounds(n, row + i*deltaRow, col + i*deltaCol)) && (board[row + deltaRow*i][col + deltaCol*i] != 'U'); i++){ if(board[row + deltaRow*i][col + deltaCol*i] == colour){ return true; } } } } } } return false; }
//receives board as input from the user void getBoard(char board[26][26], int n){ char colour; char row, col; printf("Enter board configuration:\n"); scanf(" %c%c%c", &colour, &row, &col); while(colour != '!' && row != '!' && col != '!'){ if(positionInBounds(n, row - 'a', col - 'a')) board[row - 'a'][col - 'a'] = colour; scanf(" %c%c%c", &colour, &row, &col); } }
int tilesInDirection(char board[26][26], int n, char colour, int row, int col, int deltaRow, int deltaCol){ int i, flips; flips = 0; if(positionInBounds(n, row, col)){ if(board[row][col] == 'U'){ //position is on the board and is unoccupied if(positionInBounds(n, row + deltaRow, col + deltaCol)){ if(board[row + deltaRow][col + deltaCol] != colour && board[row + deltaRow][col + deltaCol] != 'U'){ for(i = 1; (positionInBounds(n, row + i*deltaRow, col + i*deltaCol)) && (board[row + deltaRow*i][col + deltaCol*i] != 'U'); i++){ if(board[row + deltaRow*i][col + deltaCol*i] == colour){ return flips; } flips++; } } } } } return 0; }
void makeMoveInDirection(char board[26][26], int n, int row, int col, char colour, int deltaRow, int deltaCol){ int i; for(i = 1; positionInBounds(n, row + i*deltaRow, col + i*deltaCol) && board[row + deltaRow*i][col + deltaCol*i] != 'U'; i++){ if(board[row + deltaRow*i][col + deltaCol*i] != colour){ board[row + deltaRow*i][col + deltaCol*i] = colour; } else if(board[row + deltaRow*i][col + deltaCol*i] == colour){ return; } } }
int edgeScorer(char board[26][26], int n, int row, int col){ int score = 7; int deltaRow, deltaCol; for(deltaRow = -1; deltaRow <= 1; deltaRow++){ for(deltaCol = -1; deltaCol <= 1; deltaCol++){ if(deltaRow != 0 || deltaCol != 0) if(positionInBounds(n, row + deltaRow, col + deltaCol)) if(board[row + deltaRow][col + deltaCol] == 'U') score--; } } return score; }
bool checkLegal(int dimension, char board[26][26], char row, char col, char colour){ bool legal = false; int deltaRow, deltaCol; if (positionInBounds(dimension, row, col)==false){ return legal; } if (board[row-'a'][col-'a']!='U') return legal; for(deltaRow=-1;deltaRow<=1;deltaRow++){ for(deltaCol=-1;deltaCol<=1;deltaCol++){ if ((deltaRow!=0)||(deltaCol!=0)){ if (checkLegalInDirection(board, dimension, row, col, colour, deltaRow, deltaCol) == true){ legal = true; } } } } return legal; }