/// <summary> /// After pseudo has been given /// </summary> /// <param name="pseudo">pseudo given by the player</param> private void AfterPseudoGiven(string pseudo) { PlayerPseudo = pseudo; //HUD Instantiate(hudPrefab); //grid _grid = Instantiate(gridPrefab).GetComponent <TicTacToeGrid>(); //listen slot clicks _grid.Slots.ForEach(slot => slot.PlaceSymbol.Subscribe(_ => PlaceSymbolOnSlot(slot))); //Listen current player change to play turns CurrentPlayer.SkipLatestValueOnSubscribe().Subscribe(PlayTurn); //new game if (BetweenSceneData.Mode == BetweenSceneData.GameMode.NewGame) { StartGame(); } //continue game else { ContinuePreviousGame(); } }
/// <summary> /// Play the CPU turn /// </summary> /// <param name="grid">the grid to play on</param> public static void PlayTurn(TicTacToeGrid grid) { var smartness = PlayerPrefs.GetInt("CPU Smartness", 50); var random = new Random(DateTime.Now.Millisecond).Next(101); IPlayTurnStrategy strategy; if (smartness == 0) { strategy = new RandomSlotPlayTurnStrategy(); } else if (random <= smartness) { strategy = new SmartPlayTurnStrategy(); } else { strategy = new RandomSlotPlayTurnStrategy(); } //Simulate 1s thinking Observable.Timer(TimeSpan.FromSeconds(1f)).Subscribe(time => { strategy.ChooseSlot(grid).PlaceSymbol.Execute(); }); }