/// <summary> /// Koncowka lewy, wykonuje sie po wykonaniu ruchu przez gracza /// </summary> private void EndTrick() { GameShape.CardMouseLeftButtonDown -= new MouseButtonEventHandler(GameShape_CardMouseLeftButtonDown); Canvas.SetZIndex(Player4Trick, 4); bool renons; for (int i = 1; i < WistPlayerNumber; i++) { Deck playerXMoves = new Deck(PlayersHandDecks[i - 1].Deck); playerXMoves = GameRules.PossibleMoves(PlayersHandDecks[i - 1].Deck, WistCard, out renons); PlayCardChosenAlgorithm(playerXMoves, PlayersTricks[i - 1], PlayersUsedCards[i - 1], PlayersAlgorithms[i - 1]); PlayersHandDecks[i - 1].Deck.Sort(); //sprawdz czy dolozyl do koloru, jezeli nie to ustaw krotkosc if (renons) { PlayersUsedCards[i - 1].CardRenons[WistCard.Suit] = true; } Canvas.SetZIndex(PlayersTricks[i - 1], 4 + i); } GameShape.MouseLeftButtonDown += new MouseButtonEventHandler(GameShape_MouseLeftButtonDown); GameShape.KeyUp += new KeyEventHandler(GameShape_KeyUp); //BeginTrick(); }
private void CleanUpTrick() { //dodaj numer wistujacego juz w zakresie 0-3 wistList.Add(WistPlayerNumber - 1); //sprawdz kto wygral lewe i ustaw nowego wistujacego WistPlayerNumber = GameRules.TrickWinner(Player1Trick.Deck.TopCard, Player2Trick.Deck.TopCard, Player3Trick.Deck.TopCard, Player4Trick.Deck.TopCard, TrumpColor, WistPlayerNumber); WistCard = null; //w tym miejscu wygrany jest juz wyliczony Hand trickVictoryPlayer = PlayersUsedCards[WistPlayerNumber - 1]; //Hand trickVictoryPlayer = DetermineWhichPlayerUsedCards(WistPlayerNumber); //dodaj wygrane karty do reki gracza trickVictoryPlayer.AddInHand(new Card(Player1Trick.Deck.TopCard)); trickVictoryPlayer.AddInHand(new Card(Player2Trick.Deck.TopCard)); trickVictoryPlayer.AddInHand(new Card(Player3Trick.Deck.TopCard)); trickVictoryPlayer.AddInHand(new Card(Player4Trick.Deck.TopCard)); //przesun karty ze srodka do talii zuzytych kart Player1Trick.Deck.Draw(PlayedCards.Deck, 1); Player2Trick.Deck.Draw(PlayedCards.Deck, 1); Player3Trick.Deck.Draw(PlayedCards.Deck, 1); Player4Trick.Deck.Draw(PlayedCards.Deck, 1); PlayedCards.Deck.AllCardsNotVisible(); PlayedCards.Deck.Sort(); this.tricksNS.DataContext = Player2UsedCards.CardsInHand.Count / 4 + Player4UsedCards.CardsInHand.Count / 4; this.tricksWE.DataContext = Player1UsedCards.CardsInHand.Count / 4 + Player3UsedCards.CardsInHand.Count / 4; currentTrick.Clear(); }
/// <summary> /// Zwraca obecnie wygrywajaca lewe karte. Jezeli jest tylko 1 karta w lewie to zwroci ja. /// Kolorem obowiazujacym jest kolor wistu (czyli 1sza karta na liscie). /// </summary> /// <param name="curTrickCards">Obecna lewa. Moze sie skladac z od 0 do 4 kart.</param> /// <param name="outHighestCard">Zwracana karta w out'ie ktora jest najwysza.</param> /// <returns>PRAWDA jezeli jest jakas karta w lewie. Jezeli lewa jest pusta to nie ma co zwroc /// i zwraca FALSE, zas w out'ie jest null.</returns> public bool curTrickHighestCard(List <Card> curTrickCards, out Card outHighestCard) { Card highestCard = null; //jezeli pusty to zwroc nulla i false (nie ma najwyzszej) if (curTrickCards.Count <= 0) { outHighestCard = highestCard; return(false); } highestCard = curTrickCards.First(); //jezeli jeden element to zwroc go if (curTrickCards.Count == 1) { outHighestCard = highestCard; return(true); } //jezeli wiecej niz 1 element to porownaj po kolei for (int i = 0; i < curTrickCards.Count; i++) { GameRules.CompareCards(highestCard, curTrickCards[i], TrumpColor, out highestCard); } outHighestCard = highestCard; return(true); }
private void GameShape_CardMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { //zablokuj eventy //GameShape.CardDrag -= new CardDragEventHandler(GameShape_CardDrag); GameShape.CardMouseLeftButtonDown -= new MouseButtonEventHandler(GameShape_CardMouseLeftButtonDown); bool renons; //klikniecie na karte sprobuje zagrac karte var cardShapeClicked = (CardShape)sender; CardShape card = (CardShape)sender; var gameShape = GameShape.GetGameShape(card.Card.Deck.Game); var oldDeckShape = gameShape.GetDeckShape(card.Card.Deck); if (oldDeckShape.Name == "Player4Hand") { //wygeneruj mozliwe ruchy gracza Deck player4Moves = new Deck(Player4Hand.Deck); player4Moves = GameRules.PossibleMoves(Player4Hand.Deck, WistCard, out renons); Player4Hand.Deck.Sort(); //karta ktora chce zagrac gracz Card userPlayedCard = new Card(card.Card.Rank, card.Card.Suit, player4Moves); //sprawdz czy karta ktora chce zagrac gracz jest w jego mozliwych ruchac if (player4Moves.Has(userPlayedCard.Rank, userPlayedCard.Suit)) { Player4UsedCards.AddPlayed(userPlayedCard); Player4UsedCards.SortHigh(); //jezeli graz jest wistujacym to jego ruch staje sie karta wistujaca if (WistPlayerNumber == 4) { WistCard = userPlayedCard; } //jezeli nie jest to sprawdz czy nie ma krotkosci else if (renons) { Player4UsedCards.CardRenons[WistCard.Suit] = true; } PlayCard(Player4Hand.Deck, Player4Trick.Deck, card.Card); //card.Card.Deck = Player4Trick.Deck; currentTrick.Add(userPlayedCard); EndTrick(); return; } } //Nie zagral prawidlowej karty - odblokuj klikanie GameShape.CardMouseLeftButtonDown += GameShape_CardMouseLeftButtonDown; //GameShape.CardMouseLeftButtonDown += new MouseButtonEventHandler(GameShape_CardMouseLeftButtonDown); //gameShape.GetDeckShape(card.Card.Deck).UpdateCardShapes(); UpdateAllCardShapes(); //Canvas.SetZIndex(oldDeckShape, 0); }
/// <summary> /// Poczatek lewy, wykonuje sie przed wykonaniem ruchu przez gracza /// </summary> private void BeginTrick() { GameShape.CardMouseLeftButtonDown -= new MouseButtonEventHandler(GameShape_CardMouseLeftButtonDown); bool renons; int i; if (DetermineWhichPlayerHand(WistPlayerNumber).Deck.Cards.Count == 0) { //zakoncz gre EndGame(); return; } if (WistPlayerNumber == 4) { GameShape.CardMouseLeftButtonDown += new MouseButtonEventHandler(GameShape_CardMouseLeftButtonDown); return; //jezeli gracz jest wistujacym to skoncz } //zaczyna od numeru gracza wistujacego - gdy wistujacym jest gracz nie wejdzie ani razu for (i = WistPlayerNumber; i < 4; i++) { Deck playerXMoves;// = new Deck(PlayersHandDecks[i-1].Deck); //pierwszy gracz jest wistujacym if (i == WistPlayerNumber) { playerXMoves = GameRules.PossibleMoves(PlayersHandDecks[i - 1].Deck, null, out renons); WistCard = new Card(PlayCardChosenAlgorithm(playerXMoves, PlayersTricks[i - 1], PlayersUsedCards[i - 1], PlayersAlgorithms[i - 1])); } //kolejni gracze musze dostosowac ruchy do wistujacego else { playerXMoves = GameRules.PossibleMoves(PlayersHandDecks[i - 1].Deck, WistCard, out renons); PlayCardChosenAlgorithm(playerXMoves, PlayersTricks[i - 1], PlayersUsedCards[i - 1], PlayersAlgorithms[i - 1]); //sprawdz czy dolozyl do koloru, jezeli nie to ustaw krotkosc if (renons) { PlayersUsedCards[i - 1].CardRenons[WistCard.Suit] = true; } } Canvas.SetZIndex(PlayersTricks[i - 1], i); PlayersHandDecks[i - 1].Deck.Sort(); } GameShape.CardMouseLeftButtonDown += new MouseButtonEventHandler(GameShape_CardMouseLeftButtonDown); return; }
//graj sam //NIESKONCZONA - chyba juz skonczona private void PlayAutoTrick(int @howManyTricks = 13) { GameShape.CardMouseLeftButtonDown -= new MouseButtonEventHandler(GameShape_CardMouseLeftButtonDown); bool renons; int i; if (PlayersHandDecks[WistPlayerNumber - 1].Deck.Cards.Count == 0) { //zakoncz gre EndGame(); return; } for (i = 0; i < 4; i++) { int index = (WistPlayerNumber - 1 + i) % 4; Deck playerXMoves = new Deck(PlayersHandDecks[index].Next.Deck); //pierwszy gracz jest oczywiscie wistujacym if (i == 0) { playerXMoves = GameRules.PossibleMoves(PlayersHandDecks[index].Deck, null, out renons); WistCard = new Card(PlayCardChosenAlgorithm(playerXMoves, PlayersTricks[index], PlayersUsedCards[index], PlayersAlgorithms[index])); } //kolejni gracze musze dostosowac ruchy do wistujacego else { playerXMoves = GameRules.PossibleMoves(PlayersHandDecks[index].Deck, WistCard, out renons); PlayCardChosenAlgorithm(playerXMoves, PlayersTricks[index], PlayersUsedCards[index], PlayersAlgorithms[index]); //sprawdz czy dolozyl do koloru, jezeli nie to ustaw krotkosc if (renons) { PlayersUsedCards[index].CardRenons[WistCard.Suit] = true; } } Canvas.SetZIndex(PlayersTricks[index], i); PlayersHandDecks[index].Deck.Sort(); } GameShape.MouseLeftButtonDown += new MouseButtonEventHandler(GameShape_MouseLeftButtonDown); }