示例#1
0
        //assigning images for players avatars
        private void AssignPlayersAvatarsImagesAndNames(PersonalizedForSpecificPlayerStartGameDataRequest inputData)
        {
            //this player
            if (gameWindow.ThisPlayerControl.PlayerNumber >= 0)
            {
                gameWindow.ThisPlayerImage.Source     = PlayersListPage.GetAvatarFullName(gameWindow.ThisPlayerControl.PlayerNumber);
                gameWindow.ThisPlayerNameControl.Text = inputData.DataOfThisPlayer.ThisPlayerName;
            }

            //left player
            if (gameWindow.LeftPlayerControl.PlayerNumber >= 0)
            {
                gameWindow.LeftPlayerImage.Source     = PlayersListPage.GetAvatarFullName(gameWindow.LeftPlayerControl.PlayerNumber);
                gameWindow.LeftPlayerNameControl.Text = (inputData.DataOfOtherPlayers.Single(x => x.OtherPlayerNumber == gameWindow.LeftPlayerControl.PlayerNumber)).OtherPlayerName;
            }

            //upper player
            if (gameWindow.UpperPlayerControl.PlayerNumber >= 0)
            {
                gameWindow.UpperPlayerImage.Source     = PlayersListPage.GetAvatarFullName(gameWindow.UpperPlayerControl.PlayerNumber);
                gameWindow.UpperPlayerNameControl.Text = (inputData.DataOfOtherPlayers.Single(x => x.OtherPlayerNumber == gameWindow.UpperPlayerControl.PlayerNumber)).OtherPlayerName;
            }

            //right player
            if (gameWindow.RightPlayerControl.PlayerNumber >= 0)
            {
                gameWindow.RightPlayerImage.Source     = PlayersListPage.GetAvatarFullName(gameWindow.RightPlayerControl.PlayerNumber);
                gameWindow.RightPlayerNameControl.Text = (inputData.DataOfOtherPlayers.Single(x => x.OtherPlayerNumber == gameWindow.RightPlayerControl.PlayerNumber)).OtherPlayerName;
            }
        }
示例#2
0
        //proper constructor
        public GameWindow(ThirdPlayerLocation locationOfThirdPlayer, PersonalizedForSpecificPlayerStartGameDataRequest inputData,
                          BackColor backCardsColor)
        {
            InitializeComponent();

            //synchronization context assignment
            SynchCont = SynchronizationContext.Current;

            //construct this window by using another class
            _ = new GameWindowConstructor(this, inputData, ref willBeClosedAsHost,
                                          ref amoutOfPlayersShown, ref thisPlayerNumber, ref thisPlayerID, ref thisPlayerName,
                                          ref minimumPlayerNumber, ref maximumPlayerNumber, ref PlayersControlsMapper,
                                          locationOfThirdPlayer, backCardsColor, ref ActivePlayerRectangles, ref GameStateData,
                                          ref CardsChoosenByThisPlayer, ref demandedRankRequest, ref demandedSuitRequest,
                                          ref GameDataTranslator);

            //assign INotifyPropertyChange properties values
            AssignProperties(inputData.CurrentGameStatusData);

            //player moves posibilities
            AssignPlayersMovePosibilities(inputData.DataOfThisPlayer);

            //assigning cards to controls
            AssignCardsOnGameStart(inputData);

            //subscript click event of deck representation control
            DeckRepresentationControl.TakeCardClick += DeckRepresentationControl_TakeCardClick;

            //Subscribing reciving the window updating data from host
            DataPlaceholder.UpdteTheGame += DataPlaceholder_UpdteTheGame;

            //Subscripting an event with info about game ending
            DataPlaceholder.GameEnded += DataPlaceholder_GameEnded;
        }
示例#3
0
        //assigning cards to the controls in the window at the game startup
        private void AssignCardsOnGameStart(PersonalizedForSpecificPlayerStartGameDataRequest inputData)
        {
            CardsToControlsAssigner CardsAssigner = new CardsToControlsAssigner(this);

            CardsAssigner.AssignPlayersCards(PlayersControlsMapper, inputData.DataOfThisPlayer.ThisPlayerCards,
                                             inputData.DataOfOtherPlayers);
            CardsAssigner.AssignAmountOfCardsInDeck(inputData.AmountOfCardsInDeck);
            CardsAssigner.AddOneCardToUsedCardsControl(inputData.NewCardsOnTheTableList[0]);
        }
