ITCS - Территория Flash. Основы ActionScript 2.0. Выпуск 6 - РАЗРАБОТКА КОМПЬЮТЕРНЫХ ИГР
Сегодня: Понедельник, 05.12.2016, 23:34 (МСК)| Здравствуйте, Гость| Мой профиль | Регистрация | Вход | RSS

Домашние системы
3D-видения

Роботы и экзоскелеты

Роботы и экзоскелеты

Наушники. Как выбирать?

Программы — виртуальные гитаристы
Главная » РАЗРАБОТКА КОМПЬЮТЕРНЫХ ИГР

Территория Flash. Основы ActionScript 2.0. Выпуск 6

30.07.2010
Приветствуем всех на территории Flash. Основной задачей данного выпуска является «добивание» программы-калькулятора, кою мы начали в прошлом выпуске. Раз уж начали тему, то ее стоит и завершить.

На самом деле, программируя такие несложные вещи как калькулятор, мы учимся понимать флэш. Например, при обсуждении событий указателя мыши для кнопок образуемого интерфейса, мы не упомянули о том, что среди всего арсенала отсутствует такая очевидная (для обычных средств разработки) вещь как реакция на doubleclick. Почему? Дело в том, что сам флэш-плеер очень сильно увязан с веб-приложениями, в которых также нет реакции на двойной щелчок. То есть, тут следует отметить, что сама технология флэш — вебовая, не смотря на то, что в ее рамках достаточно удобно создавать локальные приложения. Именно в рамках локальных приложений можно сказать, что разница между тем, соберете ли вы, например, наш калькулятор в Delphi (C++ Builder) либо во Flash, не велика. Но данное утверждение будет не совсем верным — Flash c ActionScript гораздо эффективнее по скорости создания приложений плюс обладает уникальными возможностями для рисования графических оболочек.  


Калькулятор


Итак, я надеюсь, что все успешно создали интерфейс из 13 кнопок («0-9», «.», «+/-») и текстового табло. Также я попросил сделать так, чтобы все работало, как и в обычном калькуляторе, то есть цифры на табло появлялись друг за другом в моменты нажатия соответствующих кнопок и т.п. Если данный вопрос вызвал трудности, то опишу решение, что называется на пальцах.
Допустим, введем переменную под именем tablo. Она хранит в себе строку, которая отображается на реальном табло калькулятора и перезаписывается в момент добавления нового символа. При старте программы, сбросе и т.п., tablo = "0", соответственно 0 и отображается. Далее по нажатии на какую-нибудь цифру нужно на табло добавить символ, что делается с помощью специально написанной и не сложной по сути функции, в которую передается непосредственно сама нажатая цифра. В общем, все будет выглядеть примерно так:

