예제 #1
0
        /// <summary>
        /// Rozdaje przygotowana reke. Karty rozdaje w takiej kolejnosci jak sa na liscie.
        /// </summary>
        /// <param name="preppedCards">Lista list przygotowanych kart. Jej calkowita liczba
        /// musi byc wynosic 4.</param>
        /// <param name="whichPlayer">Od ktorego gracza zaczynamy rozdawac karty.
        /// Gracze numerowani sa 1-4. Jest obsluga bledu przy przekroczeniu parametru.</param>
        public void GivePreppedHands(List <List <Card> > preppedCards, int whichPlayer)
        {
            Card readCard;
            int  inLength = preppedCards.Count;

            for (int i = 0; i < inLength; i++)
            {
                //chcemy jechac od konca
                for (int j = preppedCards[i].Count - 1; j <= 0; j++)
                {
                    //czytamy od konca, tak zeby 1sza karta z listy byla na szczycie
                    readCard = preppedCards[inLength - 1 - i][j];
                    if (_dealer.Has(readCard.Rank, readCard.Suit))
                    {
                        _dealer.GetCard(readCard.Rank, readCard.Suit).MoveToLast();
                    }
                }
            }

            int index = 0;

            //musza byc karty dla wszystkich 4 graczy, inaczej bedzie tutaj zwracac bledy
            for (int i = 0; i < 4; i++)
            {
                index = (i + ExtraFunctions.InRange(whichPlayer, 1, 4) - 1) % 4;
                _dealer.Draw(PlayersHandDecks[index].Deck, preppedCards[i].Count);
            }
        }
예제 #2
0
        /// <summary>
        /// Zapisuje pod wskazana sciezke wyniki. Format pliku to .txt. Nie jest to dobrze
        /// przegladac w notatniku, lepiej w jakim calc'u albo excel'u.
        /// </summary>
        /// <param name="results">Wyniki do zapisania.</param>
        /// <param name="fileName">Sciezka do pliku.</param>
        private void SaveFile(List <List <int> > results, string fileName)
        {
            StringBuilder resultStrings = new StringBuilder();

            //zapisz algorytm kazdego gracza
            resultStrings.Append("         ");
            for (int i = 0; i < 4; i++)
            {
                resultStrings.Append(" \t\t" + ExtraFunctions.AlgorithmName(mainWinRef.PlayersAlgorithms[i]));
            }
            resultStrings.AppendLine();

            //zeby bylo latwiej skopiowac do excela / calca zmienia sie 1sza linia
            resultStrings.Append("Nr partii\t\tGracz 1(W)\t\tGracz 2(N)\t\tGacz 3(E)\t\tGracz 4(S)");
            for (int i = 1; i < resultBox.Items.Count; i++)
            {
                resultStrings.AppendLine();
                resultStrings.Append(resultBox.Items[i].ToString());
            }

            using (StreamWriter outfile = new StreamWriter(fileName, false, Encoding.Unicode))
            {
                outfile.Write(resultStrings.ToString());
            }
        }
예제 #3
0
        /// <summary>
        /// Rozdaje przygotowana reke. Karty rozdaje w takiej kolejnosci jak sa na liscie.
        /// </summary>
        /// <param name="preppedCards">Lista przygotowanych kart. Jej calkowita liczba
        /// musi byc podzielna przez 4.</param>
        /// <param name="whichPlayer">Od ktorego gracza zaczynamy rozdawac karty.
        /// Gracze numerowani sa 1-4. Jest obsluga bledu przy przekroczeniu parametru.</param>
        public void GivePreppedHands(List <Card> preppedCards, int whichPlayer, bool @fromFile = false)
        {
            Card readCard;
            int  inLength = preppedCards.Count;

            if (fromFile)
            {
                TrumpCard = preppedCards.Last();
            }

            for (int i = 0; i < inLength; i++)
            {
                //czytamy od konca, tak zeby 1sza karta z listy byla na szczycie
                readCard = preppedCards[inLength - 1 - i];
                if (_dealer.Has(readCard.Rank, readCard.Suit))
                {
                    _dealer.GetCard(readCard.Rank, readCard.Suit).MoveToLast();
                }
            }

            int index = 0;

            //musza byc karty dla wszystkich 4 graczy, inaczej bedzie tutaj zwracac bledy
            for (int i = 0; i < 4; i++)
            {
                index = (i + ExtraFunctions.InRange(whichPlayer, 1, 4) - 1) % 4;
                _dealer.Draw(PlayersHandDecks[index].Deck, inLength / 4);
            }
        }
예제 #4
0
 private void textBoxRepetitionsRepeat_TextChanged(object sender, TextChangedEventArgs e)
 {
     try
     {
         mainWinRef.Repetitions = Convert.ToInt32(textBoxRepetitionsRepeat.Text);
         mainWinRef.Repetitions = ExtraFunctions.InRange(mainWinRef.Repetitions, 1, 500);
     }
     catch
     {
         mainWinRef.Repetitions = 1;
     }
 }
