//ловим клетку над которой отпустили фигуру //private void rectangle_Drop(object sender, DragEventArgs e) private void rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (IsFigureDragging&&(sender!=null)&&(CellMadeMove!=null)&&(sender is Rectangle)) { Rectangle rec = sender as Rectangle; Cell cell = gameBoard.GetCellByRectangle(rec); cell.figure = CellMadeMove.figure; cell.figure.SetFigureToCell(cell.rown, cell.coln); CellMadeMove.SetCellDefaultcolor(); CellMadeMove.figure = null; CellMadeMove = null; cell.figure.img = ImgOfDrugginFigure; IsFigureDragging = false; } }
//начинаем тащить фигуру private void img_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Image img = sender as Image; if (img != null) { //определяем клетку CellMadeMove = gameBoard.GetCellByImg(img); if (CellMadeMove != null) { ImgOfDrugginFigure = img; if (CellMadeMove.GetCellCollor()) CellMadeMove.rectangle.Fill = new SolidColorBrush(Colors.Orange); else CellMadeMove.rectangle.Fill = new SolidColorBrush(Colors.Yellow); } else { return; } } else return; // Запоминаем текущее положение мыши lastx = e.GetPosition(null).X; lasty = e.GetPosition(null).Y; // Начинаем тащить, "хватаем" картинку, что бы можно было её указывать координаты явно ((FrameworkElement)sender).CaptureMouse(); //стивим флаг, что идет перетаскивание IsFigureDragging = true; }
/// Инициализируем игру private void InitGame() { //очищаем прошлые фигуры if (CanvasGameBoard.Children.Count > 0) { foreach (object obj in CanvasGameBoard.Children) { if (obj is Image) (obj as Image).Source = null; } CanvasGameBoard.Children.Clear(); } //клетка которая сделал ход (в начале игры такой нет) CellMadeMove = null; //инициализируем новую доску gameBoard = new GameBoard(); //создаем списки фигур if (FigureInGame == null) FigureInGame = new List<Figure>(); else FigureInGame.Clear(); if (FigureBit == null) FigureBit = new List<Figure>(); else FigureBit.Clear(); //инициализируем клетки for (int i=0; i<=7; i++) { for (int j=0; j<=7; j++) { gameBoard.Cells[i,j] = new Cell(i+1,j+1); //добавляем клетку на холст CanvasGameBoard.Children.Add(gameBoard.Cells[i,j].rectangle); //подписываем клетку на событие отпускание мыши при перетаскивании фигуры gameBoard.Cells[i, j].rectangle.MouseLeftButtonUp += new MouseButtonEventHandler(rectangle_MouseLeftButtonUp); } } //инициализируем фигуры (делаем это отдельно иначе фигуры залазят под клетки) for (int i=0; i<=7; i++) { for (int j=0; j<=7; j++) { switch (i) { //черные фигуры case 0: switch (j) { case 0 : gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, true, 2); break; case 1: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, true, 3); break; case 2: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, true, 4); break; case 3: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, true, 6); break; case 4: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, true, 5); break; case 5: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, true, 4); break; case 6: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, true, 3); break; case 7: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, true, 2); break; default: break; } break; //черные пешки case 1: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, true, 1); break; //белые пешки case 6: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, false, 1); break; //белые фигуры case 7: switch (j) { case 0 : gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, false, 2); break; case 1: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, false, 3); break; case 2: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, false, 4); break; case 3: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, false, 6); break; case 4: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, false, 5); break; case 5: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, false, 4); break; case 6: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, false, 3); break; case 7: gameBoard.Cells[i, j].InitFigure(i + 1, j + 1, false, 2); break; default: break; } break; default: break; } if ((gameBoard.Cells[i, j].figure != null) && (gameBoard.Cells[i, j].figure.img != null)) { //добавляем фигуру в список фигур в игре FigureInGame.Add(gameBoard.Cells[i, j].figure); //добавляем фигуры на холст CanvasGameBoard.Children.Add(gameBoard.Cells[i, j].figure.img); //подписываем картинку фигуры на события мыши gameBoard.Cells[i, j].figure.img.MouseLeftButtonDown +=new MouseButtonEventHandler(img_MouseLeftButtonDown); gameBoard.Cells[i, j].figure.img.MouseLeftButtonUp +=new MouseButtonEventHandler(img_MouseLeftButtonUp); gameBoard.Cells[i, j].figure.img.MouseMove +=new MouseEventHandler(img_MouseMove); } } } }
public Figure(int r, int c, bool IsBlack, int fnum, Cell _cell) { img = new Image(); isBlack = IsBlack; if (_cell != null) cell = _cell; //привязываем картинку к фигуре if (isBlack) { switch (fnum) { case 1: img.Source = new BitmapImage(new Uri("/CheesMaster;component/ImagesFigure/bpawn.png", UriKind.Relative)); break; case 2: img.Source = new BitmapImage(new Uri("/CheesMaster;component/ImagesFigure/btower.png", UriKind.Relative)); break; case 4: img.Source = new BitmapImage(new Uri("/CheesMaster;component/ImagesFigure/belephant.png", UriKind.Relative)); break; case 3: img.Source = new BitmapImage(new Uri("/CheesMaster;component/ImagesFigure/bhorse.png", UriKind.Relative)); break; case 5: img.Source = new BitmapImage(new Uri("/CheesMaster;component/ImagesFigure/bqueen.png", UriKind.Relative)); break; case 6: img.Source = new BitmapImage(new Uri("/CheesMaster;component/ImagesFigure/bking.png", UriKind.Relative)); break; default: break; } } else { switch (fnum) { case 1: img.Source = new BitmapImage(new Uri("/CheesMaster;component/ImagesFigure/wpawn.png", UriKind.Relative)); break; case 2: img.Source = new BitmapImage(new Uri("/CheesMaster;component/ImagesFigure/wtower.png", UriKind.Relative)); break; case 4: img.Source = new BitmapImage(new Uri("/CheesMaster;component/ImagesFigure/welephant.png", UriKind.Relative)); break; case 3: img.Source = new BitmapImage(new Uri("/CheesMaster;component/ImagesFigure/whorse.png", UriKind.Relative)); break; case 5: img.Source = new BitmapImage(new Uri("/CheesMaster;component/ImagesFigure/wqueen.png", UriKind.Relative)); break; case 6: img.Source = new BitmapImage(new Uri("/CheesMaster;component/ImagesFigure/wking.png", UriKind.Relative)); break; default: break; } } SetFigureToCell(r, c); //img.SetValue(Grid.RowProperty, r); //img.SetValue(Grid.ColumnProperty, c); }