在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例Windows系统编程 → 五线谱学习软件源码(C# )

五线谱学习软件源码(C# )

Windows系统编程

下载此实例
  • 开发语言:C#
  • 实例大小:0.11M
  • 下载次数:8
  • 浏览次数:130
  • 发布时间:2017-11-26
  • 实例类别:Windows系统编程
  • 发 布 人:guchew
  • 所需积分:2

实例介绍

【实例简介】

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


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

shengtao.guo@qq.com


【实例截图】

from clipboard
【核心代码】

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);
        }        
    }
}

实例下载地址

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
;
报警
var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_4847253'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s13.cnzz.com/stat.php%3Fid%3D4847253' type='text/javascript'%3E%3C/script%3E"));