/// <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; } }
/// <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; } }