Exemple #1
0
        /// <summary>
        /// 試合開始までの待機中に通信などの処理を行う関数
        /// </summary>
        /// <param name="_source"></param>
        /// <param name="_e"></param>
        /// <param name="isHost"></param>
        /// <param name="data"></param>
        private static void WaitStartMatchTask(object _source, ElapsedEventArgs _e, bool isHost, CommonData data)
        {
            var matchKey = data.RoomName;

            if (isHost)
            {
                state = (data.MatchManager.CanStartMatch(data.PlayerNum)) ? State.SugorokuFrameInitBefore : State.WaitMatchStart;
                if (state == State.SugorokuFrameInitBefore)
                {
                    data.MatchManager.CloseJoinMatch();
                }
            }
            else
            {
                state = (data.MatchManager.IsMatchStarted()) ? State.SugorokuFrameInitBefore : State.WaitMatchStart;
            }

            if (state == State.SugorokuFrameInitBefore)
            {
                WaitEventTimer.Stop();
                var(r, matchStr)  = data.MatchManager.GetMatchInfoString();
                data.MatchInfoStr = "" + matchStr;
                for (int i = 0; !r; i++)
                {
                    Task.Delay(5000);
                    (r, matchStr)     = data.MatchManager.GetMatchInfoString();
                    data.MatchInfoStr = "" + matchStr;
                    if (i > 5)
                    {
                        state = State.Error;
                        return;
                    }
                }
                data.MatchInfo              = JsonConvert.DeserializeObject <MatchInfo>(matchStr);
                PlayingEventTimer.Interval  = 4000;
                PlayingEventTimer.AutoReset = true;
                PlayingEventTimer.Enabled   = true;
                PlayingEventTimer.Elapsed  += (o, e) => PlayingMatchTask(o, e, data);
                PlayingEventTimer.Start();
                state = State.SugorokuFrameInit;
            }
        }
Exemple #2
0
        /// <summary>
        /// ゲームシーンの更新処理
        /// </summary>
        public void Update()
        {
            if (state == State.SugorokuFrameInit)
            {
                SugorokuFrame.Init(Data.MatchInfo.Players);
                MyPlayer = new TextureButton(SugorokuFrame.PlayerTextureHandle[Data.Player.PlayerID], 680, 800, 120, 120);
                state    = State.WaitOtherPlayer;
                WaitEventTimer.Dispose();
                isProcessingPlayingEvent = false;
            }

            if (Data.PlayerEvents.Count == 0 &&
                (state == State.Goal || IsGoal) &&
                SugorokuFrame.IsEndAllAnimation())
            {
                state = State.DrawRanking;
                SugorokuFrame.SetDrawRanking(Data.Ranking);
            }
            if (state == State.DrawRanking)
            {
                if (CloseButton.LeftClicked())
                {
                    DX.DxLib_End();
                }
                return;
            }

            ProcessPlayerEvent();
            SugorokuFrame.Update();

            MessageText = (state) switch
            {
                State.WaitMatchStart => "試合の開始を待っています",
                State.WaitOtherPlayer => "他のプレイヤーの行動を待っています",
                State.WaitThrowDice => "さいころを振ってください",
                State.Error => "エラーが発生しました",
                State.Goal => "ゴールしました",
                _ => ""
            };
        }