Exemplo n.º 1
0
 public SnagCardGameMainViewModel(CommandContainer commandContainer,
                                  SnagCardGameMainGameClass mainGame,
                                  SnagCardGameVMData viewModel,
                                  BasicData basicData,
                                  TestOptions test,
                                  IGamePackageResolver resolver
                                  )
     : base(commandContainer, mainGame, viewModel, basicData, test, resolver)
 {
     _mainGame = mainGame;
     _model    = viewModel;
     _model.Deck1.NeverAutoDisable = true;
     _model.Bar1.SendEnableProcesses(this, () =>
     {
         if (_mainGame !.SaveRoot !.GameStatus != EnumStatusList.Normal)
         {
             return(false);
         }
         return(!_mainGame.SaveRoot.FirstCardPlayed);
     });
 public SnagCardGameMainGameClass(IGamePackageResolver mainContainer,
                                  IEventAggregator aggregator,
                                  BasicData basicData,
                                  TestOptions test,
                                  SnagCardGameVMData currentMod,
                                  IMultiplayerSaveState state,
                                  IAsyncDelayer delay,
                                  ICardInfo <SnagCardGameCardInformation> cardInfo,
                                  CommandContainer command,
                                  SnagCardGameGameContainer gameContainer,
                                  ITrickData trickData,
                                  ITrickPlay trickPlay,
                                  IAdvancedTrickProcesses aTrick
                                  )
     : base(mainContainer, aggregator, basicData, test, currentMod, state, delay, cardInfo, command, gameContainer, trickData, trickPlay)
 {
     _model         = currentMod;
     _command       = command;
     _gameContainer = gameContainer;
     _aTrick        = aTrick;
     _gameContainer.TakeCardAsync = TakeCardAsync;
 }
        public static int CardToPlay(SnagCardGameMainGameClass mainGame, SnagCardGameVMData model)
        {
            if (mainGame.SaveRoot !.FirstCardPlayed == false)
            {
                var thisCol = model.Bar1.PossibleList;
                if (thisCol.Count == 0)
                {
                    throw new BasicBlankException("No cards left from bar");
                }
                if (thisCol.Count > 2)
                {
                    throw new BasicBlankException("There cannot be more than 2 cards to choose from for bar for computer player");
                }
                return(thisCol.GetRandomItem().Deck);
            }
            var possibleList = mainGame.SingleInfo !.MainHandList.Where(Items => mainGame.IsValidMove(Items.Deck)).ToRegularDeckDict();

            if (possibleList.Count == 0)
            {
                throw new BasicBlankException("There cannot be 0 cards left");
            }
            return(possibleList.GetRandomItem().Deck);
        }
        public static int CardToTake(SnagCardGameVMData model)
        {
            var thisList = model.TrickArea1 !.ListCardsLeft();

            return(thisList.GetRandomItem().Deck);
        }
        public SnagCardGameMainView(IEventAggregator aggregator,
                                    TestOptions test,
                                    SnagCardGameVMData model
                                    )
        {
            _aggregator = aggregator;
            _model      = model;
            _aggregator.Subscribe(this);

            _score          = new ScoreBoardXF();
            _playerHandWPF  = new BaseHandXF <SnagCardGameCardInformation, ts, DeckOfCardsXF <SnagCardGameCardInformation> >();
            _trick1         = new SeveralPlayersTrickXF <EnumSuitList, SnagCardGameCardInformation, ts, DeckOfCardsXF <SnagCardGameCardInformation>, SnagCardGamePlayerItem>();
            _bar1           = new BaseHandXF <SnagCardGameCardInformation, ts, DeckOfCardsXF <SnagCardGameCardInformation> >();
            _human1         = new BaseHandXF <SnagCardGameCardInformation, ts, DeckOfCardsXF <SnagCardGameCardInformation> >();
            _opponent1      = new BaseHandXF <SnagCardGameCardInformation, ts, DeckOfCardsXF <SnagCardGameCardInformation> >();
            _bar1.HandType  = HandObservable <SnagCardGameCardInformation> .EnumHandList.Vertical;
            _bar1.HasAngles = true; //this is needed.

            StackLayout             mainStack = new StackLayout();
            ParentSingleUIContainer?restoreP  = null;

            if (test.SaveOption == EnumTestSaveCategory.RestoreOnly)
            {
                restoreP = new ParentSingleUIContainer(nameof(SnagCardGameMainViewModel.RestoreScreen));
            }

            StackLayout otherStack = new StackLayout();

            otherStack.Orientation = StackOrientation.Horizontal;
            _score.AddColumn("Cards Won", true, nameof(SnagCardGamePlayerItem.CardsWon));
            _score.AddColumn("Current Points", true, nameof(SnagCardGamePlayerItem.CurrentPoints));
            _score.AddColumn("Total Points", true, nameof(SnagCardGamePlayerItem.TotalPoints));
            SimpleLabelGridXF firstInfo = new SimpleLabelGridXF();

            firstInfo.AddRow("Turn", nameof(SnagCardGameMainViewModel.NormalTurn));
            firstInfo.AddRow("Status", nameof(SnagCardGameMainViewModel.Status));
            firstInfo.AddRow("Instructions", nameof(SnagCardGameMainViewModel.Instructions));

            StackLayout tempStack = new StackLayout();

            otherStack.Children.Add(_trick1);
            tempStack.Children.Add(_human1);
            tempStack.Children.Add(_opponent1);
            otherStack.Children.Add(tempStack);
            mainStack.Children.Add(otherStack);
            mainStack.Children.Add(_playerHandWPF);
            mainStack.Children.Add(firstInfo.GetContent);
            mainStack.Children.Add(_score);
            Grid otherGrid = new Grid();

            AddLeftOverColumn(otherGrid, 30);
            AddLeftOverColumn(otherGrid, 70); // can always be adjusted
            AddControlToGrid(otherGrid, _bar1, 0, 0);
            AddControlToGrid(otherGrid, mainStack, 0, 1);

            if (restoreP != null)
            {
                mainStack.Children.Add(restoreP); //default add to grid but does not have to.
            }
            Content = otherGrid;
        }