Пример #1
0
 private void AddKardGamer(KardGamer gam, int kolKard)//раздача карт
 {
     for (int i = 0; i < kolKard; i++)
     {
         if (koloda.GetKard().Count > i)
         {
             GetAnimateCard(koloda.X, koloda.Y, gam.X + gam.Dist * i, gam.Y, speed: 20);
             gam.AddKard(koloda.GetKardIndex(i));
             koloda.DelKard(i);
         }
     }
     MoveKard = null;
 }
Пример #2
0
        /// <summary>
        /// анимирует карты
        /// </summary>
        /// <param name="xStart"></param> коорднаты начала анимации
        /// <param name="yStart"></param>
        /// <param name="xEnd"></param>коорднаты конца анимации
        /// <param name="yEnd"></param>
        /// <param name="step"></param>параметр для количества шагов анимации (чем больше, тем меньше шагов)
        /// <param name="speed"></param>скорость движения
        private void GetAnimateCard(int xStart, int yStart, int xEnd, int yEnd, int step = 40, int speed = 50)  // возвращает верхнюю карту с удалением ее из стопки и анимацией перемещения
        {
            MoveKard = new KardGamer();
            MoveKard.AddKard(new Kard((Bitmap)Properties.Resources.ResourceManager.GetObject("_36")));
            MoveKard.X = xStart;
            MoveKard.Y = yStart;
            int    dx       = MoveKard.X - xEnd;
            int    dy       = MoveKard.Y - yEnd;
            double distance = Math.Sqrt(dx * dx + dy * dy); // расстояние от колоды до последней карты в стопке - приемнике (по Пифагору)
            int    count    = (int)(distance / step);       // количество шагов

            if (count > 0)
            {
                dx = dx / count;  // размер шага
                dy = dy / count;
            }
            for (int i = 0; i < count; i++) // перемещаем и показываем
            {
                MoveKard.X -= dx;
                MoveKard.Y -= dy;
                frm.Refresh(); // просто Invalidate() здесь не проходит
                Thread.Sleep(speed);
            }
        }
Пример #3
0
 public bool IsCaptured(int x, int y)//определение выбраной карты
 {
     MoveKard = new GamerMan();
     if (pleayerKard.Count > 0)
     {
         for (int j = 0; j < Constanta.kolPlayer; j++)
         {
             if (flagC)
             {
                 hist.AddCancelPlayerKard(pleayerKard[j], ref flagC);
             }
             hist.gamerKardsOld = pleayerKard[j].GetKard();
         }
         for (int j = 0; j < Constanta.kolPlayer; j++)
         {
             for (int i = 0; i < pleayerKard[j].GetKard().Count; i++)
             {
                 if (pleayerKard[j].X + pleayerKard[j].Dist * i <= x &&
                     pleayerKard[j].X + pleayerKard[j].Dist * i + pleayerKard[j].Dist >= x &&
                     pleayerKard[j].Y + Constanta.CARD_HEIGHT >= y &&
                     pleayerKard[j].Y <= y)
                 {
                     MoveKard.AddKard(pleayerKard[j].GetKardIndex(i));
                     MoveKard.X = pleayerKard[j].X + pleayerKard[j].Dist * i;
                     MoveKard.Y = pleayerKard[j].Y;
                     pleayerKard[j].DelKard(i);
                     dx = x - pleayerKard[j].X - pleayerKard[j].Dist * i;                    // расстояние от курсора до левого верхнего угла перемещаемой стопки
                     dy = y - pleayerKard[j].Y;
                     return(true);
                 }
             }
         }
     }
     hist.gamerKardsOld.Clear();
     return(false);
 }