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; } } }