Exemplo n.º 1
0
        /// <summary>
        /// 構造解析済みのデータを分類する
        /// </summary>
        /// <param name="data">Hashtable 型の構造解析データ</param>
        public void AddParsed(List<Hashtable> data)
        {
            try
            {
                switch (data[0]["type"].ToString())
                {
                    case "ball":
                        AddParsedTurn(data);
                        break;
                    case "playmode":
                        // ターン数を取得して playmode に挿入
                        // playmode は同じターンなら始めに宣言される

                        int nowTurn = int.Parse(data[0]["turn"].ToString());

                        Turn turn = new Turn();
                        turn.SetTurn(nowTurn);
                        turn.SetPlaymode(data[0]["info"].ToString());

                        // 指定ターンに挿入
                        turns[nowTurn] = turn;
                        break;
                    case "team":
                        leftTeamName = data[0]["leftTeamName"].ToString();
                        rightTeamName = data[0]["rightTeamName"].ToString();
                        break;
                    default:
                        break;
                }
            }
            catch
            {
                throw;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// ターンを追加する
        /// </summary>
        /// <param name="data">Hashtable 型の構造解析データ</param>
        private void AddParsedTurn(List<Hashtable> data)
        {
            try
            {
                // 現在のターン
                int nowTurn = int.Parse(data[0]["turn"].ToString());

                Turn turn = new Turn();
                Ball ball = new Ball();

                // 既に指定されたターン数があれば playmode のみ引き継ぎ
                if (GetExistTurn(nowTurn))
                {
                    // 既にあるターンを取得
                    Turn existTurn = GetTurn(nowTurn);

                    // playmode のみ引き継ぎ
                    turn.SetPlaymode(existTurn.GetPlaymode());
                }
                else
                    // 指定されていなければ前のターンから playmode を取得
                {
                    // 3000 ターンが無い場合などの対処
                    // 2999 → 3001
                    int i = 0;
                    while (true)
                    {
                        i++;
                        if (GetExistTurn(nowTurn - i))
                        {
                            break;
                        }
                    }
                    turn.SetPlaymode(turns[nowTurn - i].GetPlaymode());
                }

                // 現在のターンをセット
                turn.SetTurn(nowTurn);

                // ボールの状態を格納
                ball = ConvertBall(data[0]);
                turn.SetBall(ball);

                // 先頭にあるボールの配列を削除
                data.RemoveAt(0);

                // player データを格納
                foreach (var ht in data)
                {
                    Player player = new Player();
                    player = ConvertPlayer(ht);

                    // チームに分別
                    switch (ht["team"].ToString())
                    {
                        case "l":
                            turn.AddLeftPlayer(player);
                            break;
                        case "r":
                            turn.AddRightPlayer(player);
                            break;
                        default:
                            throw new FormatException();
                    }
                }

                turns[turn.GetTurn()] = turn;
            }
            catch
            {
                throw;
            }
        }