Пример #1
0
        public void CreateWithNoNoise_AddsOnlyRequiredDominoPieces()
        {
            var beginCategory = new DominoTile("Begin", "");
            var endCategory = new DominoTile("End", "");
            var middleCategory = new DominoTile("Middle", "");

            A.CallTo(() => _pathFinder.FindPath(1, 1)).WithAnyArguments().Returns(new SuggestedPath { MinimumRequiredPieces = 2 });
            A.CallTo(() => _categoriesProvider.DrawTile()).ReturnsNextFromSequence(beginCategory, endCategory, middleCategory);
            A.CallTo(() => _categoriesProvider.DrawTileFromCategory("Begin")).Returns(beginCategory);
            A.CallTo(() => _categoriesProvider.DrawTileFromCategory("End")).Returns(endCategory);
            A.CallTo(() => _categoriesProvider.DrawTileFromCategory("Middle")).Returns(middleCategory);

            var builder = new GameBuilder(_pathFinder);

            var game = builder.Create(10, 10, 0, _categoriesProvider);

            Assert.Equal(2, game.PlayerPieces.Length);

            var firstPiece = game.PlayerPieces[0];
            Assert.Equal(beginCategory.Category, firstPiece.FirstTile.Category);
            Assert.Equal(middleCategory.Category, firstPiece.SecondTile.Category);

            var secondPiece = game.PlayerPieces[1];
            Assert.Equal(middleCategory.Category, secondPiece.FirstTile.Category);
            Assert.Equal(endCategory.Category, secondPiece.SecondTile.Category);
        }
Пример #2
0
        public void CreateWithNoise_AdditionalPiecesAdded()
        {
            var minimumPathSize = 2;
            var noiseCount = 5;
            A.CallTo(() => _pathFinder.FindPath(1, 1)).WithAnyArguments().Returns(new SuggestedPath { MinimumRequiredPieces = minimumPathSize });
            A.CallTo(() => _categoriesProvider.DrawTile()).WithAnyArguments().Returns(new DominoTile("", ""));

            var builder = new GameBuilder(_pathFinder);

            var game = builder.Create(10, 10, noiseCount, _categoriesProvider);

            Assert.Equal(minimumPathSize + noiseCount, game.PlayerPieces.Length);
        }
Пример #3
0
 public void SimpleBuilderPlayground()
 {
     var gb = GameBuilder.Create <String>()
              .WithContext("a")
              .HasNameAndDescription("name", "asdsadsa")
              .HasEndState("name2", "asdsadsa")
              .HasCheckerForStateChange(s => s == "").ThenGoToState("")
              .HasCheckerForStateChange(s => s != "").ThenGoToState("")
              .HasCheckerForContextDataChange(s => s == "").ThenDo(t => t.ToCharArray())
              .EndHasState()
              .HasStartState("", "")
              .EndHasState();
 }
Пример #4
0
        public void Create_BuildsGameOfAGivenSize(int width, int height)
        {
            A.CallTo(() => _pathFinder.FindPath(width, height)).Returns(new SuggestedPath { MinimumRequiredPieces = 3 });
            A.CallTo(() => _categoriesProvider.DrawTile()).WithAnyArguments().Returns(new DominoTile("FAKE", "FAKE"));

            var builder = new GameBuilder(_pathFinder);

            var game = builder.Create(width, height, 0, _categoriesProvider);

            Assert.Equal(width, game.Width);
            Assert.Equal(height, game.Height);
        }
Пример #5
0
        public Game <WhoIsBiggerContext> Create()
        {
            var game = GameBuilder.Create <WhoIsBiggerContext>()
                       //.HasOneOfCommands(
                       //	"UserInput",g=>
                       //	{

                       //	},
                       //	g=>
                       //	{

                       //	}
                       //)
                       .HasCommand("StartGame", g =>
            {
                var cmd = new ReactiveCommand();
                cmd.ListenCanExecuteObservable(g
                                               .GetValueContainer(x => x.CurrentState)
                                               .GetNullObservable()
                                               .Select(_ => g.CurrentState.Name == GameStateNames.GameStart));

                cmd.Subscribe(e => g.CurrentState = g.AllStates[GameStateNames.UserInput]);
                return(cmd);
            })
                       .HasCommand("PlayerInput", g =>
            {
                var cmd = new ReactiveCommand();

                cmd.ListenCanExecuteObservable(g
                                               .GetValueContainer(x => x.CurrentState)
                                               .GetNullObservable()
                                               .Select(_ =>
                                                       g.CurrentState.Name == GameStateNames.UserInput
                                                       ||
                                                       g.CurrentState.Name == GameStateNames.GameSet
                                                       ));

                cmd.Subscribe(e =>
                {
                    var input = (decimal)e.EventArgs.EventArgs;
                    g.GameExecutingContext.UserInputs.Add(input);
                    g.GameExecutingContext.CurrentUserIndex++;
                }
                              );
                return(cmd);
            })
                       .HasStartState("GameStart", "Game Start")
                       .EndHasState()

                       .HasState(GameStateNames.UserInput)
                       .HasCheckerForContextDataChange(c => c.CurrentUserIndex != c.UserInputs.Count)
                       .ThenDo(c => c.CurrentUserIndex = c.UserInputs.Count)

                       .HasCheckerForContextDataChange(c => true)
                       .ThenDo(c =>
            {
                var msg = string.Format("{0}'s  input is {1}", c.Users[c.CurrentUserIndex], c.UserInputs[c.CurrentUserIndex]);
                c.Messages.Add(msg);
                c.LastMessages.Add(msg);
            })

                       .HasCheckerForContextDataChange(c => c.LastMessages.Count > c.MaxLastMessageCount)
                       .ThenDo(c =>
            {
                while (c.LastMessages.Count > c.MaxLastMessageCount)
                {
                    c.LastMessages.RemoveAt(0);
                }
            })

                       .HasCheckerForStateChange(c => c.UserInputs.Count == c.Users.Count)
                       .ThenGoToState(GameStateNames.GameSet)
                       .EndHasState()
                       .HasEndState(GameStateNames.UserInput)
                       .EndHasState()

                       .WithContext(new WhoIsBiggerContext
            {
                Users = new System.Collections.ObjectModel.ObservableCollection <string>()
                {
                    "U1",
                    "U2"
                }
            })
                       .CurrentProduct;

            return(game);
        }