banner banner banner
Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 9: Программирование на Visual C# искусственного интеллекта. Издание 3
Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 9: Программирование на Visual C# искусственного интеллекта. Издание 3
Оценить:
Рейтинг: 0

Полная версия:

Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 9: Программирование на Visual C# искусственного интеллекта. Издание 3

скачать книгу бесплатно


По какому-либо одному варианту кода, например, по первому варианту строим программу и запускаем на выполнение обычным образом: Build, Build Selection; Debug, Start Without Debugging.

В ответ Visual C# выполняет программу и на рабочий стол выводит форму в режиме выполнения. На этой форме с заданной нами частотой в 500 миллисекунд (или 0,5 секунды) заголовок “Калькулятор (Calculator)” сменяется на “Калькулятор с анимацией (Calculator with animation)” (рис. 2.10), и таким образом создаётся эффект анимации.

Рис. 2.10. Форма с анимационным заголовком.

Если на листингах 2.3 – 2.5 вместо слова "Калькулятор (Calculator)" записать оператор "" (т.е. удалить слово "Калькулятор (Calculator)"), то будет появляться и исчезать только второй заголовок формы "Калькулятор с анимацией (Calculator with animation)", и этот заголовок будет только мигать (без замены текста) с заданной частотой. Далее на этом калькуляторе можно выполнять описанные выше расчёты (рис. 2.10).

Аналогично создаётся анимация по второму варианту (листинг 2.4) и третьему варианту (листинг 2.5); каждый вариант имеет свои особенности. И читатель может выбрать наиболее понравившийся вариант анимации. Мы же в дальнейшем будем применять, в основном, первый вариант, как наиболее простой.

Следовательно, мы закончили разработку методики создания трёх вариантов анимации на примере анимационного заголовка формы. Подчеркнем, что мы разработали именно общую методику создания анимации, так как если в программах на листингах 2.3 – 2.5 вместо ключевого слова this записать значение свойства Name для какого-нибудь элемента управления (label1, button1 и т.д.), то мы получим эффект анимации для текста на этом элементе управления.

2.8. Методика приостановки и возобновления анимации

В любом работающем приложении целесообразно предусмотреть возможность приостановки анимации и мультипликации (остановки изменения во времени какого-либо изображения), например, когда цель анимации достигнута, и она больше не нужна, а также предусмотреть возможность повторного запуска анимации, остановки, запуска и т.д. Можно разработать много вариантов прекращения анимации без прекращения работы всего приложения. Но все основные варианты основаны на том, что в методе для обработки какого-либо события в данном приложении вместо заданного выше значения true свойства Enabled мы должны записать значение false, например, при помощи следующей одной строки кода (которую мы уже применили в предыдущем листинге).

Листинг 2.6. Строка кода, останавливающая анимацию.

В данном Издании тексты программ отсутствуют.

Недостаток записи только этой одной строки кода заключается в том, что после остановки анимации мы не сможем запустить её вновь.

Чтобы возобновить анимацию, мы должны в обработчик события записать другую строку кода:

Листинг 2.7. Строка кода, возобновляющая анимацию.

В данном Издании тексты программ отсутствуют.

Теперь объединим эти две последние строки кода в обработчике события с целью приостановки и возобновления анимации после каждого щелчка, например, кнопки. Для этого в режиме проектирования Form1 стандартно (как описано выше) вводим новую кнопку Button, в свойстве Text записываем &Stop/Start Animation и дважды щёлкаем по этой кнопке (или в панели Properties для этой кнопки на вкладке Events дважды щёлкаем по имени события Click). Появляется файл Form1.cs с автоматически сгенерированным шаблоном метода, выше которого объявляем булеву переменную, а в шаблон записываем код, как показано на следующем листинге:

Листинг 2.8. Код для приостановки и возобновления анимации.

В данном Издании тексты программ отсутствуют.

Для проверки этого кода по первому варианту (листинг 2.3) запускаем программу, например, так: Ctrl+F5. В ответ Visual C# выполняет программу и на рабочий стол выводит форму в режиме выполнения. На этой форме с заданной нами частотой в 500 миллисекунд (или 0,5 секунды) заголовок “Калькулятор (Calculator)” сменяется на “Калькулятор с анимацией (Calculator with animation)” (рис. 2.11), и таким образом создаётся эффект анимации.

