public Transition PerformMove(Move move) { Transition transition = new Transition(); PerformAtomicMove(move); transition.Moves.Add(move); if (move.Source != null) { //faza II - zbijanie foreach (Place vector1 in BackendHelper.Vectors.Values) { Place place1 = move.Destination + vector1; if (!BackendHelper.IsPlaceValid(place1, dimension)) { continue; } Player enemy = GetPlayer(place1); //sąsiad musi istnieć i być przeciwnikiem if (enemy == Player.None || enemy == move.Player) { continue; } Place place2 = place1 + vector1; if (!BackendHelper.IsPlaceValid(place2, dimension)) { continue; } Player friend = GetPlayer(place2); //pionek musi istnieć i nie być przeciwnikiem if (friend == Player.None || friend != move.Player) { continue; } Move capture = new Move(enemy, place1, null); PerformAtomicMove(capture); transition.Moves.Add(capture); } } return(transition); }
public List <Move> GetPossibleMoves(Player player) { List <Move> moves = new List <Move>(); if (befores[player] > 0) { //faza I - dostawianie foreach (Place destination in BackendHelper.GetAllPlaces(dimension)) { if (GetPlayer(destination) == Player.None) { moves.Add(new Move(player, null, destination)); } } } else { //faza II - przesuwanie foreach (Place source in BackendHelper.GetAllPlaces(dimension)) { if (GetPlayer(source) == player) { foreach (Place vector in BackendHelper.Vectors.Values) { Place destination = source + vector; if (BackendHelper.IsPlaceValid(destination, dimension)) { if (GetPlayer(destination) == Player.None) { moves.Add(new Move(player, source, destination)); } } } } } } return(moves); }
public override int Run(Board board, Player player) { int result = 0; foreach (Place place1 in BackendHelper.GetAllPlaces(board.Dimension)) { int k; Player currentPlayer; if (player == board.GetPlayer(place1)) { currentPlayer = player; k = 1; } else if (BackendHelper.SwapPlayer(player) == board.GetPlayer(place1)) { currentPlayer = BackendHelper.SwapPlayer(player); k = -1; } else { continue; } foreach (Place vector in BackendHelper.Vectors.Values) { Place place2 = place1 + vector; result += k; while (BackendHelper.IsPlaceValid(place2, board.Dimension) && board.GetPlayer(place2) == currentPlayer) { result += k; place2 = place2 + vector; } } } return(result); }