基本信息
源码名称:五线谱学习软件源码(C# )
源码大小:0.11M
文件格式:.rar
开发语言:C#
更新时间:2017-11-26
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

一个用于学习五线谱的小软件。


  五线谱学习软件,用于钢琴初学者对五线谱的记忆。

shengtao.guo@qq.com



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

/*
    本源代码版权归郭胜涛所有,仅限于学习交流,切勿用于商业用途,
    该程序中所涉及的媒体资源文件均来源于互联网,本软件作者不承担相应的法律责任!
     任何疑问请联系  shengtao.guo@qq.com
*/

namespace Study
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
            double delt = 6;
            lowNotes.Clear();
            lowNotes.Add(new Note( NoteName.C, AddLineType.adddown2));
            lowNotes.Add(new Note( NoteName.D, AddLineType.adddown2));
            lowNotes.Add(new Note( NoteName.E, AddLineType.adddown1));
            lowNotes.Add(new Note( NoteName.F));
            lowNotes.Add(new Note( NoteName.G));
            lowNotes.Add(new Note(NoteName.A));
            lowNotes.Add(new Note( NoteName.B));
            lowNotes.Add(new Note( NoteName.C));
            lowNotes.Add(new Note( NoteName.D));
            lowNotes.Add(new Note( NoteName.E));
            lowNotes.Add(new Note( NoteName.F));
            lowNotes.Add(new Note( NoteName.G));
            lowNotes.Add(new Note( NoteName.A));
            lowNotes.Add(new Note( NoteName.B));
            lowNotes.Add(new Note( NoteName.C, AddLineType.addup1));
            lowNotes.Add(new Note( NoteName.D, AddLineType.addup2));
            lowNotes.Add(new Note(NoteName.E, AddLineType.addup2));
            for (int i = 0; i < lowNotes.Count; i  )
                lowNotes[i].YPosition = 270 - (i * delt);

            upNotes.Clear();
            upNotes.Add(new Note( NoteName.A, AddLineType.adddown2));
            upNotes.Add(new Note(NoteName.B, AddLineType.adddown2));
            upNotes.Add(new Note(NoteName.C, AddLineType.adddown1));
            upNotes.Add(new Note( NoteName.D));
            upNotes.Add(new Note( NoteName.E));
            upNotes.Add(new Note( NoteName.F));
            upNotes.Add(new Note( NoteName.G));
            upNotes.Add(new Note( NoteName.A));
            upNotes.Add(new Note( NoteName.B));
            upNotes.Add(new Note(NoteName.C));
            upNotes.Add(new Note(NoteName.D));
            upNotes.Add(new Note(NoteName.E));
            upNotes.Add(new Note(NoteName.F));
            upNotes.Add(new Note(NoteName.G));
            upNotes.Add(new Note(NoteName.A, AddLineType.addup1));
            upNotes.Add(new Note(NoteName.B, AddLineType.addup2));
            upNotes.Add(new Note(NoteName.C, AddLineType.addup2));

            for (int i = 0; i < upNotes.Count; i  )
                upNotes[i].YPosition = 140 - (i * delt);

            randon = new Random(lowNotes.Count);
        }

        private IList<Note> lowNotes = new List<Note>();

        private IList<Note> upNotes = new List<Note>();

        private Pen defaultLinePen = new Pen(Color.Black, 1);

        private Random randon = null;

        private Note currentNode;

        private void drawLowNode(Graphics g)
        {
            int ind = randon.Next(lowNotes.Count);

            currentNode = lowNotes[ind];
            float y = (float)currentNode.YPosition - 1;
            float x = 120;
            g.DrawImage(Properties.Resources.note,
              new PointF(x, y
                    - (Properties.Resources.note.Height / 2)));
            if (currentNode.addLineType == AddLineType.addup2)
            {
                g.DrawLine(defaultLinePen, new PointF(x - 10, 186),
                    new PointF(x   30, 186));
                g.DrawLine(defaultLinePen, new PointF(x - 10, 174),
                    new PointF(x   30, 174));
            }
            if (currentNode.addLineType == AddLineType.addup1)
            {
                g.DrawLine(defaultLinePen, new PointF(x - 10, 186),
                    new PointF(x   30, 186));
            }
            if (currentNode.addLineType == AddLineType.adddown1)
            {
               g.DrawLine(defaultLinePen, new PointF(x - 10, 258),
                    new PointF(x   30, 258));
            }
            if (currentNode.addLineType == AddLineType.adddown2)
            {
                g.DrawLine(defaultLinePen, new PointF(x - 10, 258),
                    new PointF(x   30, 258));
                g.DrawLine(defaultLinePen, new PointF(x - 10, 270),
                    new PointF(x   30, 270));
            }
        }

        private void drawoUpNode(Graphics g)
        {
            int ind = randon.Next(lowNotes.Count);
            float x = 120;
            currentNode = upNotes[ind];
            float y = (float)currentNode.YPosition - 1;
            g.DrawImage(Properties.Resources.note,
              new PointF(x, y
                    - (Properties.Resources.note.Height / 2)));

            if (currentNode.addLineType == AddLineType.addup2)
            {
                g.DrawLine(defaultLinePen, new PointF(x - 10, 44),
                    new PointF(x   30, 44));
                g.DrawLine(defaultLinePen, new PointF(x - 10, 56),
                    new PointF(x   30, 56));
            }
            if (currentNode.addLineType == AddLineType.addup1)
               g.DrawLine(defaultLinePen, new PointF(x - 10, 56),
                    new PointF(x   30, 56));
            if (currentNode.addLineType == AddLineType.adddown1)
                g.DrawLine(defaultLinePen, new PointF(x - 10, 128),
                    new PointF(x   30, 128));
            if (currentNode.addLineType == AddLineType.adddown2)
            {
                g.DrawLine(defaultLinePen, new PointF(x - 10, 128),
                    new PointF(x   30, 128));
                g.DrawLine(defaultLinePen, new PointF(x - 10, 140),
                    new PointF(x   30, 140));
            }
        }

      
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            //draw lownote
            if (radioButtonH.Checked)
                drawoUpNode(e.Graphics);
            if (radioButtonL.Checked)
                drawLowNode(e.Graphics);

            if (radioButtonHL.Checked)
            {
                int r = randon.Next(10);
                if(r % 2 == 0)
                    drawLowNode(e.Graphics);
                else
                    drawoUpNode(e.Graphics);
            }
           
        }

        private int count = 0;

        private int right = 0;

        private int wrong = 0;

        private void newNote()
        {
            this.pictureBox1.Refresh();
            count  ;
            this.labelRight.Text = "正确:"   right.ToString();
            this.labelWrong.Text = "错误:"   wrong.ToString();
            this.labelCount.Text = "总数:"   count.ToString();
        }

        private void button8_Click(object sender, EventArgs e)
        {
            count = 0;
            right = 0;
            wrong = 0;
            this.pictureBox2.Image = null;
            newNote();
        }

        private void input(NoteName baseName)
        {
            if (currentNode != null)
            {
                if (currentNode.baseName == baseName)
                {
                    right  ;
                    this.labelErro.Text = "";
                    this.pictureBox2.Image = Properties.Resources.right;
                    newNote();
                }
                else
                {
                    wrong  ;
                    this.pictureBox2.Image = Properties.Resources.error;
                    this.labelErro.Text = "应为 "   currentNode.baseName.ToString();
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            input(NoteName.C);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            input(NoteName.D);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            input(NoteName.E);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            input(NoteName.F);
        }

        private void button5_Click(object sender, EventArgs e)
        {
            input(NoteName.G);
        }

        private void button6_Click(object sender, EventArgs e)
        {
            input(NoteName.A);
        }

        private void button7_Click(object sender, EventArgs e)
        {
            input(NoteName.B);
        }        
    }
}