Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }