Пример #1
0
        private void AddLine(Queue <PlayerModel> bfsQueue)
        {
            Line wayPoint = _worldModel.GetFinishLine();

            double dx = wayPoint.Second.X - wayPoint.First.X;
            double dy = wayPoint.Second.Y - wayPoint.First.Y;

            int minX = Math.Min(wayPoint.First.X, wayPoint.Second.X);
            int minY = Math.Min(wayPoint.First.Y, wayPoint.Second.Y);
            int maxX = Math.Max(wayPoint.First.X, wayPoint.Second.X);
            int maxY = Math.Max(wayPoint.First.Y, wayPoint.Second.Y);

            double deltaX = (dx > dy) ? 1 : (dx / dy);
            double deltaY = (dx > dy) ? (dy / dx) : 1;

            for (double i = wayPoint.First.X; i >= minX && i <= maxX; i += deltaX)
            {
                for (double j = wayPoint.First.Y; j >= minY && j <= maxY; j += deltaY)
                {
                    for (int di = -1; di <= 1; ++di)
                    {
                        for (int dj = -1; dj <= 1; ++dj)
                        {
                            if (_worldModel.IsEmptyPosition((int)(i + di), (int)(j + dj)) &&
                                _worldModel.IsOnRightSideOfFinishLine((int)(i + di), (int)(j + dj)))
                            {
                                bfsQueue.Enqueue(new PlayerModel(
                                                     new Coordinates((int)(i + di), (int)(j + dj)), _curPlayer.PlayerName));
                            }
                        }
                    }
                    _distancesToFinish[(int)j][(int)i] = 0;

                    if (Math.Abs(deltaY) < 0.0001)
                    {
                        break;
                    }
                }
                if (Math.Abs(deltaX) < 0.0001)
                {
                    break;
                }
            }
        }