示例#4
0
        //open new game window
        private void StartNewgameWindow(ThirdPlayerLocation location, PersonalizedForSpecificPlayerStartGameDataRequest data)
        {
            Windows.GameWindow gameWindow = new Windows.GameWindow(location, data, SavedDataPlaceholder.CardsBackColor)
            {
                Owner = this,
            };

            gameWindow.WindowWasClosedByUser  += GameWindow_WindowWasClosedByUser;
            gameWindow.GameWindowClosedByHost += GameWindow_GameWindowClosedByHost;
            gameWindow.ShowDialog();
            MemoryManagement.FlushMemory();
        }
示例#5
0
        public GameWindowConstructor(GameWindow window, PersonalizedForSpecificPlayerStartGameDataRequest inputData,
                                     ref bool willBeClosedByHost, ref int amoutOfPlayersShown, ref int thisPlayerNumber, ref string thisPlayerID, ref string thisPlayerName,
                                     ref int minimumPlayerNumber, ref int maximumPlayerNumber, ref Dictionary <int, OtherPlayer> PlayersControlsMapper,
                                     ThirdPlayerLocation locationOfThirdPlayer, BackColor cardsBackColor, ref Dictionary <int, Rectangle> ActivePlayerRectangles,
                                     ref GameStateData GameStateData, ref List <PlayingCard> CardsChoosenByThisPlayer, ref CardRanks demandedRankRequest,
                                     ref CardSuits demandedSuitRequest, ref GameStateDataTranslator GameDataTranslator)
        {
            gameWindow = window;

            //Data context
            AssignControlsDataContext();

            //at the window starts, if it is closed, closing is caused by user
            willBeClosedByHost = false;

            //initializing list of cards choosen by this player
            CardsChoosenByThisPlayer = new List <PlayingCard>();

            //assign demanding options
            demandedRankRequest = CardRanks.None;
            demandedSuitRequest = CardSuits.None;

            //assign other player cards control type (horizontal/vertical)
            AssignOtherPlayersControlsOrientation();

            //assigning current game state data for first time
            GameStateData      = inputData.CurrentGameStatusData;
            GameDataTranslator = new GameStateDataTranslator();

            //set local fields based on data passed in
            InitializeFields(inputData, ref amoutOfPlayersShown, ref thisPlayerNumber, ref thisPlayerID, ref thisPlayerName,
                             ref minimumPlayerNumber, ref maximumPlayerNumber);

            //set controls visibility
            ManageControlVisibility(locationOfThirdPlayer, ref amoutOfPlayersShown);

            //assign player number properties of controlls
            AssignPlayersNumberIntoPropertiesOfControls(inputData, ref PlayersControlsMapper, ref maximumPlayerNumber, ref thisPlayerNumber,
                                                        ref minimumPlayerNumber, ref ActivePlayerRectangles);

            //Assigning color of cards back
            AssignBackCardColor(cardsBackColor);

            //assign players Images and players names
            AssignPlayersAvatarsImagesAndNames(inputData);

            //assigning colors of rectangles that are backrounds of players names
            PlayersRectanglesColorAssigner.AssignPlayersRectanglesColors(ref ActivePlayerRectangles, inputData.CurrentPlayerNumber);

            //enabling this player controls
            ThisUserControlsEnabler.EnableOrDisableThisUserControls(ref gameWindow.ThisPlayerControl,
                                                                    ref gameWindow.DeckRepresentationControl, inputData.CurrentPlayerNumber);
        }
        //method for adding start game data for players to lists
        private static void AddOnePlayerDataForStartGameLists(ref List <object> requestsOutput, ref List <string> listOfIDoutput,
                                                              string playerID, int minNumber, int maxNumber, int totalPLayersAmount)
        {
            var logger = NLog.LogManager.GetCurrentClassLogger();
            PersonalizedForSpecificPlayerStartGameDataRequest data = GetDataForParticularPlayerAtTheGameStart(playerID, minNumber, maxNumber, totalPLayersAmount);

            logger.Info($"Personalized data for player with number: {data.DataOfThisPlayer.ThisPlayerNumber}.");

            requestsOutput.Add((object)data);
            listOfIDoutput.Add(playerID);

            logger.Info($"Obtained personalized data for player with name and ID: {data.DataOfThisPlayer.ThisPlayerName}, {playerID}.");
        }
