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) ); }
public (World world, TurnResult result) Turn(IUser_Name user, int cell, int number) { return(WorldStorage.UpdateWorld(world => world.Turn(user, cell, number))); }