Сегодня: Среда, 24.04.2024, 09:08 (МСК)| Здравствуйте, Гость| Мой профиль | Регистрация | Вход | RSS

Военные технологии на пользовательском рынке

Визуальная среда Flowstone

Устройства с беспроводным питанием

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

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

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

30.07.2010
Мо-ло-дцы, что еще сказать! Присылать по почте ваши готовые работы, естественно, можно, что сделало уже несколько человек без особого спроса. Мало того, если вы что-либо делаете во флэше/флексе и хотите, чтобы об этом было рассказано широкой аудитории — присылайте свои работы или ссылки на них. А Возможно, если работ получится много, будем формировать списки с ссылками в рамках данной «территории». А некоторые программы разбирать отдельно. 


Калькулятор, калькулятор…


Восемь калькуляторов прислали после выхода прошлой части, что можно считать неким успехом данной серии. Грубых ошибок практически ни у кого нет, да и как можно заблудиться в трех соснах? Хотя, естественно, попался один калькулятор, в котором знак минуса перед числом добавляется нормально, а убирается плохо, с цифрой:), так же, например, Алексей из Минска поспешил и не перевел тригонометрические функции из радиан в градусы (во Flash они считают в радианах). В  пяти калькуляторах из присланных не предусмотрено логики при описанной мною в прошлом выпуске ситуации двойного нажатия кнопки математической операции (+,-,*,/), либо сначала «умножить», а потом «разделить» и т.п. Тут можно придумать различные варианты, например, (1) ввести четыре логических указателя, (2) ввести переменную с пятью значениями от 0 до 4 (0 — ни одна операция не вызвана, 1-4 — операции). То есть, совершенствоваться есть куда. 
Что еще сказать? Когда я погрузился в чтение кодов, то большинство из них нашел хорошо прокомментированными, некоторые даже излишне, например:

А=B*C; // Умножаю В на С, получаю А

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


Пятнашки


В прошлом выпуске я попросил вас сделать игру пятнашки, используя кнопки собственного изготовления. Вариантов реализации данной игры несколько, например, вы можете использовать в качестве «подкладки» под кнопки (1) одну большую панель, (2) шестнадцать панелей либо (3) вообще ничего не использовать, привязываясь только к координатам. 
Соответственно, клетки «подкладки» — это один массив (одномерный и двумерный), хотя опять же не исключен вариант с заданием переменной, способной принимать 16 значений. Но с массивами в данном случае работать гораздо удобнее, поскольку возможна более гибкая функциональная автоматизация при работе с ними и при их анализе, это же касается и «привязывания» логики, например, клетка свободна или нет. В остальном, все достаточно просто. 
Поскольку времени с последнего задания прошло не много, то на мой почтовый ящик «свалились» только одни пятнашки от Михаила Николаева. Все очень хорошо сделано в плане программирования, и Михаил даже пошел дальше, а именно, ввел случайную сортировку для первоначальной расстановки кнопок. Вот тут-то мы и остановимся. 


Плавный переход к следующему заданию


Михаил реализовал случайную сортировку достаточно громоздким способом (имеется в виду внешний вид кода), написав множество строк 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. В нашем варианте (пятнашки) это очень удобно с точки зрения того, что ноль будет обозначать пустую клетку. 


Следующее задание — другая реализация режима первоначальных расстановок в пятнашках


А теперь перейдем непосредственно к следующему заданию. Наверняка многие из вас сталкивались с играми, имеющимися в стандартном комплекте Windows (пасьянсы, сапер и т.п.). Даже более того, думаю, что сталкивались все. Так вот, если говорить о раскладах в пасьянсах, читайте, изначальных расстановках, то там они существуют (закреплены) под номерами. Теперь само задание…
Используя ту же игру пятнашки, сделайте что-то наподобие первоначальных заранее определенных под номерами раскладов (расстановок кнопок). Как вы понимаете, таких вариантов может быть масса (количество посчитайте сами), как и вариантов алгоритмов закрепления номеров раскладов за определенными комбинациями. Тут на ваш вкус и цвет. 
Но, в общем, вам нужно будет сделать функцию, которая по вызову определенного номера первоначальной расстановки ее рассчитывает.
Дополнительное задание: сохраните 5-10 вариантов первоначальных расстановок во внешний текстовый файл (либо создайте XML, кто уже знаком с этим форматом хранения данных). Создайте интерфейс, который будет позволять выбирать первоначальные расстановки, но они должны читаться из внешнего файла. Это нам потом очень пригодится.


Задание на сообразительность 


Эта будет первая программа-игра, в рамках которой вы сможете соревноваться с компьютером. Но пока мы не будем предусматривать никакого искусственного интеллекта, а за основу возьмем все тот же случайный режим, т.е. random. Игра называется крестики-нолики и знакома всем с детства. То есть, у вас имеется поле 3х3, реализовать которое вы можете несколькими способами. По нажатию на одну из клеток появляется крестик, после чего компьютер в случайном режиме выбирает поле и ставит там нолик. Побеждает тот, у кого три одинаковых знака собраны по горизонтали, вертикали или диагонали. 
Как бонус вы должны предусмотреть выбор первого хода (компьютер/человек) и знака (крестик, нолик). 


В завершение

Конечно, многих бы интересовали готовые листинги, подробные теоретические и практические описания, но, как не сложно догадаться, место в газете (а данную серию я писал для газеты "Компьютерные Вести") не резиновое. Посему для пополнения знаний используйте любые доступные ресурсы, как я уже говорил, это книга Гурского по ActionScript 2.0, курсы на Intuit.ru и множество сайтов. 
И напоследок, дадим основное ключевое задание: написав три приложения (калькулятор, пятнашки и крестики нолики), сделайте единый swf-файл, в который они будут загружаться.

Ликбез закончен, если вы это выполните, то вам под силу и серьезные проекты. 

Желаю успехов!

Кристофер

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






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

Разделы

Опросы

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

Друзья

3D-кино






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








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