Example #1
0
        public (World world, TurnResult result) Turn(IUser_Name user, int cell, int number)
        {
            var users       = this.Users;
            var currentUser = users.Find(user.Name);

            if (currentUser == null)
            {
                currentUser = new User(user.Name);
                users       = users.Add(currentUser.Name, currentUser);
            }

            var world = this.With(users: users);

            var(game, turn) = this.Game.Turn(currentUser, cell, number);
            if (turn.IsSkipped)
            {
                return(world.With(game: game), new TurnResult(turn));
            }

            return(world.With(
                       game: game.IsWin || game.IsFail ? new Game() : game,
                       users: game.IsWin ? Win(world.Users, turn.User) : world.Users
                       ),
                   new TurnResult(turn, isWin: game.IsWin, isFail: game.IsFail)
                   );
        }
Example #2
0
 public (World world, TurnResult result) Turn(IUser_Name user, int cell, int number)
 {
     return(WorldStorage.UpdateWorld(world => world.Turn(user, cell, number)));
 }