La emoción del baloncesto KBL se traslada a Perú
    El baloncesto siempre ha sido un deporte que une a las personas, sin importar las fronteras. En Perú, la pasión por el baloncesto se refleja en el interés creciente por las ligas internacionales, como la Korean Basketball League (KBL) de Corea del Sur. Mañana, los aficionados peruanos tendrán la oportunidad de seguir de cerca algunos de los partidos más emocionantes de esta liga, con expertos en apuestas ofreciendo sus predicciones para ayudar a los seguidores a disfrutar aún más de la experiencia. A continuación, exploraremos los detalles de estos encuentros y proporcionaremos análisis detallados para que estés preparado para seguir la acción.
    
    Predicciones de expertos en apuestas
    A continuación, presentamos algunas predicciones basadas en análisis estadísticos y tendencias recientes para ayudarte a tomar decisiones informadas si decides participar en apuestas deportivas:
    
        Predicción: Jeonju KCC Egis vs. Incheon Electroland Elephants
        Dada la consistencia defensiva de Jeonju y la necesidad urgente de Incheon por obtener una victoria para mejorar su moral, se espera que Jeonju mantenga su racha ganadora. La clave estará en controlar el ritmo del juego y minimizar los errores.
        
        
        
        Predicción: Victoria para Jeonju KCC Egis por un margen cercano al doble dígito.
     
    
        Predicción: Seoul Samsung Thunders vs. Busan KT Sonicboom
        Aunque Busan tiene jugadores individuales que pueden cambiar el curso del partido rápidamente, Seoul tiene la ventaja con su experiencia y juego colectivo. Es probable que Seoul imponga su estilo y mantenga la ventaja durante todo el partido.
        
        
        Predicción: Victoria para Seoul Samsung Thunders con una diferencia moderada.
     
    
        
Predicción: Ulsan Mobis Phoebus vs. Goyang Orion Orions
YegorLysenko/GraphicEditor<|file_sep|>/GraphicsEditor/Commands/SelectShapeCommand.cs
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Input;
using GraphicsEditor.Controls;
using GraphicsEditor.Models;
using GraphicsEditor.Tools;
namespace GraphicsEditor.Commands
{
	/// Команда выбора фигуры
	/// 
	public class SelectShapeCommand : CommandBase
	{
		private readonly ITool _tool;
		public SelectShapeCommand(ITool tool)
		{
			_tool = tool;
		}
		public override bool CanExecute(object parameter)
		{
			return true;
		}
		public override void Execute(object parameter)
		{
			var shapes = ((IList)parameter).ToList();
			if (_tool is ToolSelect)
				shapes.ForEach(shape => shape.IsSelected = true);
			else if (_tool is ToolMove)
				shapes.Where(shape => shape.IsSelected).ToList().ForEach(shape => shape.IsSelected = false);
			else if (_tool is ToolDelete)
				shapes.Where(shape => shape.IsSelected).ToList().ForEach(shape => shape.Delete());
			else if (_tool is ToolEditProperties)
				shapes.Where(shape => shape.IsSelected).ToList().ForEach(shape => shape.EditProperties());
			else if (_tool is ToolGrouping)
				shapes.Where(shape => shape.IsSelected).ToList().ForEach(shape => shape.IsSelected = false);
			else if (_tool is ToolUngrouping)
				shapes.Where(shape => shape.IsSelected).ToList().ForEach(shape => shape.IsSelected = false);
			CommandManager.InvalidateRequerySuggested();
		}
	}
}<|repo_name|>YegorLysenko/GraphicEditor<|file_sep|>/GraphicsEditor/Commands/CopyCommand.cs
using System.Windows.Input;
namespace GraphicsEditor.Commands
{
	public class CopyCommand : CommandBase
	{
		private readonly Document _document;
		public CopyCommand(Document document)
		{
			_document = document;
		}
		public override bool CanExecute(object parameter)
		{
			return _document.SelectedShapes.Any();
		}
		public override void Execute(object parameter)
		{
			var selectedShapes = _document.SelectedShapes.ToList();
			foreach (var shape in selectedShapes) shape.Clone();
			CutPasteClipboard.SetCopyItems(selectedShapes);
			CutPasteClipboard.SetCutItems(new List());
			CommandManager.InvalidateRequerySuggested();
		}
		
	}
}<|file_sep|># GraphicEditor
Простой редактор графики на WPF
Поддерживает:
- Рисование различных фигур (прямоугольников и окружностей) с помощью мыши или при помощи командной строки.
- Перемещение фигур мышью.
- Выбор нескольких фигур мышью или при помощи командной строки.
- Копирование и вставку фигур.
- Создание группы из выбранных фигур.
- Разгруппировку группы.
- Удаление выбранных фигур.
- Редактирование свойств выбранной фигуры.
Также в редакторе реализованы возможности отмены и повтора действий пользователя.
<|repo_name|>YegorLysenko/GraphicEditor<|file_sep|>/GraphicsEditor/Models/Group.cs
using System.Collections.Generic;
using System.Windows.Media;
namespace GraphicsEditor.Models
{
	public class Group : Shape
	{
		
