Example #1
0
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            NNForms view = new NNForms();

            new Presenter(view);
            Application.Run(view);
        }
        public Presenter(NNForms forms)
        {
            view = forms;

            enabledlearn = false;

            // Текст из комбобокса
            string textCombo = view.comboBox1.Text;

            #region События

            //select fix
            view.comboBox1.SelectedIndexChanged += (s, e) =>
            {
                view.pictureBox1.Focus();
            };

            //при загрузке
            view.Load += (s, e) =>
            {
                view.comboBox1.DropDownHeight = 200;

                _util.Clear(view.pictureBox5);

                neuralmemory = new NeuralMemory();

                obj = new _OpenFileDialog(neuralmemory, view);

                string[] items = neuralmemory.GetLiteras();
                if (items.Length > 0)
                {
                    view.comboBox1.Items.AddRange(items);
                    view.comboBox1.SelectedIndex = 0;
                }

                view.comboBox1.SelectedIndex = -1;

                //подключение шрифтов

                view.comboBox1.Font = new Font("Segoe UI", 14, FontStyle.Bold);
                InitCustomLabelFont();
                view.label6.Font = new Font("Segoe UI", 12, FontStyle.Bold);
            };

            //сохранение
            view.FormClosing += (s, e) =>
            {
                neuralmemory.SaveState();
            };

            //отключить курсор
            view.pictureBox5.Cursor.Dispose();

            //выйти
            view.button1.Click += (s, e) =>
            {
                Application.Exit();
            };

            //свернуть окно
            view.button2.Click += (s, e) =>
            {
                view.WindowState = FormWindowState.Minimized;
            };

            //изменить цвет
            view.button1.MouseEnter += (s, e) => {
                view.button1.BackColor = Color.FromArgb(255, 45, 45);
            };
            view.button1.MouseLeave += (s, e) => {
                view.button1.BackColor = Color.FromArgb(45, 153, 225);
            };

            //очистить текстбокс
            view.textBox1.Click += (s, e) => {
                view.textBox1.Clear();
                view.button4.Enabled = true;
            };

            //бургер меню
            view.button4.MouseEnter += (s, e) => {
                view.button4.Text = "Запомнить значение";
            };
            view.button4.MouseLeave += (s, e) => {
                view.button4.Text = " ";
            };
            view.button5.MouseEnter += (s, e) => {
                view.button5.Text = "Разрешить обучение";
            };
            view.button5.MouseLeave += (s, e) => {
                view.button5.Text = " ";
            };
            view.button3.MouseEnter += (s, e) => {
                view.button3.Text = "Загрузить память";
            };
            view.button3.MouseLeave += (s, e) => {
                view.button3.Text = " ";
            };
            view.button6.MouseEnter += (s, e) => {
                view.button6.Text = "Нарисовать символ из списка";
            };
            view.button6.MouseLeave += (s, e) => {
                view.button6.Text = " ";
            };
            view.pictureBox8.Click += (s, e) =>
            {
                view.panel2.Visible      = true;
                view.pictureBox9.Visible = true;
            };
            view.pictureBox9.Click += (s, e) =>
            {
                view.panel2.Visible      = false;
                view.pictureBox9.Visible = false;
            };
            //

            //не правильно
            view.pictureBox6.Click += (s, e) => {
                view.textBox1.Text        = "Введи";
                view.pictureBox15.Visible = true;
                view.label3.Visible       = true;
                view.pictureBox7.Visible  = true;
                view.textBox1.Visible     = true;
                view.pictureBox7.Visible  = true;
                view.textBox1.Visible     = true;
                view.pictureBox2.Visible  = false;
                view.pictureBox3.Visible  = true;
                view.pictureBox4.Enabled  = false;
                view.label5.Visible       = false;
                view.label6.Visible       = false;
                view.label8.Visible       = true;
            };

            //правильно
            view.pictureBox4.Click += (s, e) => {
                view.pictureBox6.Enabled  = false;
                view.label7.Visible       = true;
                view.pictureBox15.Visible = false;
                view.label3.Visible       = false;
                view.pictureBox7.Visible  = false;
                view.textBox1.Visible     = false;
                view.pictureBox6.Visible  = false;
                view.pictureBox4.Visible  = false;
                view.label4.Visible       = false;
                view.label5.Visible       = false;
                view.label6.Visible       = false;
                view.pictureBox5.Enabled  = false;
                view.button5.Enabled      = false;

                if (enabledlearn == true)
                {
                    int[,] clipArr = _util.CutImageToArray((Bitmap)view.pictureBox5.Image, new Point(view.pictureBox5.Width, view.pictureBox5.Height));

                    if (clipArr == null)
                    {
                        return;
                    }

                    arr = _util.LeadArray(clipArr, new int[NeuralMemory.neuralInArrayWidth, NeuralMemory.neuralInArrayHeight]);

                    string str = neuralmemory.CheckLitera(arr);

                    if (str == null)
                    {
                        str = "null";
                    }

                    neuralmemory.SetTraining(str, arr);
                }

                _util.Clear(view.pictureBox5);
            };

            view.pictureBox10.Click += (s, e) => {
                view.pictureBox5.Enabled = true;
            };

            view.button4.Click += (s, e) =>
            {
                BrainRickBrain();
            };
            view.textBox1.KeyDown += (s, e) => {
                if (e.KeyCode == Keys.Enter)
                {
                    BrainRickBrain();
                    view.button4.Enabled = false;
                }
            };

            //Добавить или не добавить в память
            void BrainRickBrain()
            {
                // Текст из текстбокса
                string text = view.textBox1.Text;

                if (text == null || view.textBox1.TextLength == 0 || text == string.Empty || text == " " || text == "  " || text == "Введи")
                {
                    MessageBox.Show("Плохой с тебя учитель! Введи значение еще раз", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    view.pictureBox1.Focus();
                    return;
                }
                else
                {
                    view.label8.Visible = false;
                    view.label3.Visible = false;

                    //добавить образ в память
                    foreach (var item in view.comboBox1.Items)
                    {
                        if (text == item.ToString() || text == textCombo)
                        {
                            neuralmemory.SetTraining(text, arr);
                            view.pictureBox15.Visible = false;
                            view.label3.Visible       = false;
                            view.pictureBox7.Visible  = false;
                            view.textBox1.Visible     = false;
                            view.pictureBox3.Visible  = false;
                            view.pictureBox2.Visible  = true;
                            view.pictureBox4.Enabled  = false;
                            view.pictureBox6.Enabled  = false;
                            view.label8.Visible       = false;
                            view.label9.Text          = "Хорошо Морти, я запомню";
                            view.label9.Visible       = true;
                            view.pictureBox6.Visible  = false;
                            view.pictureBox4.Visible  = false;
                            _util.Clear(view.pictureBox5);
                            view.pictureBox5.Enabled = false;
                            view.label5.Visible      = false;
                            view.label6.Visible      = false;
                            return;
                        }
                    }
                    neuralmemory.SetTraining(text, arr);
                    view.comboBox1.Items.Add(text);
                    view.comboBox1.SelectedIndex = view.comboBox1.Items.Count - 1;

                    view.pictureBox15.Visible = false;
                    view.label3.Visible       = false;
                    view.pictureBox7.Visible  = false;
                    view.textBox1.Visible     = false;
                    view.pictureBox3.Visible  = false;
                    view.pictureBox2.Visible  = true;
                    view.pictureBox4.Enabled  = false;
                    view.pictureBox6.Enabled  = false;
                    view.label8.Visible       = false;
                    view.label9.Text          = "Хорошо Морти, я запомню";
                    view.label9.Visible       = true;
                    view.pictureBox6.Visible  = false;
                    view.pictureBox4.Visible  = false;
                    _util.Clear(view.pictureBox5);
                }
            }

            //рисовать
            view.pictureBox5.MouseMove += (s, e) =>
            {
                view.pictureBox5.Cursor = new Cursor(AppDomain.CurrentDomain.BaseDirectory + "oth503.cur"); //измени имя, что бы выбрать курсор
                if (e.Button == MouseButtons.Left)
                {
                    Point  endP  = new Point(e.X, e.Y);
                    Bitmap image = (Bitmap)view.pictureBox5.Image;
                    using (Graphics g = Graphics.FromImage(image))
                    {
                        g.DrawLine(new Pen(Color.FromArgb(45, 153, 225), 10), _startP, endP);
                    }
                    view.pictureBox5.Image = image;
                    _startP = endP;
                }
            };

            view.pictureBox5.MouseDown += (s, e) =>
            {
                _startP                  = new Point(e.X, e.Y);
                view.label9.Visible      = false;
                view.label4.Visible      = true;
                view.label8.Visible      = false;
                view.label5.Visible      = false;
                view.label6.Visible      = false;
                view.pictureBox4.Enabled = false;
                view.pictureBox6.Enabled = false;
                view.button5.Enabled     = true;
            };

            //распознать рисунок
            view.pictureBox11.Click += (s, e) =>
            {
                if (view.pictureBox5.Enabled != false)
                {
                    Learn();
                    view.pictureBox6.Visible = true;
                    view.pictureBox4.Visible = true;
                    view.label4.Visible      = false;
                    view.label5.Visible      = true;
                    view.label6.Visible      = true;
                    view.label7.Visible      = false;
                    view.label8.Visible      = false;
                    view.pictureBox2.Visible = true;
                    view.pictureBox3.Visible = false;
                    view.pictureBox6.Enabled = true;
                    view.pictureBox4.Enabled = true;
                    view.label9.Visible      = false;
                }
                else
                {
                    MessageBox.Show("Сначала нарисуй рисунок, Морти!", " ", MessageBoxButtons.OK, MessageBoxIcon.Question);
                }
            };

            //очистить холст
            view.pictureBox12.Click += (s, e) =>
            {
                _util.Clear(view.pictureBox5);
                view.pictureBox5.Enabled = false;
                view.label5.Visible      = false;
                view.label6.Visible      = false;
                view.label4.Visible      = true;
                view.pictureBox4.Enabled = false;
                view.pictureBox6.Enabled = false;
                view.label8.Visible      = false;
            };

            // Добавить в память txt файл
            view.button3.Click += async(s, e) =>
            {
                try
                {
                    await obj.AddZipFileAsync(view.comboBox1);
                }
                catch
                {
                    MessageBox.Show("Что-то пошло не так, попробуй загрузить еще раз!");
                }
            };

            //Нарисовать символ из памяти
            view.button6.Click += (s, e) =>
            {
                if (view.comboBox1.Text == string.Empty)
                {
                    MessageBox.Show("Не могу отрисовать то, чего нет");
                }
                else
                {
                    _util.Clear(view.pictureBox5);
                    view.pictureBox5.Image = _util.DrawCharacter(view.pictureBox5.Image, (string)view.comboBox1.SelectedItem);
                }
            };

            // запомнить текст комбобокса
            view.comboBox1.TextChanged += (s, e) => {
                textCombo = view.comboBox1.Text;
            };

            // Удалить из памяти
            view.button7.Click += (s, e) =>
            {
                try
                {
                    if (textCombo == string.Empty)
                    {
                        MessageBox.Show("Выбери элемент памяти!");
                    }
                    else
                    {
                        neuralmemory.DeleteMemory(textCombo);
                        view.comboBox1.Items.Remove(textCombo);
                    }
                }
                catch
                {
                    MessageBox.Show("Все значения из памяти были удалены");
                }
            };

            view.button5.Click += (s, e) =>
            {
                enabledlearn = true;
                MessageBox.Show("Режим обучения включён");
            };

            void Learn()
            {
                int[,] clipArr = _util.CutImageToArray((Bitmap)view.pictureBox5.Image, new Point(view.pictureBox5.Width, view.pictureBox5.Height));

                if (clipArr == null)
                {
                    return;
                }

                arr = _util.LeadArray(clipArr, new int[NeuralMemory.neuralInArrayWidth, NeuralMemory.neuralInArrayHeight]);

                string s = neuralmemory.CheckLitera(arr);

                if (s == null)
                {
                    s = "null";
                }

                view.label6.Text = s;

                view.button5.Enabled = false;
            }

            void InitCustomLabelFont()
            {
                //Create your private font collection object.
                PrivateFontCollection pfc = new PrivateFontCollection();

                //Select your font from the resources.
                //My font here is "Digireu.ttf"
                int fontLength = Resources._8bit.Length;

                // create a buffer to read in to
                byte[] fontdata = Resources._8bit;

                // create an unsafe memory block for the font data
                IntPtr data = Marshal.AllocCoTaskMem(fontLength);

                // copy the bytes to the unsafe memory block
                Marshal.Copy(fontdata, 0, data, fontLength);

                // pass the font to the font collection
                pfc.AddMemoryFont(data, fontLength);


                foreach (Control f in view.Controls)
                {
                    if (f is Label && f is Button)
                    {
                        f.Font = new Font(pfc.Families[0], 8, FontStyle.Regular);
                    }
                }
            }

            #endregion
        }