function AddSym(var1) {
if (tablo == "0") {
dig = var1;
return dig;
} else {
dig = tablo+var1;
count++;
return dig;
}

Переменная count — это текущее количество символов на табло, а dig — это непосредственно само число, на данном этапе представленное в виде строки. Соответственно, примерно таким же образом, вы можете вносить точку, при этом предусмотрев, чтобы она могла вводиться только один раз (стандартная логика), и добавлять или убирать «-». То есть в данном случае мы работаем только со строкой.
Если же вы захотите вводить число пи или е, как это делается в калькуляторе, то достаточно просто предусмотреть соответствующие кнопки, по нажатии на которые переменная tablo сначала обнуляется, а потом на экран выводится само число с помощью этой же функции из представленного листинга. Это же касается тех случаев, когда, например, вы хотите использовать константы взятые извне. Например, в рамках своей программы, я из интернета (XML-файла) считываю курсы валют, и они автоматически у меня становятся константами, которые я могу вызывать по мере надобности.


Математические операции


Простейшие математические операции (+, -, /, *) делаются достаточно тривиально. То есть, по нажатии на соответствующие кнопки, отображаемое в тот момент на табло число запоминается как промежуточная переменная, потом вводится новая и происходит сама операция. Тривиально-то оно чисто внешне, потому как больше вы повозитесь с логикой, а именно, вам нужно исключить варианты, когда вычисления начинаются после того как вы два раза нажмете знак «умножить», либо «умножить», а потом сразу «разделить». Второй случай сложнее, поскольку должно использоваться последнее действие из выбранных. То есть, в общем, вам понадобится четыре логических указателя, которые указывают на текущий статус вызова одной из четырех операций. Соответственно, по нажатии любой другой кнопки они (эти указатели) обнуляются. Все это сделать не трудно, нужно просто немного повозиться. Постарайтесь сделать все как можно оптимальнее.
После работы с четырьмя знаками простейших математических операций вам будет совсем не трудно реализовать кнопку «=».
Единственный подводный камень, с которым вы можете столкнуться в рамках кода — это необходимость преобразования типа данных переменных при сложении. В остальных случаях строчные автоматически становятся числовыми, а при сумме необходимо использовать оператор преобразования типа Number (), потому как без этого произойдет конкатенация (сложение символов). На самом деле для строгости кода можно бы было потребовать, чтобы вы преобразовывали в числовой тип при вычислениях абсолютно все. Но раз уж самими разработчиками языка предусмотрена  возможность это не использовать, то тут нам проще. Работает? Ну, и ладно.


Математические функции


Как уже было сказано ранее, все математические функции для ActionScript находятся в объекте Math и вызываются через него. Отдельно стоит сказать о тригонометрических функциях, поскольку они требуют указания углов в радианах, а не градусах. Посему, сразу убивая двух зайцев, даю несколько строк кода, правда, предупрежу, что все математические операции своего калькулятора я для удобства вынес в рамки одной функции, это ее фрагмент:

function FunCalc(A) {
if (A == "sin") {
D2 = Math.sin(Number(D2)/180*Math.PI);
}
tablo = D2;
}

То есть, в саму функцию я сообщаю условное название математической, а после все и расшифровываю. Думаю, что и вы поступите также:)


Транслятор ошибок


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

function ErrorMess() {
if (isNaN(D2)) {
tablo = "Не определен";
}
if (D2 == Number.NEGATIVE_INFINITY) {
tablo = "Минус бесконечность";
}
if (D2 == Number.POSITIVE_INFINITY) {
tablo = "Плюс бесконечность";
}
}

Думаю, что объяснять тут особо и нечего.


В завершение


В принципе, писать калькулятор на ActionScript по сравнению со стандартными языками и средами гораздо проще, программирование больше напоминает решение головоломки. И, конечно, меньше всего думаешь о том, что нужно будет открывать книги, искать описания специфики работы с определенными типами и т.п. Даже сам факт того, что числовой тип в ActionScript является единственным, не разделенным на real, integer и т.п. говорит о простоте языка. Поэтому я и рекомендую учиться современному программированию на его базе.  
В любом случае этот язык и сама архитектура флэша уже позволяет больше думать о форме, логике и структуре самого приложения и его отдельных крупных элементов, поскольку практическая реализация задуманного делается достаточно быстро. Вот, например, в прошлом выпуске мы рассмотрели пример с двумя Listbox’ами, создаваемыми по разным методикам. Что интересно, практическое воплощение уже готовых решений делается буквально за полчаса-час. The Fat of The Land.


Новое задание — пятнашки


Прошлый выпуск оканчивался на задании, этот так же. Оно уже не будет касаться нашего калькулятора, а попрошу я вас сделать вот что (думается, что калькулятор вы все-таки завершите самостоятельно): напишите игру пятнашки, используя 15 кнопок, созданных самостоятельным образом.

Кристофер

Перепечатка материалов или их фрагментов возможна только с согласия автора.







Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Ассоциация боевых роботов
Рекомендуем...
Новости

Разделы

Опросы

Какой язык программирования вы считаете наиболее актуальным сегодня?
Всего ответов: 308

Друзья

3D-кино






Найти на сайте:








Об авторе       Контакты      Вопрос-ответ        Хостинг от uCoz