	    public Group()
	    {
	        Children = new List();
	    }
	    public List Children { get; set; }
	    public override void Draw(DrawingContext dc)
	    {
	        foreach (var child in Children) child.Draw(dc);
	    }
	    
	    public override void EditProperties()
	    {
	        foreach (var child in Children) child.EditProperties();
	    }
	    public override void Move(Point offset)
	    {
	        foreach (var child in Children) child.Move(offset);
	        base.Move(offset);
	    }
	    
	    public override void Delete()
	    {
	        foreach (var child in Children) child.Delete();
	        base.Delete();
	    }
	    
	    
	    public override string GetDescription()
	    {
	        return string.Format("Группа:n{0}", string.Join("n", Children.Select(child => child.GetDescription())));
	    }
	    
	    protected override void OnMouseLeftButtonDown(Point mousePosition)
	    {
	        base.OnMouseLeftButtonDown(mousePosition);
	        IsSelected = true;
	        
	        foreach (var child in Children) 
	            if (!child.IsSelected) 
	                child.OnMouseLeftButtonDown(mousePosition);
	        
	        IsDragging = true;
	    }
	    
	    protected override void OnMouseMove(Point mousePosition)
	    {
	        if (!IsDragging) return;
	        var offset = new Point(ActualPosition.X - Position.X,
	                ActualPosition.Y - Position.Y);
	        Move(offset);
	        foreach (var child in Children) 
	            if (child.IsDragging) 
	                child.OnMouseMove(mousePosition);
	        
	        Position = mousePosition;
	        ActualPosition = Position + offset;
	        
	        IsDragging = true;
	        
	        base.OnMouseMove(mousePosition);
	        
	        IsDragging = false;
	        
	        Position = ActualPosition - offset;
	        
	        foreach (var child in Children) 
	            if (!child.IsDragging) 
	                child.Position = ActualPosition + (child.Position - Position);
	        
	        InvalidateVisual();
	    }
	    
	    protected override void OnMouseLeftButtonUp(Point mousePosition)
	    {
	        
	        IsDragging = false;
	        
	        foreach (var child in Children) 
	            if (child.IsDragging) 
	                child.OnMouseLeftButtonUp(mousePosition);
	        
	        base.OnMouseLeftButtonUp(mousePosition);
	    }
	    
	
	    
	
	    
	
	    
	
	    
	
	    
	
	    
	
	    
	
	    
	
	    
	
	    
	
	    
	
	    
	
	   
	   
	   protected override void OnChildPropertyChanged(Shape changedChild,
	       string propertyName)
	   {
	       InvalidateVisual();
	   }
	
	   
	   protected override void OnChildAdded(Shape addedChild)
	   {
	       InvalidateVisual();
	   }
	
	   
	   protected override void OnChildRemoved(Shape removedChild)
	   {
	       InvalidateVisual();
	   }
	
	   
	   protected override bool IsHit(Point hitPoint)
	   {
	       return false;
	   }
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
		
}
}<|repo_name|>YegorLysenko/GraphicEditor<|file_sep|>/GraphicsEditor/Commands/DrawRectangleCommand.cs
using System.Windows.Input;
namespace GraphicsEditor.Commands
{
	public class DrawRectangleCommand : CommandBase
	{
		