Рис. 2.11. Анимация прекращается и возобновляется после щелчка кнопки Stop/Start Animation.

Анимация прекращается и возобновляется поочередно после каждого щелчка кнопки (рис. 2.11). Так как в свойстве Text мы записали &Stop/Start Animation с символом &, то первая буква S подчёркнута и, следовательно, эту кнопку можно нажать не только мышью, но и комбинацией клавиш Alt+s.

Если мы желаем, чтобы анимация прекращалась и возобновлялась после каждого щелчка по данной форме, то в панели Properties для этой формы на вкладке Events дважды щёлкаем по имени события Click и в появившийся шаблон метода записываем код, подобный коду на листинге 2.8.

Аналогично можно разработать другие варианты анимации, а также варианты приостановки и возобновления анимации и мультипликации, как показано в наших предыдущих книгах, например, [Литература] или с сайта ZharkovPress.ru.

2.9. Общая методика использования методов из других платформ на основе динамически подключаемых библиотек

Часто при решении задачи требуется использовать метод (процедуру или функцию), которой в данной программе на данном языке нет, но мы точно знаем, что она имеется в другой программе (комплексе, пакете, платформе) на том же или другом языке и там выполняет то, что нам нужно. Для использования в нашем приложении метода (функции) из любого другого языка, например, из языка Visual Basic, необходимо создать ссылку на этот язык.

Для создания ссылки, например, на Visual Basic выполняем такие шаги.

1. В меню Project выбираем Add Reference (или в панели Solution Explorer делаем правый щелчок на имени проекта и в появившемся контекстном меню выбираем Add Reference).

Мы увидим панель Add Reference (рис. 2.12).

2. В панели Add Reference на вкладке (.NET) выделяем динамически подключаемую библиотеку (dynamic link library), например, Microsoft.VisualBasic и щёлкаем кнопку OK.

Эта ссылка добавляется в список ссылок в панели Solution Explorer (рис. 2.13).

Таким образом мы создали ссылку на Visual Basic и теперь можем подключать к нашему приложению методы (процедуры и функции) из этого языка, как показано в следующем параграфе.

Рис. 2.12. Выбираем Microsoft.VisualBasic. Рис. 2.13. Панель Solution Explorer.

2.10. Методика использования методов из других платформ на примере подачи звукового сигнала

Целесообразно, чтобы в работающем приложении эффекты анимации сопровождались звуковыми эффектами, и самым простым из них является звуковой сигнал.

В одной из наших предыдущих книг мы уже писали, что подача звукового сигнала в Visual Basic основана на том, что в тело функции для обработки какого-либо события в любом приложении следует записать стандартную функцию Beep(). Если в комплексе Visual Basic мы запишем Beep() в функцию для обработки события Tick таймера, то звуковой сигнал будет периодически создаваться согласно генерируемому событию Tick с заданным нами интервалом времени.

Если мы запишем Beep() в функцию для обработки, например, события Tick таймера в комплексе Visual C#, то выйдет сообщение об ошибке, что в Visual C# такой функции нет.

Согласно приведённой в предыдущем параграфе методике использования в нашем приложении метода (функции) из любого другого комплекса, создаём ссылку на Visual Basic. Когда в шаблон функции для обработки, например, события Tick таймера в Visual C# мы запишем (после пространства имён Microsoft) оператор в виде точки (.), то увидим подсказку из списка пространств имён, которые мы можем применить в данном приложении (рис. 2.14).

Рис. 2.14. Пространства имён, которые можно применить в приложении VC#.

Дважды щёлкаем по имени Visual Basic, тем самым вставляя это имя в код (Microsoft.VisualBasic).

Когда далее после имен Microsoft.VisualBasic мы запишем тот же оператор (.), то увидим подсказку из списка классов пространства имён VisualBasic, которые мы можем применить в данном приложении (рис. 2.15). Отметим, что если бы ранее мы не создали ссылку на динамически подключаемую библиотеку (dynamic link library) Microsoft.VisualBasic, то сейчас мы бы не увидели этого списка классов. Дважды щёлкаем по имени класса Interaction, тем самым вставляя это имя в код:

Microsoft.VisualBasic.Interaction

Рис. 2.15. Список классов, которые можно применить в приложении.

