public void GetRowTest() { var matrix = new[,] { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10,11,12} }; var expected = new[] { 4, 5, 6 }; var result = matrix.GetRow(1); CollectionAssert.AreEqual(expected, result); }
private static List<CommandState> GetCommandStateList(IList<IBattleCommand> commandList) { const int O = 0; // 使用可能 const int X = 1; // 使用不可能 const int N = 2; // 非表示 var commandEnableTable = new[,] { // 移動, 攻撃, 魔法, 特技, 待機 { O, O, O, O, O }, // 初期 { X, O, X, O, O }, // 移動済み { X, X, X, X, O }, // 行動済み }; var stateTransion = new[,] { // 移動, 攻撃, 魔法, 特技, 待機 { 1, 2, 2, 2, 2 }, // 初期 { 2, 2, 2, 2, 2 }, // 移動済み { 2, 2, 2, 2, 2 }, // 行動済み HACK: 本当は不要? }; var states = new List<CommandState>(); foreach (var commandEnable in commandEnableTable.GetRows()) { var cmds = new List<CommandInfo>(); commandEnable.ForEach((enable, i) => { if (enable != N) cmds.Add(new CommandInfo(commandList[i], enable == O)); }); var state = new CommandState(); state.CommandInfos = cmds; states.Add(state); } stateTransion.GetRows().ForEach((trans, i) => { var transTable = new Dictionary<IBattleCommand, CommandState>(); commandEnableTable.GetRow(i) .Zip(trans) .ForEach((t, j) => { // 使用可能ならば状態遷移を生成 if (t.Item1 == O) transTable.Add(commandList[j], states[t.Item2]); }); states[i].Transition = transTable; }); return states; }