⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 大话设计模式源码bigtalkdesignpattern_src
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Windows.Forms;
using AxWMPLib;
using WMPLib;

namespace 解释器模式
{
    public partial class Form1 : Form
    {

        string path = Application.StartupPath + "\\Sounds\\";
        MediaPlayer p;
        MediaPlayer p2;
        Expression expression;
        Expression expression2;
        PlayContext context;
        PlayContext context2;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            InitSound();
        }

        private void button11_Click(object sender, EventArgs e)
        {
            context = new PlayContext();
            context.PlayText = txtMain.Text;
            context2 = new PlayContext();
            context2.PlayText = txtChord.Text;
            timerMain.Interval = 1000;
            timerChord.Interval = 1000;
            timerMain.Start();
            timerChord.Start();
        }

        private void timerMain_Tick(object sender, EventArgs e)
        {
            if (context.PlayText.Length > 0)
            {
                try
                {
                    expression = ExpressionFactory.CreateExpression(context.PlayText.Substring(0, 1),p);
                    expression.Interpret(context);
                    timerMain.Interval = p.Interval;
                            
                }
                catch (Exception ex)
                {
                    timerMain.Stop();
                    MessageBox.Show(ex.Message);
                }
                
            }
            else
            {
                timerMain.Stop();
            }
        }

        private void timerChord_Tick(object sender, EventArgs e)
        {
            if (context2.PlayText.Length > 0)
            {
                try
                {
                    expression2 = ExpressionFactory.CreateExpression(context2.PlayText.Substring(0, 1), p2);
                    expression2.Interpret(context2);
                    timerChord.Interval = p2.Interval;

                }
                catch (Exception ex)
                {
                    timerChord.Stop();
                    txtChord.Text = txtChord.Text.Replace(context2.PlayText, "");
                    MessageBox.Show(context2.PlayText);
                }

            }
            else
            {
                timerChord.Stop();
            }
        }


        private void InitSound()
        {
            p = new MediaPlayer(path, axCL2, axDL2, axEL2, axFL2, axGL2, axAL2, axBL2, axCL1, axDL1, axEL1, axFL1, axGL1, axAL1, axBL1, axC, axD, axE, axF, axG, axA, axB, axCH1, axDH1, axEH1, axFH1, axGH1, axAH1, axBH1, axCH2, axDH2, axEH2, axFH2, axGH2, axAH2, axBH2, axCH3, axDH3, axEH3);

            for (int i = 0; i < 38; i++)
                p.GetSound(i, i);
            p2 = new MediaPlayer(path, axCL2, axDL2, axEL2, axFL2, axGL2, axAL2, axBL2, axCL1, axDL1, axEL1, axFL1, axGL1, axAL1, axBL1, axC, axD, axE, axF, axG, axA, axB, axCH1, axDH1, axEH1, axFH1, axGH1, axAH1, axBH1, axCH2, axDH2, axEH2, axFH2, axGH2, axAH2, axBH2, axCH3, axDH3, axEH3);

            for (int i = 0; i < 38; i++)
                p2.GetSound(i, i);

            
        }