Когда далее после имен Microsoft.VisualBasic.Interaction мы запишем оператор (.), то увидим подсказку в виде списка методов (процедур и функций) Visual Basic из класса Interaction, которые мы можем применить в данном приложении (рис. 2.16). Дважды щёлкаем по имени функции Beep(), тем самым вставляя это имя в код (Microsoft.VisualBasic.Interaction.Beep()).

Таким образом, мы закончили запись в шаблон метода для обработки, например, события Tick таймера в Visual C# одной строки кода с методом Beep():

Microsoft.VisualBasic.Interaction.Beep();

Этот звуковой сигнал Beep будет периодически создаваться согласно генерируемому событию Tick с заданным нами интервалом времени Interval.

Рис. 2.16. Список методов, которые можно применить в приложении.

Если мы хотим ограничить число звуковых сигналов величиной N_Beep, то выше шаблона метода объявляем и инициализируем (например, 10) эту переменную N_Beep:

В данном Издании тексты программ отсутствуют.

Далее мы разработаем программы для подачи звукового сигнала в различные моменты анимации, например, в момент каждого удара вечно прыгающего мяча о преграду (внутри которой прыгает мяч).

Также далее кратко, а в наших предыдущих книгах [Литература] подробно мы разработаем методику дополнения любого приложения говорящими мультипликационными персонажами, которыми можно управлять при помощи щелчков клавиш и кнопок и голосовых команд в микрофон.

В заключении этой главы отметим, что данная методология (парадигма) проектирования классического калькулятора для сложения двух чисел позволяет нам не только самостоятельно и быстро изучить (понять и осознать) некоторые основы новейшей версии Visual C# с учётом эффектов анимации, но и одновременно (параллельно с освоением) создать открытое (для дополнения) приложение, которое мы уже можем применять в нашей индивидуальной практической и повседневной деятельности.

В следующей главе мы опишем более сложную методику создания приложения-калькулятора не на одной, а на двух (и более) формах с другими анимационными эффектами и разработаем методику передачи данных с одной формы на другую.

Глава 3. Методика разработки приложений на нескольких формах и передачи данных с одной формы на другую

3.1. Алгоритм приложения и проектирование первой формы

Будем усложнять методические примеры. Поэтому, если в предыдущей главе мы разработали методику ввода исходных данных в одну форму и вывода результатов расчёта на эту же форму, то в этой главе рассмотрим пример (который может найти широкое применение на практике) и разработаем методику ввода исходных данных в одну форму, а вывода результатов проектирования на другую форму. Эта же методика может быть применена и при создании вычислительной системы для вывода результатов проектирования на большое число форм в соответствии с потребностями пользователя. Так как на практике (например, на производстве) важным является решение различных расчётных задач, то продолжим разработку методического примера расчёта, например, умножения двух чисел. Алгоритм этого примера сформулируем так:

на первой форме:

в первое окно вводим первый сомножитель;

во второе окно вводим второй сомножитель;

щёлкаем по кнопке со знаком равенства;

на появившейся второй форме (с пустыми тремя окнами):

щёлкаем кнопку OK, после чего во всех трёх окнах мы увидим числа.

Проверяем (контролируем) правильность вывода программой двух сомножителей в первые два окна второй формы (эти значения мы просто передадим с первой формы и подробно объясним, как это делается); анализируем результат умножения, который мы увидим в третьем окне.

Кратко, чтобы не повторяться (более подробно с рисунками приведено в предыдущей главе), опишем создание проекта для нового приложения-диалога.

1. В VS щёлкаем значок New Project (или выбираем File, New, Project).

2. В панели New Projects (показанной выше) в окне Project Types выделяем Visual C#; в окне Templates проверяем, что выделен (по умолчанию) шаблон Templates, Visual C#, Windows Classic Desktop, Windows Forms App (.NET Framework); в окне Name печатаем имя проекта, например, Calculator2_2 (первая цифра 2 означает второй вариант калькулятора, а вторая цифра 2 – на двух формах). Щёлкаем OK.

В ответ Visual C# создаёт проект нашего приложения и выводит форму Form1 (аналогично проекту в предыдущей главе).

По разработанной выше методике осуществляем визуальное проектирование формы (рис. 3.1) и вводим элементы управления (рамку группы, окна, кнопки, тексты) и компонент таймер (свойства таймера Timer: значение Enabled изменяем на True; значение Interval, например, оставляем по умолчанию, равным 100 миллисекундам).

3.2. Проектирование следующей формы

