(Продолжение. Начало в №8)
Никак не добраться до теории, поскольку наглухо погрязли в практике:). Хорошо это или плохо, я пока не знаю, но хочется как-то и до флекса добраться. Доберемся, в общем.
А так... мо-ло-дцы, что еще сказать! Присылать по почте ваши готовые работы, естественно, можно, что сделало уже несколько человек без особого спроса. Мало того, если вы что-либо делаете во флэше/флексе и хотите, чтобы об этом было рассказано широкой аудитории, присылайте свои работы или ссылки на них. Адрес e-mail: christopher@tut.by. Возможно, если работ получится много, будем формировать списки со ссылками в рамках данной "территории". А некоторые программы разбирать отдельно.
Калькулятор, калькулятор...
Восемь калькуляторов прислали на прошлой неделе, что можно считать неким успехом данной подрубрики. Грубых ошибок практически ни у кого нет, да и как можно заблудиться в трех соснах? Хотя, естественно, попался один калькулятор, в котором знак минуса перед числом добавляется нормально, а убирается плохо, с цифрой :), так же, например, Алексей из Минска поспешил и не перевел тригонометрические функции из радиан в градусы. В пяти калькуляторах из присланных не предусмотрено логики при описанной мною в прошлом выпуске ситуации двойного нажатия кнопки математической операции (+,-,*,/), либо сначала "умножить", а потом "разделить" и т.п. Тут можно придумать различные варианты, например, (1) ввести четыре логических указателя, (2) ввести переменную с пятью значениями от 0 до 4 (0 - ни одна операция не вызвана, 1-4 - операции). То есть, совершенствоваться есть куда.
Что еще сказать? Когда я погрузился в чтение кодов, то большинство из них нашел хорошо прокомментированными, некоторые даже излишне, например:
А=B*C; // Умножаю В на С, получаю А
Такой код больше напоминает прозаический рассказ :). В принципе, это не плохо - одна из тех редких ситуаций, когда "пере-" лучше, чем "недо-". В любом случае, когда вы начнете писать программы более серьезного уровня со множеством строк кода, на большое число комментариев времени хватать не будет, но привычка останется. Хорошо, в общем.
Пятнашки
Это задание №2 из прошлого выпуска. Я попросил вас сделать игру пятнашки, используя кнопки собственного изготовления. Вариантов реализации данной игры несколько, например, вы можете использовать в качестве "подкладки" под кнопки (1) одну большую панель, (2) шестнадцать панелей либо (3) вообще ничего не использовать, привязываясь только к координатам.
Соответственно, клетки "подкладки" - это один массив (одномерный и двумерный), хотя, опять же, не исключен вариант с заданием переменной, способной принимать 16 значений. Но с массивами в данном случае работать гораздо удобнее, поскольку возможна более гибкая функциональная автоматизация при работе с ними и при их анализе, это же касается и "привязывания" логики, например, клетка свободна или нет. В остальном, все достаточно просто.
Поскольку времени с последнего задания прошло не много, на мой почтовый ящик "свалились" только одни пятнашки от Михаила Николаева. Все очень хорошо сделано в плане программирования, и Михаил даже пошел дальше, а именно: ввел случайную сортировку для первоначальной расстановки кнопок. Вот тут-то мы и остановимся.
Плавный переход к заданию №3
Михаил реализовал случайную сортировку достаточно громоздким способом (имеется в виду внешний вид кода), написав множество строк if-else, их просто огромное количество, как и дополнительных переменных, условий и т.п., в общем, суммарное количество строчек кода, посвященного случайному подбору, перевалило за сотню, а то и более. Это абсолютно не оптимально, хотя в итоге данный код что-то случайно и подбирает:). Нормальных же решений может быть несколько, я приведу самое простое и понятное для читателя в виде небольшого листинга:
var arr:Array = new Array (16); i = 0;//Индекс k = 0;//Проверочный индекс while (i<16) { arr[i] = random(16); while (k<16) { if (arr[k] == arr[i]&& k!=i) { i-; break; } k++; } i++; k=0; } trace(arr);
Вот и все, большего ничего не нужно, это и есть готовая рабочая функция для Михаила. Кстати, стоит напомнить о том, что индексы массивов начинаются с нуля, то есть если он содержит 16 значений, то это значит, что индексы идут от 0 до 15. Точно так же работает и функция random, указывая random (16), вы случайно подбираете цифры от 0 до 15. В нашем варианте (пятнашки) это очень удобно, с точки зрения того, что ноль будет обозначать пустую клетку.
Задание №3
А теперь перейдем непосредственно к следующему заданию. Наверняка многие из вас сталкивались с играми, имеющимися в стандартном комплекте Windows (пасьянсы, сапер и т.п.). Даже более того, думаю, что сталкивались все. Так вот, если говорить о раскладах в пасьянсах (читайте: изначальных расстановках), то там они существуют (закреплены) под номерами. Теперь само задание...
Используя ту же игру пятнашки, сделайте что-то наподобие первоначальных, заранее определенных под номерами раскладов (расстановок кнопок). Как вы понимаете, таких вариантов может быть масса (количество посчитайте сами), как и вариантов алгоритмов закрепления номеров раскладов за определенными комбинациями. Тут на ваш вкус и цвет.
Но, в общем, вам нужно будет сделать функцию, которая по вызову определенного номера первоначальной расстановки ее рассчитывает.
Дополнительное задание: сохраните 5-10 вариантов первоначальных расстановок во внешний текстовый файл (либо создайте XML, кто уже знаком с этим форматом хранения данных). Создайте интерфейс, который будет позволять выбирать первоначальные расстановки, но они должны читаться из внешнего файла. Это нам потом очень пригодится.
Задание №4. Легкое
Это будет первая программа-игра, в рамках которой вы сможете соревноваться с компьютером. Но пока мы не будем предусматривать никакого искусственного интеллекта, а за основу возьмем все тот же случайный режим, т.е. random. Игра называется крестики-нолики и знакома всем с детства. То есть, у вас имеется поле 3х3, реализовать которое вы можете несколькими способами. По нажатию на одну из клеток появляется крестик, после чего компьютер в случайном режиме выбирает поле и ставит там нолик. Побеждает тот, у кого три одинаковых знака собраны по горизонтали, вертикали или диагонали.
Как бонус, вы должны предусмотреть выбор первого хода (компьютер/человек) и знака (крестик, нолик). В одном из следующих выпусков мы усложним данное задание.
В завершение
Конечно, многих интересовали бы готовые листинги, подробные теоретические и практические описания, но, как не сложно догадаться, место в газете не резиновое. Посему для пополнения знаний используйте любые доступные ресурсы, как я уже говорил, это книга Гурского по ActionScript 2.0, курсы на Intuit.ru и множество сайтов.
Переходить к теории пока не спешим и с другой точки зрения: потом три наши небольшие программки (калькулятор, пятнашки и крестики-нолики) мы объединим в рамках одного интерфейса, разместим его в web. Вот такие наполеоновские планы.
Кристофер,
christopher@tut.by
Горячие темы