Exemple #1
0
        private bool CheckGameEndingConditions()
        {
            var logger = NLog.LogManager.GetCurrentClassLogger();
            EndGameConditionsChecker Checker = new EndGameConditionsChecker();
            bool returnConditions            = Checker.CheckGameEndingConditions(ref finishedPlayers, PlayersCurrentData);

            if (ExtendedLogging)
            {
                logger.Info($"Return Conditions: {returnConditions}.");
            }
            return(returnConditions);
        }
Exemple #2
0
        //main method
        /// <summary>
        /// TakeCardsOrPutCards - true is puting cards and false when taking cards
        /// </summary>
        public bool PutCardsOnTheTable(bool TakeCardsOrPutCards, List <PlayingCard> CardsList, int playerNumber, bool isDemanding,
                                       CardRanks demandedRank, CardSuits demandedSuit, bool skipTheMove)
        {
            var logger = NLog.LogManager.GetCurrentClassLogger();

            if (ExtendedLogging)
            {
                logger.Info("Makao engine main method - making a move fired");
            }

            bool thisPlayerStartedRankDemanding = false;
            bool cardsPuted     = false;
            bool cardstaken     = false;
            bool endgame        = false;
            bool justEndedFours = false;
            bool fourOrJokerCard;
            bool holdMoveOfThisPlayer = false;

            /*ALGORITHM
             * 1. Check if player that put the card is current player
             * 2. Check if this player heeds to stop
             * 2a. Check if player wants to take or to lay cards
             * 3. Check potentiality of the move
             * 4. Check card corectness
             * 5. Check if player which turn it is, started demanding
             * 6. check if it is 4
             * 7. check if it is demanding card, and set demanding options
             * 8. Actually put the card or cards on the table
             * 9. taking cards from deck by player who lost battle
             * 10. Determination of next player
             * 11. End the demanding
             * 12. Check end game conditions
             * 13. End game if there are conditions
             * 14. Send data actualization to players
             * */

            //1.
            bool moveMadeByCurrentPlayer = CheckIfItIsCurrentPlayer(playerNumber);

            if (moveMadeByCurrentPlayer)
            {
                if (ExtendedLogging)
                {
                    logger.Info("Correct player number condition passed");
                }

                //2.
                if (ExtendedLogging)
                {
                    logger.Info($"STATUS BEFORE DECREMENTATION OF STOPS: {status.ToString().ToUpper()}.");
                }
                if (DecrementStopTurnsOfPlayer(playerNumber, false)) //if this player do not need to pause
                {
                    if (ExtendedLogging)
                    {
                        logger.Info("amount of stops condition passed");
                    }

                    if (!skipTheMove)
                    {
                        //2a.
                        if (TakeCardsOrPutCards) //placing cards on the table
                        {
                            if (ExtendedLogging)
                            {
                                logger.Info("Puting cards on the table condition passed");
                            }

                            //3.
                            if (ExtendedLogging)
                            {
                                logger.Info($"STATUS BEFORE CHECKING POTENTIALITY OF MOVE: {status.ToString().ToUpper()}.");
                            }
                            if (CheckPotentialiTyOfMove(playerNumber)) //if this player can make move
                            {
                                if (ExtendedLogging)
                                {
                                    logger.Info("Potentiality of the move condition passed");
                                }

                                //4.
                                if (CorectnessOfPutedCard(CardsList[0]))
                                {
                                    if (ExtendedLogging)
                                    {
                                        logger.Info("First card correctness condition passed");
                                    }

                                    //5.
                                    if (ExtendedLogging)
                                    {
                                        logger.Info($"STATUS BEFORE GETTING PLAYER NAMBER WHO STARTE DEMANDING: {status.ToString().ToUpper()}.");
                                    }
                                    if (currentPlayer == CardsDemandingHandler.GetPlayerNumberWhoStartedDemanding(PlayersCurrentData, false))
                                    {
                                        thisPlayerStartedRankDemanding = true;
                                    }
                                    else
                                    {
                                        thisPlayerStartedRankDemanding = false;
                                    }
                                    if (ExtendedLogging)
                                    {
                                        logger.Info($"This player started rank demanding: {thisPlayerStartedRankDemanding}.");
                                    }

                                    //8.
                                    if (ExtendedLogging)
                                    {
                                        logger.Info($"STATUS BEFORE PUTING CARDS ON THE TABLE: {status.ToString().ToUpper()}.");
                                    }
                                    cardsPuted = PutAllCardsOnTheTable(CardsList, playerNumber);
                                    logger.Info($"Cards puted on the table: {cardsPuted}.");

                                    //6.
                                    if (ExtendedLogging)
                                    {
                                        logger.Info($"STATUS BEFORE FOUR HANDLING: {status.ToString().ToUpper()}.");
                                    }
                                    (fourOrJokerCard, justEndedFours) = RankFourHandling(CardsList, playerNumber);
                                    if (ExtendedLogging)
                                    {
                                        logger.Info($"STATUS AFTER FOUR HANDLING: {status.ToString().ToUpper()}.");
                                    }
                                    logger.Info($"Fours in player hand: {fourOrJokerCard}.");

                                    //7.
                                    if (isDemanding && (CardsList[0].Rank == CardRanks.Ace || CardsList[0].Rank == CardRanks.Jack))
                                    {
                                        CheckDemandPossibilities(demandedRank, demandedSuit, playerNumber);
                                    }

                                    CheckStopOfSuitDemanding(CardsList[0]);
                                }
                            }
                            ResetoMoveHoldingForPlayers();
                        }
                        else
                        {
                            (cardstaken, holdMoveOfThisPlayer) = TakeCardsFromDeck(playerNumber);
                            if (currentPlayer == CardsDemandingHandler.GetPlayerNumberWhoStartedDemanding(PlayersCurrentData, false))
                            {
                                thisPlayerStartedRankDemanding = true;
                            }
                            else
                            {
                                thisPlayerStartedRankDemanding = false;
                            }
                            EndDemanding(thisPlayerStartedRankDemanding, playerNumber);
                        }
                    }
                    else
                    {
                        if (!PlayersCurrentData[playerNumber].FirstCardInBattleModeTakenMatches)
                        {
                            (_, justEndedFours) = MakePauseOnPlayersWish(new List <PlayingCard>(), playerNumber);
                        }

                        ResetoMoveHoldingForPlayers();
                    }
                }

                //if either new cards are on the table or some cards are taken from deck
                if (cardsPuted || cardstaken || skipTheMove)
                {
                    if (ExtendedLogging)
                    {
                        logger.Info($"Tha card was taken: {cardstaken} / cards was puted: {cardsPuted} / Move skipped: {skipTheMove}.");
                    }
                    //9. - choosing next player as long, as he do not need to pause
                    //caused by four rank cards
                    if (!holdMoveOfThisPlayer)
                    {
                        bool nextPlayer = false;
                        while (!nextPlayer)
                        {
                            DetermineTheNextPlayer(AlreadyUsedCards[0]);
                            nextPlayer = DecrementStopTurnsOfPlayer(currentPlayer, justEndedFours);
                            if (ExtendedLogging)
                            {
                                logger.Info($"Next player number - ASSIGNED: {nextPlayer}");
                            }
                        }
                    }

                    //10.
                    EndDemanding(thisPlayerStartedRankDemanding, playerNumber);

                    //11.
                    if (CurrentDeck.Count <= 5)
                    {
                        RestoreCardsFromTableToDeck();
                    }

                    //12.
                    endgame = CheckGameEndingConditions();
                }

                if (!cardsPuted)
                {
                    CardsLatelyPutedOnTheTable.Clear();
                    if (ExtendedLogging)
                    {
                        logger.Info($"Cards lately puted on the table cleared.");
                    }
                }

                //here start sending info to player with data actualization
                OnStartUpdatingTheGame(cardsPuted || cardstaken || skipTheMove);//if (!endgame)
                if (endgame)
                {
                    if (ExtendedLogging)
                    {
                        logger.Info("GAME ENDED - STARTING SENDING INFO ABOUT THIS TO ALL PLAYERS");
                    }

                    //adding last player to finished players list
                    EndGameConditionsChecker Checker = new EndGameConditionsChecker();
                    Checker.AddLastPlayerToFinishedList(ref finishedPlayers, PlayersCurrentData);

                    //sending data with game ended info
                    OnEndTheGame();
                }
            }

            if (ExtendedLogging)
            {
                logger.Info("Makao engine main method - making a move ended");
            }
            if (ExtendedLogging)
            {
                logger.Info($"GAME STATE AFTER EXECUION OF ENGINE MAIN METHOD: {status.ToString().ToUpper()}");
            }
            return(cardsPuted || cardstaken || skipTheMove);
        }