/// <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); } }
/// <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()); } }
/// <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); } }
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; } }
/// <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"); }
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); }
/// <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"); }
public void Theta() { ExtraFunctions.WaitTime(5000); }