示例#7
0
        //Assigning player numbers ito controls and into identification list
        private void AssignPlayersNumberIntoPropertiesOfControls(PersonalizedForSpecificPlayerStartGameDataRequest inputData,
                                                                 ref Dictionary <int, OtherPlayer> PlaerControlsMapper, ref int maximumPlayerNumber, ref int thisPlayerNumber,
                                                                 ref int minimumPlayerNumber, ref Dictionary <int, Rectangle> ActivePlayerRectangles)
        {
            PlaerControlsMapper    = new Dictionary <int, OtherPlayer>();
            ActivePlayerRectangles = new Dictionary <int, Rectangle>();

            //this user handling
            gameWindow.ThisPlayerControl.AssignPlayerNumber(inputData.DataOfThisPlayer.ThisPlayerNumber);
            ActivePlayerRectangles.Add(inputData.DataOfThisPlayer.ThisPlayerNumber, gameWindow.ThisPlayerRectangle);

            //other players handling - clockwise
            NextPlayerNumberSpecifier NextNumber = new NextPlayerNumberSpecifier(maximumPlayerNumber, thisPlayerNumber, minimumPlayerNumber);

            foreach (OtherPlayerData item in inputData.DataOfOtherPlayers)
            {
                int nextPlayerNumber = NextNumber.GetNextPlayerNumber();

                if (gameWindow.LeftPlayerArea.Visibility == Visibility.Visible && gameWindow.LeftPlayerControl.PlayerNumber < 0) //left controll
                {
                    gameWindow.LeftPlayerControl.AssignPlayerNumber(nextPlayerNumber);
                    PlaerControlsMapper.Add(nextPlayerNumber, gameWindow.LeftPlayerControl);
                    ActivePlayerRectangles.Add(nextPlayerNumber, gameWindow.LeftPlayerRectangle);
                }
                else if (gameWindow.UpperPlayerArea.Visibility == Visibility.Visible && gameWindow.UpperPlayerControl.PlayerNumber < 0) //upper control
                {
                    gameWindow.UpperPlayerControl.AssignPlayerNumber(nextPlayerNumber);
                    PlaerControlsMapper.Add(nextPlayerNumber, gameWindow.UpperPlayerControl);
                    ActivePlayerRectangles.Add(nextPlayerNumber, gameWindow.UpperPlayerRectangle);
                }
                else if (gameWindow.RightPlayerArea.Visibility == Visibility.Visible && gameWindow.RightPlayerControl.PlayerNumber < 0) //right control
                {
                    gameWindow.RightPlayerControl.AssignPlayerNumber(nextPlayerNumber);
                    PlaerControlsMapper.Add(nextPlayerNumber, gameWindow.RightPlayerControl);
                    ActivePlayerRectangles.Add(nextPlayerNumber, gameWindow.UpperPlayerRectangle);
                }
            }
        }
示例#8
0
        //method for setting fields based on constructor's inputdata
        private void InitializeFields(PersonalizedForSpecificPlayerStartGameDataRequest inputData, ref int amoutOfPlayersShown,
                                      ref int thisPlayerNumber, ref string thisPlayerID, ref string thisPlayerName, ref int minimumPlayerNumber,
                                      ref int maximumPlayerNumber)
        {
            //check amount of players
            if (inputData.AmountOfPlayers == inputData.DataOfOtherPlayers.Count + 1)
            {
                amoutOfPlayersShown = inputData.AmountOfPlayers;
            }
            else
            {
                amoutOfPlayersShown = inputData.DataOfOtherPlayers.Count + 1;
            }

            //assign other player information data
            thisPlayerNumber = inputData.DataOfThisPlayer.ThisPlayerNumber;
            thisPlayerID     = inputData.DataOfThisPlayer.ThisPlayerID;
            thisPlayerName   = inputData.DataOfThisPlayer.ThisPlayerName;

            //assign min and max player number
            minimumPlayerNumber = inputData.MinimumPlayerNumber;
            maximumPlayerNumber = inputData.MaximumPlayerNumber;
        }
示例#9
0
        //method that starts algorithm
        public new PersonalizedForSpecificPlayerStartGameDataRequest GetDataForPlayer()
        {
            PersonalizedForSpecificPlayerStartGameDataRequest returnData = new PersonalizedForSpecificPlayerStartGameDataRequest();

            if (constructorDataCorrect)
            {
                returnData.MinimumPlayerNumber    = minPlayerNumber;
                returnData.MaximumPlayerNumber    = maxPlayerNumber;
                returnData.PlayerID               = playerID;
                returnData.AmountOfPlayers        = DataPlaceholders.MakaoEngineHostDataPlaceholders.PlayersData.Count;
                returnData.NewCardsOnTheTableList = DataPlaceholders.GameStateHolder.EngineInstance.CardsLatelyPutOnTheTable;
                returnData.CurrentPlayerNumber    = DataPlaceholders.GameStateHolder.EngineInstance.CurrentPlayer;
                returnData.AmountOfCardsInDeck    = DataPlaceholders.GameStateHolder.EngineInstance.Deck.Count;
                returnData.CurrentGameStatusData  = GetCurrentGameStateSata();
                returnData.DataOfThisPlayer       = GetInfoAboutCurrentPlayer();
                returnData.DataOfOtherPlayers     = GetInfoAboutOtherPlayers();
            }
            else
            {
                returnData = null;
            }

            return(returnData);
        }