	     private readonly Document _document;
	     public DrawRectangleCommand(Document document)
	     {
	         _document = document;
	     }
	     public override bool CanExecute(object parameter)
	     {
	         return true;
	     }
	     public override void Execute(object parameter)
	     {
	         var point = (Point)parameter;
	         var rectangle = new Rectangle(point.X - 50 / 2,
	             point.Y - 50 / 2,
	             50,
	             50);
	         rectangle.StrokeThickness = 1;
	         rectangle.Stroke =
	             new SolidColorBrush(System.Windows.Media.Colors.Black);
	         _document.AddShape(rectangle);
	         CommandManager.InvalidateRequerySuggested();
	     }
	 
	   
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
	  
	 
		
}
}<|repo_name|>YegorLysenko/GraphicEditor<|file_sep|>/GraphicsEditor/Tools/Tool.cs
using System.Windows.Input;
namespace GraphicsEditor.Tools
{
	public interface ITool : ICommandSource
	{
		 
	      bool IsMove { get; set; }
	      bool IsSelect { get; set; }
	      bool IsDelete { get; set; }
	      bool IsEditProperties { get; set; }
	      bool IsGrouping { get; set; }
	      bool IsUngrouping { get; set; }
	      bool IsDrawRectangle { get; set; }
	      bool IsDrawCircle { get; set; }
	 
		  
		  
		  
		  
		  
		  
		  
		  
		  
		  
		  
		  
		  
		  
		  
		  
		  
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		
}
}<|file_sep|>using System.Collections.Generic;
using System.Linq;
using System.Windows.Media;
namespace GraphicsEditor.Models
{
	public abstract class Shape : ShapeBase
	{
		
	     private static readonly Dictionary _brushes =
	             new Dictionary()
	             {{
	                 {"Red", new[] {new SolidColorBrush(System.Windows.Media.Colors.Red),
	                 new SolidColorBrush(System.Windows.Media.Colors.DarkRed)}},
	                 {"Blue", new[] {new SolidColorBrush(System.Windows.Media.Colors.Blue),
	                 new SolidColorBrush(System.Windows.Media.Colors.DarkBlue)}},
	                 {"Green", new[] {new SolidColorBrush(System.Windows.Media.Colors.Green),
	                 new SolidColorBrush(System.Windows.Media.Colors.DarkGreen)}},
	                 {"Yellow", new[] {new SolidColorBrush(System.Windows.Media.Colors.Yellow),
	                 new SolidColorBrush(System.Windows.Media.Colors.Gold)}},
	             }};
	     private int _brushIndex;
	     public Shape()
	     {
	         StrokeThickness = 1;
	         Stroke =
	             new SolidColorBrush(System.Windows.Media.Colors.Black);
	         Fill =
	             Brushes.Transparent;
	         _brushIndex = 0;
	         ShapeType =
	             "Неизвестный тип";
	     }
	     public int BrushIndex
	     {
	         get { return _brushIndex; }
	         set { Set(ref _brushIndex,
	             value); }
	     }
	     public string ShapeType { get; set; }
	     public Brush[] BrushesForType(string type)
	     {
	         return _brushes.ContainsKey(type) ? _brushes[type] : null;
	     }
	     public abstract void Draw(DrawingContext dc);
	     protected virtual void OnMouseLeftButtonDown(Point mousePosition)
	     {
	         if (!IsSelectable) return;
	         var shapes =
	             GetDescendantsAndSelf(this);
	         foreach (var shape in shapes.Where(s => s != this && s.IsHit(mousePosition)))
	             if (shape != this && !shape.IsGrouped())
	                shape.OnMouseLeftButtonDown(mousePosition);
	         this.OnMouseLeftButtonDown(mousePosition);
	     }
	     protected virtual void OnMouseMove(Point mousePosition)
	     {
	         if (!IsDragging && !IsSelectable && !IsMovable) return;
	         var shapes =
	             GetDescendantsAndSelf(this);
	         foreach (var shape in shapes.Where(s => s != this && s.IsHit(mousePosition