예제 #5
0
        /// <summary>
        /// Komputer rozgrywa okreslona liczbe rak, bez jakiejkolwiek interakcji z graczem.
        /// Kazde rozdanie jest powtorzone 1krotnie z powodu rotacji rak. 1 raz bo gramy w parach.
        /// </summary>
        /// <param name="repetitions">Liczba unikalnych rozdan - nie powinna byc zbyt duza
        /// poniewaz kazde rozdanie jest rotowanie 1 raz.</param>
        private void PlayContinuouslyRepeatHands(int repetitions)
        {
            ExtraFunctions.BeginTime();
            for (int i = 0; i < Repetitions; i++)
            {
                DealNextHand();

                //gramy w parach wiec 2 powtorzenia
                for (int k = 0; k < 2; k++)
                {
                    //policz na poczatku gry
                    BeginGameCalculations();
                    WhoStarts();
                    for (int j = 0; j < CardsPerPlayer; j++)
                    {
                        PlayAutoTrick();
                        GameShape.MouseLeftButtonDown -= new MouseButtonEventHandler(GameShape_MouseLeftButtonDown);
                        CleanUpTrick();
                    }
                    //zamien rece -> do badan
                    List <Card> changeHands = MakeListCardFromHands();
                    bool        rotation    = (k == 0) ? false : true; //sprawdz czy zrobic rotacje
                    EndGame(rotation);                                 //skoncz rozdanie
                    CollectCards();                                    //przenies karty do dealera
                    _dealer.InitPower(TrumpColor);                     //policz power kazdej karty znowu
                    GivePreppedHands(changeHands, 2);                  //daj 2giemu graczowi karty 1go (itd.)
                    DealerNumber += 1;

                    //posortuj
                    Player1Hand.Deck.Sort();
                    Player2Hand.Deck.Sort();
                    Player3Hand.Deck.Sort();
                    Player4Hand.Deck.Sort();
                }
            }
            //jak skonczyles liczyc/grac to pozbieraj karty
            CollectCards();
            ExtraFunctions.EndTime();
            SystemSounds.Asterisk.Play();   //dzwiek zakonczenia
            scoreWinRef.resultBox.Items.Add("Czas wykonania: " + ExtraFunctions.GlobalWatch.Elapsed.TotalSeconds.ToString() + " s");
        }
예제 #6
0
        public List <Card> CardsLeftInSuit(CardSuit chosenSuit, List <Card> curTrickCards)
        {
            List <Card> LeftCardsChosenSuit = ExtraFunctions.AllCardsInChosenSuit(chosenSuit);

            for (int i = 0; i < curTrickCards.Count; i++)
            {
                if (curTrickCards[i].Suit == chosenSuit)
                {
                    //sprobuj usunac
                    try
                    {
                        int index = LeftCardsChosenSuit.FindIndex(e => e.Suit == curTrickCards[i].Suit &&
                                                                  e.Rank == curTrickCards[i].Rank);
                        if (index >= 0)
                        {
                            LeftCardsChosenSuit.RemoveAt(index);
                        }
                    }
                    catch
                    {
                        //bledy zwiazane sa z niewystepowaniem elementu wiec nic nie trzeba robic
                    }
                }
            }

            for (int i = 0; i < PlayedCards.Deck.Cards.Count; i++)
            {
                if (PlayedCards.Deck.Cards[i].Suit == chosenSuit)
                {
                    int index = LeftCardsChosenSuit.FindIndex(e => e.Suit == PlayedCards.Deck.Cards[i].Suit &&
                                                              e.Rank == PlayedCards.Deck.Cards[i].Rank);
                    if (index >= 0)
                    {
                        LeftCardsChosenSuit.RemoveAt(index);
                    }
                }
            }

            return(LeftCardsChosenSuit);
        }
예제 #7
0
 /// <summary>
 /// Komputer rozgrywa okreslona liczbe rak, bez jakiejkolwiek interakcji z graczem.
 /// </summary>
 /// <param name="repetitions">Liczba rozdan ktore AI ma ze soba zagrac.</param>
 private void PlayContinuously(int repetitions)
 {
     ExtraFunctions.BeginTime();
     for (int i = 0; i < repetitions; i++)
     {
         DealNextHand();
         WhoStarts();
         //policz na poczatku gry
         BeginGameCalculations();
         for (int j = 0; j < CardsPerPlayer; j++)
         {
             PlayAutoTrick();
             GameShape.MouseLeftButtonDown -= new MouseButtonEventHandler(GameShape_MouseLeftButtonDown);
             CleanUpTrick();
         }
         //zamien rece do badan -> zrealizowane w PlayContinuouslyRepeatHands
         EndGame();
     }
     ExtraFunctions.EndTime();
     SystemSounds.Asterisk.Play();
     scoreWinRef.resultBox.Items.Add("Czas wykonania: " + ExtraFunctions.GlobalWatch.Elapsed.TotalSeconds.ToString() + " s");
 }
예제 #8
0
 public void Theta()
 {
     ExtraFunctions.WaitTime(5000);
 }