예제 #1
0
        private void AddKardBoyBot()//обработка отбивания бота
        {
            Dictionary <int, Kard> botBoyKards;
            List <Kard>            kards = new List <Kard>();

            kards.AddRange(gameField.KardBoy.Values);
            kards.AddRange(gameField.KardHod.Values);
            foreach (BotGamer k in pleayerKardBot)
            {
                botBoyKards = k.AddKardBoyBot(KardsPodkid, gameField.KardBoy.Values.ToList().Count);
                if (botBoyKards != null)
                {
                    foreach (var val in botBoyKards)
                    {
                        GetAnimateCard(k.X, k.Y, (gameField.X + 50) + (val.Key - 1) * 75, gameField.Y);
                        gameField.AddkardBoy(val.Value, val.Key);
                    }
                    MoveKard = null;
                    RunClearListCancelHod(true, ButtonsEnable.Otboy);
                }
                else
                {
                    GameMessage("Не могу побить! Забираю.", GameMes.MessageBot, (Bitmap)Properties.Resources.ResourceManager.GetObject("BotSmileGr"));
                    gameField.DelkardBoy();
                    gameField.DelkardHod();
                    GetAnimateCard(gameField.X, gameField.Y, k.X + k.Dist * k.GetKard().Count, k.Y);
                    k.Zabrat(kards);
                    DobavlenieKards();
                }
            }
            KardsPodkid.Clear();
            RunClearListCancelHod(false, ButtonsEnable.Cancel);
            hist.ResetField(ref flagC);
        }
예제 #2
0
        private void AddKardHodBot()//обработка хода бота
        {
            Dictionary <int, Kard> botHodKards;

            foreach (BotGamer k in pleayerKardBot)
            {
                botHodKards = k.AddKardHodBot(gameField.KardHod.Values.ToList(), gameField.KardBoy.Values.ToList());
                if (botHodKards.Count > 0)
                {
                    foreach (var val in botHodKards)
                    {
                        GetAnimateCard(k.X, k.Y, (gameField.X + 50) + (val.Key - 1) * 75, gameField.Y);
                        gameField.AddkardHod(val.Value);
                        k.DelKard(val.Value);
                    }
                    MoveKard = null;
                    RunClearListCancelHod(true, ButtonsEnable.Zabraat);
                }
                else
                {
                    GameMessage("У меня нет что подкинуть! Отбой.", GameMes.MessageBot, (Bitmap)Properties.Resources.ResourceManager.GetObject("BotSmile"));
                    OtboyCreate();
                }
            }

            RunClearListCancelHod(false, ButtonsEnable.Cancel);
            hist.ResetField(ref flagC);
        }
예제 #3
0
 public bool AddKardBoy(int x, int y)//обработка отбивания
 {
     for (int i = 0; i < gameField.KardHod.Count; i++)
     {
         if (x >= (gameField.X + 50) + i * 75 && x <= (gameField.X + 50) + i * Constanta.CARD_WIDTH + Constanta.CARD_WIDTH &&
             y >= gameField.Y + 50 && y <= gameField.Y + 50 + Constanta.CARD_HEIGHT)
         {
             if (pleayerKard[0].AddKardBoy(MoveKard.GetKardIndex(0), gameField.KardHod, indexKardBoy) != null)
             {
                 try
                 {
                     KardsPodkid.Add(MoveKard.GetKardIndex(0));
                     gameField.AddkardBoy(MoveKard.GetKardIndex(0), indexKardBoy);
                     hist.CancelKardIndex.Add(indexKardBoy);
                     MoveKard = null;
                     hist.gamerKardsOld.Clear();
                     RunClearListCancelHod(true, ButtonsEnable.Cancel);
                     brush = Brushes.Green;
                     flag  = false;
                     RunClearListCancelHod(true, ButtonsEnable.AddKards);
                     frm.Invalidate();
                     return(true);
                 }
                 catch (ArgumentException)
                 {
                     KardsPodkid.Clear();
                     return(false);
                 }
             }
         }
     }
     return(false);
 }
예제 #4
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;
 }
예제 #5
0
 public void ComeBack()//вернуть карту назад игроку, если она не туда помещена
 {
     MoveKard = null;
     for (int j = 0; j < Constanta.kolPlayer; j++)
     {
         pleayerKard[j].DelAllKard();
         pleayerKard[j].AddKard(hist.gamerKardsOld);
     }
     hist.gamerKardsOld.Clear();
     brush = Brushes.Green;
     flag  = false;
     frm.Invalidate();
 }
예제 #6
0
        public bool AddKardHod(int x, int y)//обработка хода игрока
        {
            if (x >= 200 && x <= 200 + Constanta.GamFilWidth &&
                y >= 150 && y <= 150 + Constanta.GamFilHeight)
            {
                if (pleayerKard[0].AddKardHod(MoveKard.GetKardIndex(0), gameField.KardHod, gameField.KardBoy) != null)
                {
                    gameField.AddkardHod(MoveKard.GetKardIndex(0));
                    KardsPodkid.Add(MoveKard.GetKardIndex(0));
                    MoveKard = null;
                    hist.CancelKardIndex.Add(gameField.KardHod.Count);
                    hist.gamerKardsOld.Clear();

                    RunClearListCancelHod(true, ButtonsEnable.Cancel);
                    brush = Brushes.Green;
                    flag  = false;
                    RunClearListCancelHod(true, ButtonsEnable.AddKards);
                    frm.Invalidate();
                    return(true);
                }
            }
            return(false);
        }
예제 #7
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);
            }
        }
예제 #8
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);
 }