Для ввода в проект новой формы в меню Project выбираем Add Windows Form (или в панели Solution Explorer делаем правый щелчок по имени проекта и выбираем Add, Add Windows Form). Мы увидим панель Add New Item (рис. 3.2).

В панели Add New Item оставляем все по умолчанию и щёлкаем кнопку Add (в предыдущих версиях VS щёлкаем кнопку Open). В ответ Visual C# выводит рабочий стол VS с новой Form2, такой же, как Form1 (рис. 3.3) и добавляет в панель Solution Explorer новый пункт Form2.cs (рис. 3.4). Если форма Form2 не появилась, то в панели Solution Explorer дважды щёлкаем по пункту Form2.cs (рис. 3.4).

Аналогично, как первую, проектируем данную форму Form2 (рис. 3.3).

По этой схеме можно добавлять и большее количество форм, сколько необходимо для каждого конкретного приложения.

Рис. 3.1. Первая форма в режиме проектирования.

Рис. 3.2. В панели Add New Item оставляем все по умолчанию и щёлкаем Add.

Рис. 3.3. Form2 после проектирования. Рис. 3.4. Панель Solution Explorer.

3.3. Код программы

Дважды щёлкаем кнопку на Form1 в режиме проектирования. Появившийся шаблон (после записи нашего кода) принимает вид следующего метода.

Листинг 3.1. Метод Button1_Click с нашим кодом для первой формы.

Текст программы смотрите в предыдущем Издании книги.

Напомним, что в Visual C#, в отличие от Visual Basic, имена переменных чувствительны к регистру букв. Метод Show() показывает немодальную форму, а модальную форму выводит метод ShowDialog().

Дважды щёлкаем кнопку на Form2. Перед появившимся шаблоном объявляем две открытые глобальные переменные C и D, а внутри этого шаблона записываем наш код, после чего шаблон принимает вид следующего метода.

Листинг 3.2. Строка и метод Button1_Click с нашим кодом для Form2.

Текст программы опубликован в предыдущем Издании книги.

Таких локальных переменных, как A и B, и, соответственно, глобальных переменных C и D, в общем случае, мы записываем попарно столько, сколько на первой форме имеется окон TextBox, из которых мы будем передавать значения на другую форму. Переменные F, G можно не вводить (мы их ввели для наглядности) и заменить их на C, D. Отметим, что мы разработали несколько вариантов кода для передачи данных с одной формы на другую, но в этой книге приводим только один вариант (листинги 3.1 и 3.2), как наиболее простой.

Более подробно эти программы объяснены в наших книгах с сайта ZharkovPress.ru.

3.4. Методика разработки анимации в виде бегущей строки

На основании разработанной в предыдущей главе методики создания анимационного заголовка формы в данной главе мы разработаем методику создания бегущей строки любого текста, как в заголовке формы, так и внутри какого-либо элемента управления. Эту методику опишем на примерах двух вариантов подвижного заголовка, а именно:

бегущий слева – направо заголовок;

бегущий справа – налево заголовок следующей формы.

Алгоритм бегущего слева – направо заголовка первой формы формулируем так:

начиная с первой буквы, поэтапно появляются буквы заголовка (по одной букве) с заданным нами в панели Properties интервалом времени Interval;

после появления всех букв заголовка он исчезает, и цикл поэтапного (побуквенного) вывода заголовка повторяется.

Для программной реализации этого алгоритма дважды щёлкаем значок timer1 ниже первой формы в режиме проектирования. Появляется файл Form1.cs с шаблоном метода timer1_Tick для обработки события Tick, периодически (с заданным интервалом) возбуждаемого объектом (таймером) timer1. Перед шаблоном объявляем глобальную переменную, а внутри этого шаблона записываем наш код, как показано на следующем листинге.

Листинг 3.3. Код для бегущего слева – направо заголовка.

Текст программы опубликован в предыдущем Издании книги.

Наши комментарии в коде позволять читателю грамотно создать аналогичный бегущий заголовок в его приложении.

Алгоритм бегущего справа – налево заголовка следующей формы формулируем иначе (чем предыдущий):

появляются все буквы заголовка;

начиная с последней буквы, поэтапно исчезают буквы заголовка (по одной букве) с заданным нами в панели Properties интервалом времени Interval;

после исчезновения последней буквы заголовка снова появляются все буквы заголовка и цикл поэтапного (побуквенного) удаления заголовка повторяется.