ºÇ½ª¹¹¿·¡§ orika_ex_miyako 2023ǯ12·î31Æü(Æü) 13:26:34ÍúÎò
¡¡³Æ¥¹¥¯¥ê¥×¥È
using System; using System.Collections.Generic; // IObservable ¤ò»È¤¦¤¿¤á¤ËɬÍ× using System.Linq; using System.Text; // StringBuilder ¤ò»È¤¦¤¿¤á¤ËɬÍ× using UnityEngine; using UnityEngine.UI; using UniRx; public class NumberGameView : MonoBehaviour { [SerializeField] private Text[] txtSelectNumbers; [SerializeField] private Text txtExplanation; [SerializeField] private Text txtCount; [SerializeField] private Text txtCountMax; [SerializeField] private Button callButton; public Button CallButton => callButton; // ¥×¥í¥Ñ¥Æ¥£ [SerializeField] private NumberButton numberButtonPrefab; [SerializeField] private Transform numberButtonTran; private int buttonCount = 10; [SerializeField] private List<Button> numberButtonList = new(); [SerializeField] private Button deleteButton; // OnClickAsObservable()¤Î¹ØÆɽèÍý¤ò»Ü¤·¤¿¥Ü¥¿¥ó¤Î¥×¥í¥Ñ¥Æ¥£ public IObservable<Unit> OnCallButtonClickAsObservable => callButton.OnClickAsObservable(); public IObservable<Unit> OnDeleteButtonClickAsObservable => deleteButton.OnClickAsObservable(); // OnNumberButtonClickAsObservable¥×¥í¥Ñ¥Æ¥£¤Ï¡¢numberButtonsÇÛÎó¤Î³Æ¥Ü¥¿¥ó¤ËÂФ·¤ÆOnClickAsObservable()¤ò¹ØÆɤ·¡¢¥¯¥ê¥Ã¥¯¤µ¤ì¤¿¥Ü¥¿¥ó¤ÎÍ×ÁÇÈÖ¹æ¤ò¥¹¥È¥ê¡¼¥à¤Ëή¤¹IObservable<int>¤òºîÀ®¤·¤Æ¤¤¤ë // numberButtonList.Select()¤Ï¡¢³Æ¥Ü¥¿¥ó¤È¤½¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò°ú¿ô¤È¤·¤Æ¡¢¥Ü¥¿¥ó¤¬¥¯¥ê¥Ã¥¯¤µ¤ì¤¿¤È¤¤Ë¥¤¥ó¥Ç¥Ã¥¯¥¹¤òή¤¹IObservable<int>¤òÊÖ¤¹ // ¤³¤ì¤Ë¤è¤ê¡¢numberButtonsÇÛÎó¤Î³Æ¥Ü¥¿¥ó¤¬¼«Ê¬¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤òµÏ¿¤·¡¢¥¯¥ê¥Ã¥¯¤µ¤ì¤¿¤È¤¤Ë¤½¤ì¤ò¥¹¥È¥ê¡¼¥à¤Ëή¤¹¤³¤È¤¬¤Ç¤¤ë // ¤Þ¤¿¡¢ºÇ¸å¤Ë¤¢¤ëMerge()¤Ï¡¢numberButtonList.Select()¤Ë¤è¤Ã¤ÆÀ¸À®¤µ¤ì¤¿Ê£¿ô¤ÎIObservable<int>¥¹¥È¥ê¡¼¥à¤ò1¤Ä¤ÎIObservable<int>¥¹¥È¥ê¡¼¥à¤ËÅý¹ç¤·¤Æ¤¤¤ë // ¤³¤ì¤Ë¤è¤ê¡¢OnNumberButtonClickAsObservable¥×¥í¥Ñ¥Æ¥£¤Ï¡¢¤É¤Î¥Ü¥¿¥ó¤¬¥¯¥ê¥Ã¥¯¤µ¤ì¤¿¤«¤Ë´Ø·¸¤Ê¤¯¡¢¥¯¥ê¥Ã¥¯¤µ¤ì¤¿¥Ü¥¿¥ó¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤òή¤¹Ã±°ì¤ÎIObservable<int>¥¹¥È¥ê¡¼¥à¤È¤·¤Æ°·¤¦¤³¤È¤¬¤Ç¤¤ë public IObservable<int> OnNumberButtonClickAsObservable => numberButtonList.Select((button, index) => button.OnClickAsObservable().Select(_ => index)).Merge(); void Start() { GenerateNumberButtons(); } public void GenerateNumberButtons() { for (int i = 0; i < buttonCount; i++) { int index = i; NumberButton numberButton = Instantiate(numberButtonPrefab, numberButtonTran, false); numberButton.SetUpNumberButton(index); numberButtonList.Add(numberButton.BtnNumber); } } /// <summary> /// ¥Ü¥¿¥ó¤òÈó³èÀ²½ /// </summary> /// <param name="number"></param> public void DisableNumberButton(int number) { numberButtonList[number].interactable = false; } /// <summary> /// ¥Ü¥¿¥ó¤ò³èÀ²½ /// </summary> /// <param name="number"></param> public void EnableNumberButton(int number) { numberButtonList[number].interactable = true; } public void InitialView() { callButton.interactable = false; SwitchAllButtons(true); txtExplanation.text = ""; } /// <summary> /// Á´¿ô»ú¥Ü¥¿¥ó¤Î¾õÂÖ¤ÎÀÚ¤êÂؤ¨ /// </summary> /// <param name="isSwitch"></param> public void SwitchAllButtons(bool isSwitch) { for (int i = 0; i < numberButtonList.Count; i++) { numberButtonList[i].interactable = isSwitch; } } /// <summary> /// ÆþÎϤ·¤¿¿ô»ú¤ò²èÌ̤Ëɽ¼¨ /// </summary> /// <param name="inputNumberList"></param> public void UpdateInputDisplay(ReactiveCollection<int> inputNumberList) { //Debug.Log(inputNumberList.Count); for (int i = 0; i < txtSelectNumbers.Length; i++) { txtSelectNumbers[i].text = i < inputNumberList.Count ? inputNumberList[i].ToString() : ""; } } /// <summary> /// ÆþÎϤ·¤¿²óÅú¤Î²èÌÌɽ¼¨¹¹¿· /// </summary> /// <param name="ansCount"></param> /// <param name="inputNumbers"></param> /// <param name="hit"></param> /// <param name="blow"></param> public void UpdateExplanation(int ansCount, ReactiveCollection<int> inputNumbers, int hit, int blow) { // string.Join ¤ò»È¤¦¤³¤È¤Ç¡¢Âè2°ú¿ô¤ÎÇÛÎó¤« List ¤ÎÍ×ÁǤò£±¤Ä¤º¤Ä¼è¤ê½Ð¤·¡¢Âè1°ú¿ô¤Îʸ»ú¤ò´Ö¤Ë²Ã¤¨¤ë // ¥«¥ó¥Þ¤ò»ØÄꤹ¤ì¤Ð¥«¥ó¥Þ¶èÀÚ¤ê¤Îʸ»úÎó¤Ë¤Ê¤ê¡¢º£²ó¤Î¤è¤¦¤Ë¶õÇò¤òÆþ¤ì¤ì¤ÐÍ×ÁÇƱ»Î¤¬¤Ä¤Ê¤¬¤ë var inputNumbersStr = string.Join("", inputNumbers); // ʸ»úÎóÊä´° var result = $"²óÅú {ansCount}²óÌÜ¡§{inputNumbersStr}¡§ {hit} HIT {blow} BLOW "; // StringBuiler ¥¯¥é¥¹¤ò¥¤¥ó¥¹¥¿¥ó¥¹¤·¡¢¥³¥ó¥¹¥È¥é¥¯¥¿¤Ë txtExplanation.text ¤òÅϤ·¤Æ½é´ü²½ var stringBuilder = new StringBuilder(txtExplanation.text); // AppendLine ¥á¥½¥Ã¥É¤ò»È¤¤¡¢result ¤òstringBuilder ¤ÎºÇ¸å¤Î¹Ô¤Ë²Ã¤¨¤ë // ÌÀ¼¨Åª¤Ê²þ¹ÔÌ¿Î᤬¤Ê¤¯¤Æ¤â¡¢¼«Æ°Åª¤Ë²þ¹Ô¤·¤¿¾å¤ÇºÇ¸å¤Î¹Ô¤ËÄɲ䵤ì¤ë stringBuilder.AppendLine(result); // ʸ»úÎó¤ËÊÑ´¹¤·¤Æ²èÌÌɽ¼¨¤ò¹¹¿· // StringBuilder ¤ò»ÈÍѤ¹¤ëÍýͳ¤Ï¡¢Ê¸»úÎó¤ÎÏ¢·ëÁàºî¤¬·«¤êÊÖ¤µ¤ì¤ë¾ì¹ç¤Ë¡¢¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤¬¸þ¾å¤¹¤ë¤¿¤á // ʸ»úÎó¤Ï¥¤¥ß¥å¡¼¥¿¥Ö¥ë¡ÊÉÔÊѡˤʤΤǡ¢+= ¤ò»È¤Ã¤Æʸ»úÎó¤òÏ¢·ë¤¹¤ë¤¿¤Ó¤Ë¿·¤·¤¤Ê¸»úÎó¤¬À¸À®¤µ¤ì¤ë // ¤³¤ì¤¬Â¿¤¯¤ÎÏ¢·ëÁàºî¤Ç¹Ô¤ï¤ì¤ë¤È¡¢¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤¬Äã²¼¤¹¤ë¤³¤È¤¬¤¢¤ë // StringBuilder ¤ò»È¤¦¤³¤È¤Ç¡¢¤³¤ÎÌäÂê¤ò²óÈò¤·¡¢¸úΨŪ¤Ëʸ»úÎó¤ÎÏ¢·ë¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤¤ë txtExplanation.text = stringBuilder.ToString(); } /// <summary> /// ¸½ºß¤Þ¤Ç¤Î²óÅú¿ô¤ÈºÇÂç²óÅú¿ô¤Î²èÌÌɽ¼¨¹¹¿· /// </summary> /// <param name="ansCount"></param> /// <param name="maxCount"></param> public void UpdateAnswerCount(int ansCount, int maxCount) { txtCount.text = ansCount.ToString(); txtCountMax.text = maxCount.ToString(); } }
using System; using System.Collections.Generic; using System.Linq; using UniRx; [Serializable] public class NumberGameModel { public ReactiveCollection<int> InputNumberList = new(); //public List<int> InputNumbers { get; private set; } public List<int> CorrectNumbers { get; private set; } public ReactiveProperty<int> AnsCount = new (); public int MaxCount { get; private set; } public ReactiveProperty<NumberGameState> CurrentNumberGameState { get; } = new (); // ÆþÎϤµ¤ì¤¿¿ô»ú¤Î¿ô¤ò´Æ»ë¤¹¤ë¥×¥í¥Ñ¥Æ¥£¤òÄɲà //public ReactiveProperty<int> InputNumbersCount { get; private set; } = new ReactiveProperty<int>(0); /// <summary> /// ¥³¥ó¥¹¥È¥é¥¯¥¿ /// </summary> /// <param name="maxCount"></param> public NumberGameModel(int maxCount) { CurrentNumberGameState.Value = NumberGameState.Play; //InputNumbers = new (); CorrectNumbers = GenerateCorrectNumbers(); // ¤³¤³¤ÇÀµ²ò¤Î¿ô»ú¤òÀßÄꤹ¤ë AnsCount.Value = 0; MaxCount = maxCount; } /// <summary> /// ReactiveCollection ¤ËÄɲᣠ/// Presenter ¤Ç¹ØÆɤ·¡¢Call ¥Ü¥¿¥ó¤Î¥ª¥ó¥ª¥Õ¤ò´Æ»ë /// </summary> /// <param name="number"></param> public void AddInputNumber(int number) { // InputNumbers.Add(number); // // // ¿ô»ú¤¬Äɲ䵤줿¤é¡¢ÆþÎϤµ¤ì¤¿¿ô»ú¤Î¿ô¤ò¹¹¿· // InputNumbersCount.Value = InputNumbers.Count; InputNumberList.Add(number); } /// <summary> /// ReactiveCollection ¤«¤éºï½ü¡£ /// Presenter ¤Ç¹ØÆɤ·¡¢Call ¥Ü¥¿¥ó¤Î¥ª¥ó¥ª¥Õ¤ò´Æ»ë /// </summary> public void RemoveLastInputNumber() { // // ºÇ¸å¤ËÅÐÏ¿¤µ¤ì¤¿ÈÖ¹æ¤òºï½ü // InputNumbers.RemoveAt(InputNumbers.Count - 1); // // // ¿ô»ú¤¬ºï½ü¤µ¤ì¤¿¤é¡¢ÆþÎϤµ¤ì¤¿¿ô»ú¤Î¿ô¤ò¹¹¿· // InputNumbersCount.Value = InputNumbers.Count; // ºÇ¸å¤ËÅÐÏ¿¤µ¤ì¤¿ÈÖ¹æ¤òºï½ü InputNumberList.RemoveAt(InputNumberList.Count - 1); } public void IncrementAnsCount() { AnsCount.Value++; UnityEngine.Debug.Log(AnsCount.Value); } /// <summary> /// ¿ô¤¢¤Æ¥²¡¼¥à¤ÎÀµ²ò¤òºî¤ë /// </summary> private List<int> GenerateCorrectNumbers() { // ½é´üÃͤξðÊó¤ò¸µ¤Ë¡¢¿·¤·¤¤ List ºîÀ® List<int> availableNumbers = new (){ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // // Àµ²òÍѤοô»ú³ÊǼÍѤÎÇÛÎó¤Î½é´ü²½ // int[] correctNumbers = new int[3]; // // // ¥é¥ó¥À¥à¤ÊÃͤò£³¤Ä¼èÆÀ¡£Remove ¤¹¤ë¤³¤È¤Ç½ÅÊ£¤¹¤ë¿ô»ú¤òÁªÂò¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë // for (int i = 0; i < correctNumbers.Length; i++) { // // //int randomIndex = UnityEngine.Random.Range(0, availableNumbers.Count); // // System ¤Î Random ¥¯¥é¥¹¤Î¾ì¹ç¡¢int ·¿¤ÎÍð¿ô¤Ï Next ¥á¥½¥Ã¥É¤ÇºîÀ® // int randomIndex = new Random().Next(0, availableNumbers.Count); // correctNumbers[i] = availableNumbers[randomIndex]; // availableNumbers.RemoveAt(randomIndex); // } // Random ¤Ï¤³¤³¤Ç£±¤Ä¤À¤±¥¤¥ó¥¹¥¿¥ó¥¹¤¹¤ë¡£OrderBy ¤ÎÃæ¤Ç new ¤¹¤ë¤ÈËè²ó¥¤¥ó¥¹¥¿¥ó¥¹¤µ¤ì¤Æ¸úΨ¤¬°¤¤¤¿¤á var random = new Random(); // OrderBy ¤òÍøÍѤ·¤Æ¡¢¥é¥ó¥À¥à¤Ë¼èÆÀ¤µ¤ì¤¿Ãͤò¼èÆÀ¤·¤¿½çÈÖ¤Ëʤ١¢Take ¤ÇÀèƬ¤Î£³¤Ä¤ò¼è¤ê½Ð¤¹ var correctNumbers = availableNumbers.OrderBy(x => random.Next()).Take(3).ToList(); Console.WriteLine($"Àµ²ò : { string.Join(", ", correctNumbers)}"); UnityEngine.Debug.Log($"Àµ²ò : { string.Join(", ", correctNumbers)}"); return correctNumbers; } public void ResetGame() { //InputNumbers.Clear(); InputNumberList.Clear(); } /// <summary> /// Model ¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò£±¤Ä¤À¤±ºî¤ê¡¢¤½¤ì¤ò»È¤¤Â³¤±¤ë¾ì¹ç¤Ë¤Ï¤³¤Î½èÍý¤Ç½é´ü²½¤¹¤ë /// ¹ØÆɽèÍý¤ÏÆ°¤¤¤Æ¤¤¤ë¤Î¤ÇÉÔÍ× /// </summary> public void InitialModel() { CurrentNumberGameState.Value = NumberGameState.Play; CorrectNumbers = GenerateCorrectNumbers(); // ¤³¤³¤ÇÀµ²ò¤Î¿ô»ú¤òÀßÄꤹ¤ë AnsCount.Value = 0; } }
using System.Collections; using UnityEngine; using UniRx; using System.Linq; public class NumberGamePresenter : MonoBehaviour { [SerializeField] private NumberGameView view; private NumberGameModel model; public NumberGameModel NumberGameModel => model; private GameLogic gameLogic; private float waitTime = 3.0f; // ·ë²Ì¤ò½Ð¤¹»þ´Ö¤òÄ´À°¤¹¤ë [SerializeField] private int maxChallengeCount = 10; [SerializeField, Header("¿ô¤¢¤Æ¥²¡¼¥à À®²ÌȯɽÍÑPrefab")] private NumberGameResultPopUp numberGameResultPopUpPrefab; [SerializeField, Header("¿ô¤¢¤Æ¥²¡¼¥à ²óÅú·ë²ÌÍÑPrefab")] private NumberGameDetailPopUp numberGameDetailPopUpPrefab; private NumberGameDetailPopUp numberGameDetailPopUp; private Transform canvasTran; private CompositeDisposable disposableModels = new(); // /// <summary> // /// ½é´ü²½ // /// </summary> // /// <param name="disposables"></param> // /// <param name="canvasTran"></param> // public void InitializeGame(CompositeDisposable disposables, Transform canvasTran) { // // this.canvasTran = canvasTran; // view.GenerateNumberButtons(); // // // ³Æ¿ô»ú¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¥¤¥Ù¥ó¥È¤ò¹ØÆÉ¡£·ë¹ç¤·¤Æ¤¢¤ë¤Î¤Ç¡¢¸ÄÊ̤˹ØÆɤ·¤Ê¤¯¤Æ¤è¤¤ // view.OnNumberButtonClickAsObservable // // ÁªÂò¤µ¤ì¤Æ¤¤¤ë¿ô¤¬3°Ê²¼ ¤«¤Ä ¤¹¤Ç¤ËÁªÂò¤µ¤ì¤Æ¤¤¤ë¿ô»ú¤Ç¤Ï¤Ê¤¤ // .Where(number => model.InputNumberList.Count < 3 && !model.InputNumberList.Contains(number)) // .Subscribe(number => // { // // ÆþÎÏÃͤȤ·¤ÆÊÝ»ý¤·¡¢²èÌ̹¹¿· // model.AddInputNumber(number); // // view.UpdateInputDisplay(model.InputNumberList); // // // ²¡¤µ¤ì¤¿¿ô»ú¤Î¥Ü¥¿¥ó¤Î¤ß¤ò̵¸ú¤Ë¤¹¤ë // view.DisableNumberButton(number); // // //Debug.Log(number); // }) // .AddTo(disposables); // // // ºï½ü¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¥¤¥Ù¥ó¥È¤ò¹ØÆÉ // view.OnDeleteButtonClickAsObservable // .Where(_ => model.InputNumberList.Count > 0) // .Subscribe(_ => // { // // List ¤ÎºÇ¸å¤ÎÍ×ÁǤò¼è¤ê½Ð¤¹(Linq) // int deletedNumber = model.InputNumberList.Last(); // model.RemoveLastInputNumber(); // // // ºï½ü¤·¤¿¥Ü¥¿¥ó¤ò͸ú¤Ë¤¹¤ë // view.EnableNumberButton(deletedNumber); // // view.UpdateInputDisplay(model.InputNumberList); // //Debug.Log(deletedNumber); // }) // .AddTo(disposables); // // // Call ¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¥¤¥Ù¥ó¥È¤ò¹ØÆÉ // // ¾å¤Î½èÍý¤Ç Call ¥Ü¥¿¥ó¤Î¥ª¥ó¡¦¥ª¥ÕÀÚ¤êÂؤ¨¤ò¤·¤Æ¤¤¤ë¤¿¤á¡¢¤³¤³¤Ç¤Ï Subscribe ¤Î¤ß¤Ç¤è¤¤ // view.OnCallButtonClickAsObservable // .Subscribe(_ => ProcessInputNumbers()) // .AddTo(disposables); // } // // /// <summary> // /// ¥²¡¼¥à¤Î½é´ü²½ // /// InitializeGame ¤È Dispose ¤Î¥Á¥§¥Ã¥¯¤Î¤¿¤á¤Ëʬ¤±¤Æ¤¤¤ë¤¬¡¢£±¤Ä¤Ë¤·¤Æ¤âÌäÂê¤Ê¤¤ // /// </summary> // public void ExecuteGame() { // // Model ¤È GameLogic ¤Î¥¤¥ó¥¹¥¿¥ó¥¹ºîÀ®¡£¤³¤³¤ÇºÇÂç»î¹Ô²ó¿ô¤òÀßÄê // model = new NumberGameModel(maxChallengeCount); // gameLogic = new GameLogic(model.CorrectNumbers); // // // ¥Á¥ã¥ì¥ó¥¸²ó¿ô¤Î¹ØÆÉ // model.AnsCount.Subscribe(count => // { // // ²èÌ̤βóÅú²ó¿ôɽ¼¨¤ò¹¹¿· // view.UpdateAnswerCount(count, model.MaxCount); // }).AddTo(disposableModels); // // // Call ¥Ü¥¿¥ó¤Î͸ú¾õÂÖ(on/off)¤òÆþÎϤµ¤ì¤¿¿ô»ú¤Î¿ô¤Ë±þ¤¸¤ÆÊѹ¹ // // ReactiveCommand¤Î¼Â¹Ô²ÄÈݾõÂÖ¤òButton.interactable¥×¥í¥Ñ¥Æ¥£¤Ë¥Ð¥¤¥ó¥É¤·¤Æ // // ReactiveCommand¤Î¾õÂ֤˱þ¤¸¤Æ¥Ü¥¿¥ó¤¬Í¸ú²½¡¦Ìµ¸ú²½¤µ¤ì¤ë // // ReactiveCommand¤Î¾õÂÖ¤Ï Select ¤Î¾ò·ï¤Îɾ²Á¤Ë¤è¤ê¡¢true ¤« false ¤Ë¤Ê¤ë // // model.InputNumbersCount // // .Select(count => count == 3) // ɾ²Á¸å¡¢true ¤Ë¤Ê¤Ã¤¿¤é¥¹¥È¥ê¡¼¥à¤ò int ¤«¤é bool ¤ËÊÑ´¹ // // .ToReactiveCommand() // bool·¿¤Î¥¹¥È¥ê¡¼¥à¤òReactiveCommand¤ËÊÑ´¹ // // .BindTo(view.CallButton) // ¤½¤Î¸åBindTo¤ò»È¤Ã¤ÆView¥¯¥é¥¹¤ÎCallButton¥×¥í¥Ñ¥Æ¥£¤Ëɳ¤Å¤± // // .AddTo(this); // // // ¾åµ¤ÈƱ¤¸½èÍý¤À¤¬¡¢List ¤ò¹ØÆɤµ¤»¤ë¤³¤È¤Ç ReactiveProperty(InputNumbersCount ÊÑ¿ô) ¤ò£±¤Äºï½ü¤Ç¤¤ë // // Call ¥Ü¥¿¥ó¤Î͸ú¾õÂÖ(on/off)¤òÆþÎϤµ¤ì¤¿¿ô»ú¤Î¿ô¤Ë±þ¤¸¤ÆÊѹ¹ // // ReactiveCommand¤Î¼Â¹Ô²ÄÈݾõÂÖ¤òButton.interactable¥×¥í¥Ñ¥Æ¥£¤Ë¥Ð¥¤¥ó¥É¤·¤Æ // // ReactiveCommand¤Î¾õÂ֤˱þ¤¸¤Æ¥Ü¥¿¥ó¤¬Í¸ú²½¡¦Ìµ¸ú²½¤µ¤ì¤ë // // ReactiveCommand¤Î¾õÂÖ¤Ï Select ¤Î¾ò·ï¤Îɾ²Á¤Ë¤è¤ê¡¢true ¤« false ¤Ë¤Ê¤ë // model.InputNumberList.ObserveCountChanged() // .Select(count => count == 3) // ɾ²Á¸å¡¢true ¤Ë¤Ê¤Ã¤¿¤é¥¹¥È¥ê¡¼¥à¤ò int ¤«¤é bool ¤ËÊÑ´¹ // .ToReactiveCommand() // bool·¿¤Î¥¹¥È¥ê¡¼¥à¤òReactiveCommand¤ËÊÑ´¹ // .BindTo(view.CallButton) // ¤½¤Î¸åBindTo¤ò»È¤Ã¤ÆView¥¯¥é¥¹¤ÎCallButton¥×¥í¥Ñ¥Æ¥£¤Ëɳ¤Å¤± // .AddTo(disposableModels); // // // ReactiveCollection ¥¯¥ê¥¢»þ¤Î½èÍý¤¬É¬Íפʾì¹ç¤Ë¤ÏÄɲà // model.InputNumberList.ObserveReset() // .Subscribe(_ => // { // view.UpdateInputDisplay(model.InputNumberList); // view.SwitchAllButtons(true); // //Debug.Log("Clear"); // }) // .AddTo(disposableModels); // // // GameState ¤Î¹ØÆÉ // model.CurrentNumberGameState // .Where(state => state == NumberGameState.Win || state == NumberGameState.Lose) // .Subscribe(state => // { // // ¥²¡¼¥à¤Î¾¡ÇÔ¤òÈ¿±Ç¤·¤Æ¥ê¥¶¥ë¥Èɽ¼¨ // bool isSuccess = state == NumberGameState.Win; // StartCoroutine(GenerateResult(isSuccess)); // }) // .AddTo(disposableModels); // // //model.InitialModel(); // view.InitialView(); // //gameLogic.InitialGameLogic(model.CorrectNumbers); // } // // /// <summary> // /// ÆþÎÏÈÖ¹æ¤Îɾ²Á½èÍý // /// </summary> // private void ProcessInputNumbers() { // // (int hit, int blow) result; // model.IncrementAnsCount(); // result = gameLogic.CheckHitAndBlow(model.InputNumberList); // // // 3HIT¸¡½Ð¤·¤¿¾ì¹ç // if (result.hit == 3) { // // ¥²¡¼¥à¥¯¥ê¥¢¡£²ò½üÀ®¸ù¥á¥Ã¥»¡¼¥¸¤òɽ¼¨ // model.CurrentNumberGameState.Value = NumberGameState.Win; // // return; // } // // // ¥Á¥ã¥ì¥ó¥¸²ó¿ô¤Ë㤷¤¿¾ì¹ç // else if (model.AnsCount.Value >= model.MaxCount) { // // ¥²¡¼¥à¼ºÇÔ¡£²ò½ü¼ºÇÔ¥á¥Ã¥»¡¼¥¸¤òɽ¼¨ // model.CurrentNumberGameState.Value = NumberGameState.Lose; // // return; // } // // // ÉÔÀµ²ò¤Î¾ì¹ç // StartCoroutine(ShowInputDetailCoroutine(result.hit, result.blow)); // } // // // ÉÔÀµ²ò¤Î¾ì¹ç¤Î½èÍý // private IEnumerator ShowInputDetailCoroutine(int hit, int blow) { // // // NumberGameDetailPopUp ¤¬À¸À®¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç // if (!numberGameDetailPopUp) { // // ¥Ý¥Ã¥×¥¢¥Ã¥×À¸À® // numberGameDetailPopUp = Instantiate(numberGameDetailPopUpPrefab, canvasTran, false); // } // // // ·ë²Ìɽ¼¨ // numberGameDetailPopUp.ShowResult(model.InputNumberList[0], model.InputNumberList[1], model.InputNumberList[2], // hit, blow); // // view.UpdateExplanation(model.AnsCount.Value, model.InputNumberList, hit, blow); // // // ÂÔµ¡¤¹¤ë // yield return new WaitForSeconds(waitTime); // // // NumberGameDetailPopUp¤òÊĤ¸¤ë // numberGameDetailPopUp.HidePopUp(); // // // ÆþÎϤµ¤ì¤¿¿ôÃͤò¥¯¥ê¥¢¤·¡¢É½¼¨¤ò¹¹¿·¤¹¤ë // model.ResetGame(); // } // // /// <summary> // /// ¥ê¥¶¥ë¥È¤ÎÀ¸À® // /// </summary> // /// <param name="isSuccess"></param> // /// <returns></returns> // private IEnumerator GenerateResult(bool isSuccess) { // // // ¥ê¥¶¥ë¥È¥Ý¥Ã¥×¥¢¥Ã¥×¤òÀ¸À® // NumberGameResultPopUp numberGameResultPopUp = Instantiate(numberGameResultPopUpPrefab, canvasTran, false); // // // ¥ê¥¶¥ë¥Èɽ¼¨¡£¥²¡¼¥à·ë²Ì¤ò¼õ¤±¤ÆÆâÍƤòºîÀ® // yield return StartCoroutine(numberGameResultPopUp.ShowPopUp(isSuccess)); // // // ¥²¡¼¥à½ªÎ» // model.CurrentNumberGameState.Value = NumberGameState.GameUp; // // // ÆþÎϤµ¤ì¤¿¿ôÃͤò¥¯¥ê¥¢¤·¡¢É½¼¨¤ò¹¹¿·¤¹¤ë // model.ResetGame(); // // disposableModels.Dispose(); // // // ÅÐÏ¿¤·¤¿¹ØÆɽèÍý¤Ï¡¢Dispose ¤·¤Æ¤·¤Þ¤¦¤È¤º¤Ã¤È¹ØÆÉÄä»ß¤µ¤ì³¤±¤ë¤Î¤Ç¡¢¿·¤·¤¯¥¤¥ó¥¹¥¿¥ó¥¹¤òºî¤êľ¤¹ // // ¤è¤Ã¤Æ CompositeDisposable ¤Ï»È¤¤¤Þ¤ï¤»¤Ê¤¤¡£ // disposableModels = new(); // } }
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