public Player(Player player) { number = player.number; //head = player.head; cards = new List<Card>() ; OpenDeckC = new Card(player.OpenDeckC); TwoWalk = player.TwoWalk; SuidOfJeck = player.SuidOfJeck; for (int i = 0; i < player.cards.Count; i++) { cards.Add(new Card(player.cards[i])); } walks = new List<int>(); for (int i = 0; i < player.walks.Count; i++) { //walks[i] = player.walks[i]; walks.Add(player.walks[i]); } //headWalk = player.headWalk; }
/// <summary> /// Перевіряє чи можливий хід після чого робить його відповідною картою відповідного гравця /// </summary> /// <param name="cards"> Карта якою ходить гравець</param> /// <param name="player"> Гравець який ходить</param> /// <returns>Повертає true в разі успішності ходу інакше false</returns> private bool Move(Card cards, Player player) { if (!_isSecondMove && //Якщо це перша карта за хід (((cards.Suid() == _openDeck[CountCardsInOpenDeck - 1].Suid() || //Якщо це така ж карта по масті cards.Priority() == _openDeck[CountCardsInOpenDeck - 1].Priority() || //Або це така ж карту за пріорітетом cards.Priority() == 11) && //Або ж ця карта валет _openDeck[CountCardsInOpenDeck - 1].Priority() != 11) || //И якщо остання карта в колоді не валет // Якщо ж валет то перевірити чи відповідає загадіній раніше карті іншим гравцем ((cards.Priority() == 11 || cards.Suid() == _suitOfJeck) && _openDeck[CountCardsInOpenDeck - 1].Priority() == 11)) ) { if (cards.Priority() != 6) _isSecondMove = true; //if (cards.Priority() == 11) // numbJacks++; if (cards.Priority() == 11 && _selectPlayer.Number == 1) _activeChoice = true; _openDeck.Add(cards); //openDeck[HeadOpDeck] = cards; //headOpDeck++; for (int i = 0; i < player.Cards.Count; i++) { if (player[i] == cards) { player.PopCard(i); break; } } ReactionOnCards(cards); _isToCard = true; return true; } return false; }
/// <summary> /// Вибирає гравця якому буде передано 2 карти якщо заданий гравець покладе 8 /// </summary> private void NextTakengTwoCard() { bool f = false; if (_takengTwoCards.Number == _players.Count()) { _takengTwoCards = _players[0]; _nextSelectPlayer = _players[0]; f = true; } if (_takengTwoCards.Number == _players.Count() - 1 && !f) { _takengTwoCards = _players[_players.Count() - 1]; _nextSelectPlayer = _players[_players.Count() - 1]; f = true; } if (_takengTwoCards.Number < _players.Count() - 1 && !f) { _takengTwoCards = _players[_takengTwoCards.Number]; _nextSelectPlayer = _players[_takengTwoCards.Number - 1]; } if (_takengTwoCards == _selectPlayer) { NextTakengTwoCard(); _nextSelectPlayer = _selectPlayer; } }
private Player AI(Player Pl) { List<Player> res = new List<Player>(); Player B = new Player(Pl); for (int i = 0; i < B.Cards.Count; i++) { if (B.Walking(i)) { res.Add(AI(B)); B = new Player(Pl); } if (i + 1 == B.Cards.Count && res.Count == 0) { return B; } } if (res.Count == 0) { return B; } Player res2 = res[0]; for (int i = 1; i < res.Count; i++) { if (res[i].NumberOfPoints(1) < res2.NumberOfPoints(1)) res2 = res[i]; } return res2; }
private int AISuid(Player pl) { int[] suid = new int[4]; for (int i = 0; i < pl.Cards.Count; i++) suid[pl[i].Suid()]++; int res = 0; for (int i = 1; i < 4; i++) if (suid[res] < suid[i]) { res = i; } return res; }
public void NextPlayer() { if (!IsToCard && _selectPlayer.Number == 1 && ShowMessage != null) { ShowMessage("Щоб пропустити хід, візьміть карту!"); } if (_openDeck[CountCardsInOpenDeck - 1].Priority() == 6 && _selectPlayer.Number == 1 && ShowMessage != null) { ShowMessage("Необхідно накрити шістку, якщо не має підходящої карти візьміть ще одну!"); } //Якщо не лежить 6 та покладена карта if (_openDeck[CountCardsInOpenDeck - 1].Priority() != 6 && IsToCard && !_gameOver) { //if (ActivChooce) // ChooiseSuidJack(); _activeChoice = false; _selectPlayer = _nextSelectPlayer; NextSelectdPlayer(); _takengTwoCards = _nextSelectPlayer; _isSecondMove = false; _isToCard = false; DistributionOver(); //numbJacks = 0; } if (_selectPlayer.Number != 1 && !_gameOver) { StartAI(); } }
/// <summary> /// Розпочинає нову гру /// </summary> public void NewGame() { Initialize(); _suitOfJeck = 0; _selectPlayer = _players[0]; _nextSelectPlayer = _players[1]; _takengTwoCards = _players[1]; NewDistribution(); }
/// <summary> /// Призначення гравцям ролей /// </summary> private void SetPlayersRole() { _selectPlayer = _globalSelectedPlayer; if (_selectPlayer.Number < _players.Count()) { _nextSelectPlayer = _players[_selectPlayer.Number]; _takengTwoCards = _players[_selectPlayer.Number]; } else { _nextSelectPlayer = _players[0]; _takengTwoCards = _players[0]; } }
/// <summary> /// Перевіряє чи можливо докласти ще одну карту після того як була покладена карта за заданий хід /// </summary> /// <param name="cards">Карта яку хоче покласти гравець</param> /// <param name="player">Гравець який хоче покласти карту</param> /// <returns>Повертає true в разі успішності ходу інакше false</returns> private bool SecondMove(Card cards, Player player) { if (_isSecondMove && cards.Priority() == _openDeck[CountCardsInOpenDeck - 1].Priority()) { //if (cards.Priority() == 11) // numbJacks++; _openDeck.Add(cards); //openDeck[HeadOpDeck] = cards; //headOpDeck++; for (int i = 0; i < player.Cards.Count; i++) { if (player[i] == cards) { player.PopCard(i); } } ReactionOnCards(cards); return true; } return false; }
/// <summary> /// Додавання гравцю карту з закритої колоди з використанням анімації /// </summary> /// <param name="player">Гравець якому буде передана карта</param> private void PutCardToPlayer(Player player) { FlipDeck(); //int speed = 80; if (_selectPlayer.Number != 1) { _deck[_deck.Count - 1].Animation = true; Animation(_deck[_deck.Count - 1], player.Place.X, player.Place.Y, false); _deck[_deck.Count - 1].Animation = false; } player.PushCard(_deck[_deck.Count - 1]); _deck.RemoveAt(_deck.Count - 1); }