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); }
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); }
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); }
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; }
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(); }
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); }
/// <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); } }
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); }