Руководство по actionscript. часть 7, стр. 029

Листинг П.2. Класс VirtualPet

package zoo { import flash. utils.*; import flash. events.*;

// Класс VirtualPet представляет животное в зоопарке. Он расширяет класс // EventDispatcher. благодаря чему может являться получателем // события в процессе диспетчеризации, public class VirtualPet extends EventDispatcher { // ==СТАТИЧЕСКИЕ КОНСТАНТЫ==

// Типы событий, относящиеся к классу VirtualPet (обрабатываемые // объектом VirtualPetView. который отображает животное на экране) public static const NAME_CHANGE:String = «NAME_CHANGE»; public static const STATE_CHANGE;String = «STATE_CHANGE»;

// Состояния, представляющие текущее физическое состояние животного public static const PETSTATE_FULL:int = 0; public static const PETSTATE_HUNGRY:int = 1; public static const PETSTATE_STARVING:int = 2; public static const PETSTATE_DEAD:int = 3;

// ==СТАТИЧЕСКИЕ ПЕРЕМЕННЫЕ==

// Максимальная длина имени животного

private static var maxNameLength:int = 20;

// Максимальное количество калорий, которое может иметь животное

private static var maxCalories:int = 2000;

// Скорость, с которой животное переваривает пищу

private static var caloriesPerSecond:int = 100;

// Имя для животного, используемое по умолчанию

private static var defaultName:String = «Unnamed Pet»;

// ==ПЕРЕМЕННЫЕ ЭКЗЕМПЛЯРА ==

// Имя животного

private var petName:String;

// Текущее количество калорий в «желудке» животного, private var currentCalories:int: // Текущее физическое состояние животного private var petState:int;

// Таймер для вызова метода digest( ) на регулярной основе private var digestTimer:Timer;

// Конструктор

public function VirtualPet (name:String):void { // Присваиваем имя этому животному setName(name);

// Даем этому животному половину от максимально возможного количества // калорий (полупустой «желудок»). setCalori es(Vi rtualPet. maxCalori es/2);

}

// Начинает жизненный цикл животного public function start ( ):void {

// Вызываем метод digestTimerl_istener( ) один раз в секунду

digestTimer = new TimerdOOO. 0);

digestTimer. addEventListener(TimerEvent. TIMER. digestTimerListener); digestTimer. start( );

}

// Останавливает жизненный цикл животного public function stop ( ):void { if (digestTimer!= null) { digestTimer. stop( );

}

}

// Присваивает имя животному и уведомляет приемники об изменении public function setName (newName:String):void { // Генерируем исключение, если новое имя не является допустимым if (newName. indexOfC «) == 0) {

throw new VirtualPetNameException( ); } else if (newName == «») {

throw new VirtualPetInsufficientDataException( ); } else if (newName. length > VirtualPet. maxNameLength) { throw new VirtualPetExcessDataException( );

}

// Присваиваем новое имя petName = newName;

// Уведомляем приемники об изменении имени

di spatchEvent(new Event(Vi rtua1 Pet. NAME_CHANGE));

}

// Возвращает имя животного public function getName ( ):String { // Если животному не было присвоено допустимое имя… if (petName == null) { // …возвращаем имя. используемое по умолчанию return Virtual Pet. defaultName; } else {

// …в противном случае возвращаем имя животного return petName;

}

}

// Добавляет некоторое количество калорий в желудок животного. // используя объект Food public function eat (foodltem:Food):void { // Если животное умерло, ничего не делаем if (petState == Virtual Pet. PETSTATE_DEAD) { trace(getName( ) + » is dead. You can’t feed it.»); return;

}

// Если пищей является яблоко, проверяем его на наличие червей. // Если яблоко червивое, не будем его есть, if (foodltem is Apple) { if (Apple(foodltem).hasWorm( )) { traceCThe » + foodltem. getName( ) + » had a worm. » + getName( )

+ » didn’t eat it.»); return;

}

}

// Отображаем отладочное сообщение с информацией об употребленной пище trace(getName( ) + » ate the » + foodItern. getName( )

+ » (» + foodItem. getCalories( ) + » calories).»); // Добавляем калории из пищи в «желудок» животного setCalori es(getCalori es( ) + foodItem. getCalories( ));

}

// Присваивает животному новое количество калорий и при необходимости // изменяет его состояние

private function setCalories (newCurrentCalories:int):void { // При необходимости корректирует значение newCurrentCalories // в соответствии с допустимым диапазоном if (newCurrentCalories > VirtualPet. maxCalories) {

currentCalories = VirtualPet. maxCalories; } else if (newCurrentCalories < 0) {

currentCalories = 0; } else {

currentCalories = newCurrentCalories;

}

// Определяем количество калорий в желудке животного, в процентах

// от максимально допустимого количества калорий

var caloriePercentage:int = Math. floor(getHunger( )*100);

// Отображаем отладочное сообщение, информирующее о текущем количестве // калорий у животного

trace(getName( ) + » has » + currentCalories + » calories»

+ » (» + caloriePercentage + «% of its food) remaining.»):

// При необходимости устанавливаем состояние животного в зависимости // от изменения в количестве калорий if (caloriePercentage == 0) { // У животного не осталось пищи. Поэтому, если оно еще не умерло… if CgetPetStateC ) != Virtual Pet. PETSTATE_DEAD) { // …деактивируем его die( ); } •

} else if (caloriePercentage < 20) { // животному срочно требуется пища. устанавливаем его состояние // в «ужасно голодный».

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Оставить комментарий

Вы должны авторизоваться для отправки комментария.

Полезные ссылки
Случайные записи
  • 10.03.2011">Руководство по actionscript. часть 4, стр. 034
  • 19.08.2010">Веб-дизайн и реклама
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.132
  • 27.02.2011">Руководство по actionscript. часть 6, стр. 023
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.27
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.32
  • 09.10.2010">Разница между растровым и векторным изображением
  • 02.03.2011">Руководство по actionscript. часть 5, стр. 099
  • 23.02.2012">Pirate Bay обещает уйти в подполье
  • 07.10.2010">Выделение изображения с помощью маски в Photoshop
  • 09.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.148
  • 05.03.2010">Галереи креативных логотипов
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.77
  • 23.02.2011">Руководство по actionscript. часть 7, стр. 035
  • 17.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.4
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...