@alvaro and @willh:
Thank you for replying and trying to help me in this case.
Fhourstones was I guess programed by Mr.Tromp.(heavy stuff)
Since this is my primary version of game, I have programed it using simple 2-d arrays(Its not as fast as bit board which are developed by Mr.Tromp, but after all this is my first version in programing connect-4,later on if required I can re program the game in bit-boards if required,but for that I should get my basic concepts cleared.)
Here is my evaluation function:
public static char[] board_one_d = new char[42]; static int r, c, rows = 6, cols = 7; public static int fscore = -1000; static int _3inr = 5; static int _2inr = 1; static int EMPTY='1'; public static int evaluate(char[][] board, boolean white) { char color = white ? 'x' : 'o'; int eval = 0; //Winning. for (r = 0; r < rows; r++) { for (c = 0; c < cols - 3; c++) { if (board[r][c] != EMPTY && board[r][c] == board[r][c + 1] && board[r][c] == board[r][c + 2] && board[r][c] == board[r][c + 3]) { eval = fscore; } } }// check for a vertical win for (r = 0; r < rows - 3; r++) { for (c = 0; c < cols; c++) { if (board[r][c] != EMPTY && board[r][c] == board[r + 1][c] && board[r][c] == board[r + 2][c] && board[r][c] == board[r + 3][c]) { eval = fscore; } } }// check for a diagonal win (positive slope) for (r = 0; r < rows - 3; r++) { for (c = 0; c < cols - 3; c++) { if (board[r][c] != EMPTY && board[r][c] == board[r + 1][c + 1] && board[r][c] == board[r + 2][c + 2] && board[r][c] == board[r + 3][c + 3]) { eval = fscore; } } }// check for a diagonal win (negative slope) for (r = 3; r < rows; r++) { for (c = 0; c < cols - 3; c++) { if (board[r][c] != EMPTY && board[r][c] == board[r - 1][c + 1] && board[r][c] == board[r - 2][c + 2] && board[r][c] == board[r - 3][c + 3]) { eval = fscore; } } }//3in a r for (r = 0; r < rows; r++) { for (c = 0; c < cols - 2; c++) { if (board[r][c] != EMPTY && board[r][c] == board[r][c + 1] && board[r][c] == board[r][c + 2]) { eval = eval + _3inr; } } }// check for 3-a vertical for (r = 0; r < rows - 2; r++) { for (c = 0; c < cols; c++) { if (board[r][c] != EMPTY && board[r][c] == board[r + 1][c] && board[r][c] == board[r + 2][c]) { eval = eval + _3inr; } } }// check for 3-a diagonal (positive slope) for (r = 0; r < rows - 2; r++) { for (c = 0; c < cols - 2; c++) { if (board[r][c] != EMPTY && board[r][c] == board[r + 1][c + 1] && board[r][c] == board[r + 2][c + 2]) { eval = eval + _3inr; } } }// check for 3- a diagonal (negative slope) for (r = 2; r < rows; r++) { for (c = 0; c < cols - 2; c++) { if (board[r][c] != EMPTY && board[r][c] == board[r - 1][c + 1] && board[r][c] == board[r - 2][c + 2]) { eval = eval + _3inr; } } } //Two in r for (r = 0; r < rows; r++) { for (c = 0; c < cols - 1; c++) { if (board[r][c] != EMPTY && board[r][c] == board[r][c + 1] ) { eval = eval + _2inr; } } }// check for 3-a vertical for (r = 0; r < rows - 2; r++) { for (c = 0; c < cols; c++) { if (board[r][c] != EMPTY && board[r][c] == board[r + 1][c] ) { eval = eval + _2inr; } } }// check for 3-a diagonal (positive slope) for (r = 0; r < rows - 2; r++) { for (c = 0; c < cols - 2; c++) { if (board[r][c] != EMPTY && board[r][c] == board[r + 1][c + 1] ) { eval = eval + _2inr; } } }// check for 3- a diagonal (negative slope) for (r = 2; r < rows; r++) { for (c = 0; c < cols - 2; c++) { if (board[r][c] != EMPTY && board[r][c] == board[r - 1][c + 1] ) { eval = eval + _2inr; } } } //.... return eval; }
Also if possible kindly give me some hints for wrinting more sophisticated evaluation.
I know the basics of connect 4(odd row threats for player1, double threats even row threats for player2) but before I start adding these stuffs, it would be better for me to get all the concepts and method of programing correctly.