示例#10
0
        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            List <PlayingCard> cardsList = new List <PlayingCard>
            {
                new PlayingCard(CardSuits.None, CardRanks.Joker, 1),
                new PlayingCard(CardSuits.Diamond, CardRanks.Seven, 1),
                new PlayingCard(CardSuits.Spade, CardRanks.Seven, 1),
                new PlayingCard(CardSuits.Heart, CardRanks.Ace, 1),
                new PlayingCard(CardSuits.Heart, CardRanks.Jack, 1),
            };

            ThisPlayerData thisPlayerData = new ThisPlayerData
            {
                ThisPlayerID     = "dwefkwbfwhbfwhbfb",
                ThisPlayerName   = "Michał",
                ThisPlayerNumber = 0,
                ThisPlayerCards  = cardsList
            };

            List <OtherPlayerData> otherPlayerData = new List <OtherPlayerData>();

            OtherPlayerData opd1 = new OtherPlayerData
            {
                OtherPlayerAmountOfCards = 5,
                OtherPlayerID            = "fwefergergerg",
                OtherPlayerName          = "Marek",
                OtherPlayerNumber        = 1,
            };

            OtherPlayerData opd2 = new OtherPlayerData
            {
                OtherPlayerAmountOfCards = 4,
                OtherPlayerID            = "ffvebtnyukio.io.u,",
                OtherPlayerName          = "Gosia",
                OtherPlayerNumber        = 2,
            };

            OtherPlayerData opd3 = new OtherPlayerData
            {
                OtherPlayerAmountOfCards = 6,
                OtherPlayerID            = "fwewevrtntyyu",
                OtherPlayerName          = "Basia",
                OtherPlayerNumber        = 3,
            };

            otherPlayerData.Add(opd1);
            otherPlayerData.Add(opd2);
            otherPlayerData.Add(opd3);

            GameStateData gameData = new GameStateData()
            {
                AmountOfPausingTurns                  = 0,
                CurrentlyDemandedRank                 = CardRanks.None,
                CurrentlyDemandedSuit                 = CardSuits.None,
                CurrentPlayerNumber                   = 0,
                AmountOfCardsToTakeIfLostBattle       = 0,
                BlockPossibilityOfTakingCardsFromDeck = false,
            };


            PersonalizedForSpecificPlayerStartGameDataRequest data = new PersonalizedForSpecificPlayerStartGameDataRequest
            {
                MinimumPlayerNumber   = 0,
                MaximumPlayerNumber   = 3,
                AmountOfPlayers       = 4,
                CurrentGameStatusData = gameData,
                PlayerID = "dwefkwbfwhbfwhbfb",
                NewCardsOnTheTableList = new List <PlayingCard> {
                    new PlayingCard(CardSuits.Heart, CardRanks.Seven, 1)
                },
                AmountOfCardsInDeck = 58,
                CurrentPlayerNumber = 0,
                DataOfThisPlayer    = thisPlayerData,
                DataOfOtherPlayers  = otherPlayerData
            };

            Windows.GameWindow gameWindow = new Windows.GameWindow(ThirdPlayerLocation.Left, data, CardGraphicsLibraryHandler.BackColor.Blue)
            {
                Owner = this,
            };
            gameWindow.ShowDialog();
        }
 //data received from host - game window opening
 UpdatingGameStatusResponse IMakaoGameClientService.StartNewGameWindow(PersonalizedForSpecificPlayerStartGameDataRequest request)
 {
     DataPlaceholder.OnNewGameStarted(request);
     return(GenerateGameUpdatingResponse());
 }
示例#12
0
 public static void OnNewGameStarted(PersonalizedForSpecificPlayerStartGameDataRequest args)
 {
     NewGameStarted?.Invoke(null, new OpenNewGameWindowEventArgs {
         ReceivedData = args
     });
 }