Exemplo n.º 1
0
        /// <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;
        }
Exemplo n.º 2
0
        /// <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();
            }
        }
Exemplo n.º 3
0
        /// <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;
            }
        }