/// <summary> /// 最後までプログラムを走らせる /// </summary> /// <param name="std"></param> public void Run(IStdStream std) { var beforeProgramAddress = m_programAddress; for (m_programAddress = 0; m_programAddress < m_program.Length; ++m_programAddress) { DoProgram(m_program[m_programAddress], ref std); } m_programAddress = beforeProgramAddress; }
/// <summary> /// 1メソッドごとに更新 /// </summary> /// <param name="std"></param> public void Update(IStdStream std) { DoProgram(m_program[m_programAddress++], ref std); // 最後まで行ったら元に戻る if (m_programAddress >= m_program.Length) { Reset(); } }
/// <summary> /// 指定されたプログラムを走らせる /// </summary> /// <param name="program"></param> /// <param name="std"></param> private void DoProgram(BRAIN_FUCK program, ref IStdStream std) { var comp = new KemonoFriendsLang.Compiler(); switch (program) { case BRAIN_FUCK.NXT: ++m_memoryAddress; break; case BRAIN_FUCK.INC: ++m_memory[m_memoryAddress]; break; case BRAIN_FUCK.PRV: --m_memoryAddress; break; case BRAIN_FUCK.DEC: --m_memory[m_memoryAddress]; break; case BRAIN_FUCK.OPN: m_programAddress = opn(m_programAddress); break; case BRAIN_FUCK.CLS: m_programAddress = cls(m_programAddress); break; case BRAIN_FUCK.PUT: std.Out(m_memory[m_memoryAddress]); break; case BRAIN_FUCK.GET: m_memory[m_memoryAddress] = std.In(); break; default: break; } }