//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; } }
//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; }
//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]); }
//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(); }
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}."); }
//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); } } }
//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; }
//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); }
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()); }
public static void OnNewGameStarted(PersonalizedForSpecificPlayerStartGameDataRequest args) { NewGameStarted?.Invoke(null, new OpenNewGameWindowEventArgs { ReceivedData = args }); }