protected DefenseDirectionInfo GetDefenseConnectCount(Model model, int posX, int posY, ChessType posChessType, int volumeX, int volumeY) { DefenseDirectionInfo defenseDirectionInfo = new DefenseDirectionInfo(); defenseDirectionInfo.EnemyConnectCount = 0; defenseDirectionInfo.IsEnemyLive = false; var board = model.GetBoardByCopy(); int x = posX + volumeX; int y = posY + volumeY; ChessType enemyChessType = Utility.GetOppositeChessType(posChessType); if ((y < 0 || y >= GameDef.board_cell_length) || (x < 0 || x >= GameDef.board_cell_length)) { return(defenseDirectionInfo); } while (board[y][x] == enemyChessType) { defenseDirectionInfo.EnemyConnectCount++; x += volumeX; y += volumeY; if ((y < 0 || y >= GameDef.board_cell_length) || (x < 0 || x >= GameDef.board_cell_length)) { break; } } if ((y < 0 || y >= GameDef.board_cell_length) || (x < 0 || x >= GameDef.board_cell_length)) { defenseDirectionInfo.IsEnemyLive = false; } else { if (board[y][x] == ChessType.None) { defenseDirectionInfo.IsEnemyLive = true; } } return(defenseDirectionInfo); }
protected int CalculateDefenseScore(DefenseDirectionInfo defenseDirectionInfo) { int res = 0; int connect = defenseDirectionInfo.EnemyConnectCount; bool isLive = defenseDirectionInfo.IsEnemyLive; if (connect >= 4) { res = 1000000; } else if (connect == 3) { if (isLive) { res = 4000; } else { res = 2000; } } else if (connect == 2) { if (isLive) { res = 400; } else { res = 200; } } else if (connect == 1) { if (isLive) { res = 150; } else { res = 75; } } return(res); }