        private void btnSHT_Click(object sender, EventArgs e)
        {
            txtMain.Text = "T 500 " +
            "O 3 E 0.5 G 0.5 A 3 E 0.5 G 0.5 D 3 E 0.5 G 0.5 A 0.5 O 4 C 1 O 3 A 0.5 G 1 C 0.5 E 0.5 D 3 " +
            "D 0.5 E 0.5 G 3 D 0.5 E 0.5 O 2 A 3 A 0.5 O 3 C 0.5 D 1.5 E 0.5 D 0.5 O 2 B 0.5 A 0.5 O 3 C 0.5 O 2 G 3 " +

            "O 3 E 0.5 G 0.5 A 3 E 0.5 G 0.5 D 3 E 0.5 G 0.5 A 0.5 O 4 C 1 O 3 A 0.5 G 1 C 0.5 E 0.5 D 3 " +
            "D 0.5 E 0.5 G 3 D 0.5 E 0.5 O 2 A 3 A 0.5 O 3 C 0.5 D 1.5 E 0.5 D 0.5 O 2 B 0.5 A 0.5 G 0.5 O 3 C 3 " +

            "P 0.5 O 4 C 0.5 C 0.5 O 3 A 0.5 O 4 C 2 P 0.5 O 3 A 0.5 O 4 C 0.5 O 3 A 0.5 G 2.5 G 0.5 E 0.5 A 1.5 G 0.5 C 1 D 0.25 C 0.25 D 0.5 E 2.5 "+
            "E 0.5 E 0.5 D 0.5 E 2.5 O 4 C 0.5 C 0.5 O 3 B 0.5 A 3 E 0.5 E 0.5 D 1.5 E 0.5 O 4 C 0.5 O 3 B 0.5 A 0.5 E 0.5 G 2.5 "+

            "O 3 E 0.5 G 0.5 A 3 E 0.5 G 0.5 D 3 E 0.5 G 0.5 A 0.5 O 4 C 1 O 3 A 0.5 G 1 C 0.5 E 0.5 D 3 " +
            "D 0.5 E 0.5 G 3 D 0.5 E 0.5 O 2 A 3 A 0.5 O 3 C 0.5 D 1.5 E 0.5 D 0.5 O 2 B 0.5 A 0.5 G 0.5 O 3 C 3 ";


            txtChord.Text = "T 500 " +
            "P 1 O 1 F 0.5 O 2 C 0.5 A 0.5 C 0.5 A 1 P 1 O 1 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 O 2 G 1 " +
            "P 1 O 1 F 0.5 O 2 C 0.5 A 0.5 C 0.5 O 0 A 0.5 O 1 E 0.5 " +
            "O 2 C 1 O 1 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 O 2 G 0.5 O 1 B 0.5 " +
            "O 2 G 0.5 O 1 B 0.5 C 0.5 G 0.5 O 2 E 0.5 O 1 G 0.5 O 2 E 0.5 O 1 G 0.5 O 2 E 0.5 O 1 G 0.5 F 0.5 C 0.5 F 0.5 C 0.5 F 0.5 C 0.5 F 0.5 C 0.5 O 0 E 0.5 B 0.5 O 1 G 0.5 B 0.5 G 0.5 O 0 B 0.5 P 0.5 O 1 E 0.5 E 0.5 E 0.5 E 0.5 E 0.5 E 1 " +

            "P 1 O 1 F 0.5 O 2 C 0.5 A 0.5 C 0.5 A 1 P 1 O 1 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 O 2 G 1 " +
            "P 1 O 1 F 0.5 O 2 C 0.5 A 0.5 C 0.5 O 0 A 0.5 O 1 E 0.5 " +
            "O 2 C 1 O 1 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 O 2 G 0.5 O 1 B 0.5 " +
            "O 2 G 0.5 O 1 B 0.5 C 0.5 G 0.5 O 2 E 0.5 O 1 G 0.5 O 2 E 0.5 O 1 G 0.5 O 2 E 0.5 O 1 G 0.5 F 0.5 C 0.5 F 0.5 C 0.5 F 0.5 C 0.5 F 0.5 C 0.5 O 0 E 0.5 B 0.5 O 1 G 0.5 B 0.5 G 0.5 O 0 B 0.5 P 0.5 O 1 E 0.5 E 0.5 E 0.5 E 0.5 E 0.5 E 1 " +

            "P 2 O 1 D 0.5 A 0.5 O 2 F 0.5 O 1 A 0.5 P 2 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 P 2 F 0.25 O 2 C 0.25 F 0.25 A 0.25 O 3 C 0.25 O 2 A 0.25 F 0.25 C 0.25 " +
            "O 0 A 0.25 O 1 E 0.25 A 0.25 O 2 C 0.25 E 0.25 C 0.25 O 1 A 0.25 E 0.25 O 0 A 0.25 O 1 E 0.25 A 0.25 O 2 C 0.25 E 0.25 C 0.25 O 1 A 0.25 E 0.25 " +
            "P 2 O 1 C 0.5 G 0.5 O 2 E 0.5 O 1 G 0.5 P 2 D 0.5 A 0.5 O 2 F 0.5 O 1 A 0.5 " +
            "P 2 O 1 E 0.25 B 0.25 O 2 E 0.25 G 0.25 B 0.25 G 0.25 E 0.25 O 1 B 0.25 " +
            "D 0.25 A 0.25 O 2 D 0.25 F 0.25 A 0.25 F 0.25 D 0.25 O 1 A 0.25 E 0.25 G 0.25 O 2 B 0.25 E 0.25 G 0.25 E 0.25 B 0.25 O 1 G 0.25 "+

            "P 1 O 1 F 0.5 O 2 C 0.5 A 0.5 C 0.5 A 1 P 1 O 1 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 O 2 G 1 " +
            "P 1 O 1 F 0.5 O 2 C 0.5 A 0.5 C 0.5 O 0 A 0.5 O 1 E 0.5 " +
            "O 2 C 1 O 1 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 O 2 G 0.5 O 1 B 0.5 " +
            "O 2 G 0.5 O 1 B 0.5 C 0.5 G 0.5 O 2 E 0.5 O 1 G 0.5 O 2 E 0.5 O 1 G 0.5 O 2 E 0.5 O 1 G 0.5 F 0.5 C 0.5 F 0.5 C 0.5 F 0.5 C 0.5 F 0.5 C 0.5 O 0 E 0.5 B 0.5 O 1 G 0.5 B 0.5 G 0.5 O 0 B 0.5 P 0.5 O 1 E 0.5 E 0.5 E 0.5 E 0.5 E 0.5 E 1 ";
            
        }

        private void btnYXDCB_Click(object sender, EventArgs e)
        {
            //textBox1.Text = "T 1000 O 1 G 0.5 O 2 C 0.5 E 1.5 G 0.5 E 1 D 0.5 C 0.5 C 0.5 C 0.5 C 0.5 O 1 A 0.25 G 0.25 G 1 G 0.5 O 2 C 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 G 0.5 D 0.25 E 0.25 D 0.5 C 0.25 D 0.25 D 1 A 0.5 G 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 E 0.5 D 0.5 C 0.5 C 0.25 D 0.25 O 1 A 1 G 0.5 A 0.5 O 2 C 1.5 D 0.25 E 0.25 D 1 E 0.5 C 0.5 C 3 O 1 G 0.5 O 2 C 0.5 E 1.5 G 0.5 E 1 D 0.5 C 0.5 C 0.5 C 0.5 C 0.5 O 1 A 0.25 G 0.25 G 1 G 0.5 O 2 C 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 G 0.5 D 0.25 E 0.25 D 0.5 C 0.25 D 0.25 D 1 A 0.5 G 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 E 0.5 D 0.5 C 0.5 C 0.25 D 0.25 O 1 A 1 G 0.5 A 0.5 O 2 C 1.5 D 0.25 E 0.25 D 1 E 0.5 C 0.5 C 3 E 0.5 G 0.5 O 3 C 1.5 O 2 B 0.25 O 3 C 0.25 O 2 B 1 A 0.5 G 0.5 A 0.5 O 3 C 0.5 O 2 E 0.5 D 0.5 C 1 C 0.5 C 0.5 C 0.5 O 3 C 1 O 2 G 0.25 A 0.25 G 0.5 D 0.25 E 0.25 D 0.5 C 0.25 D 0.25 D 3 E 0.5 G 0.5 O 3 C 1.5 O 2 B 0.25 O 3 C 0.25 O 2 B 1 A 0.5 G 0.5 A 0.5 O 3 C 0.5 O 2 E 0.5 D 0.5 C 1 C 0.5 C 0.5 C 0.5 O 3 C 1 O 2 G 0.25 A 0.25 G 0.5 D 0.25 E 0.25 D 0.5 C 0.5 C 3 ";
            txtMain.Text = "T 1000 O 2 G 0.5 O 3 C 0.5 E 1.5 G 0.5 E 1 D 0.5 C 0.5 C 0.5 C 0.5 C 0.5 O 2 A 0.25 G 0.25 G 1 G 0.5 O 3 C 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 G 0.5 D 0.25 E 0.25 D 0.5 C 0.25 D 0.25 D 1 A 0.5 G 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 E 0.5 D 0.5 C 0.5 C 0.25 D 0.25 O 2 A 1 G 0.5 A 0.5 O 3 C 1.5 D 0.25 E 0.25 D 1 E 0.5 C 0.5 C 3 O 2 G 0.5 O 3 C 0.5 E 1.5 G 0.5 E 1 D 0.5 C 0.5 C 0.5 C 0.5 C 0.5 O 2 A 0.25 G 0.25 G 1 G 0.5 O 3 C 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 G 0.5 D 0.25 E 0.25 D 0.5 C 0.25 D 0.25 D 1 A 0.5 G 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 E 0.5 D 0.5 C 0.5 C 0.25 D 0.25 O 2 A 1 G 0.5 A 0.5 O 3 C 1.5 D 0.25 E 0.25 D 1 E 0.5 C 0.5 C 3 E 0.5 G 0.5 O 4 C 1.5 O 3 B 0.25 O 4 C 0.25 O 3 B 1 A 0.5 G 0.5 A 0.5 O 4 C 0.5 O 3 E 0.5 D 0.5 C 1 C 0.5 C 0.5 C 0.5 O 4 C 1 O 3 G 0.25 A 0.25 G 0.5 D 0.25 E 0.25 D 0.5 C 0.25 D 0.25 D 3 E 0.5 G 0.5 O 4 C 1.5 O 3 B 0.25 O 4 C 0.25 O 3 B 1 A 0.5 G 0.5 A 0.5 O 4 C 0.5 O 3 E 0.5 D 0.5 C 1 C 0.5 C 0.5 C 0.5 O 4 C 1 O 3 G 0.25 A 0.25 G 0.5 D 0.25 E 0.25 D 0.5 C 0.5 C 3 ";
            txtChord.Text = "";
        }

        
    }

    class PlayContext
    {
        private string text;
        public string PlayText
        {
            get { return text; }
            set { text = value; }
        }
    }
    /// <summary>
    /// 表达式工厂
    /// </summary>
    class ExpressionFactory
    {
        public static Expression CreateExpression(string letter, MediaPlayer p)
        {
            Expression result = null;
            switch (letter)
            {
                case "O":
                    result = new Scale(p);
                    break;
                case "T":
                    result = new Speed(p);
                    break;
                case "C":
                case "D":
                case "E":
                case "F":
                case "G":
                case "A":
                case "B":
                case "P":
                    result = new Note(p);
                    break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -