Разработка модели анализа и объектно-ориентированного компонента для игры Terrarium 2.0
Обновлено
3
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
УХТИНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра ИСТ
Курсовой проект
Дисциплина: «Информационные технологии»
Тема:
«Разработка модели анализа и объектно-ориентированного компонента для игры Terrarium 2.0»
Выполнил
студент группы ИСТ-2-04
Зверев Ю.В.
Проверил
доцент кафедры ИСТ, д. т. н.
Истомин М.А.
Ухта 2008
Содержание
Введение
Постановка задачи
Задание на курсовой проект
Описание игры Terrarium
Событийная модель игры Terrarium 2.0
Разработка модели поведения животного
Описание поведения животного
Сбор и анализ статистики животного
Заключение
Список литературы
Приложение
- Листинг
- Введение
- В рамках данного курсового проекта ставится задача разработки модели анализа и разработки объектно-ориентированного компонента для игры Terrarium2.0. В соответствии с заданием разработанный компонент должен моделировать поведение травоядного животного. При этом основным моментом является возможность собираться в стада с выделением вожака на основе опыта.
- Основной целью данного курсового проекта является разработка объектно-ориентированной модели животного, которая объясняется построением модели игры Terrarium. Она построена на базе концепций объектно-ориентированного программирования.
- Разработка данной модели подразумевает детальную проработку структуры классов и связей между ними. При этом предполагается использование так называемых шаблонов проектирования, которые наиболее полно отображают структуру разрабатываемой модели, а также обеспечивают распределение обязанностей между объектами.
- Разработка компонента, моделирующего поведение животного, производится с использованием технологии .NET, функционирующей на базе платформы Microsoft .NET Framework версии 2.1, посредством среды разработки Microsoft Visual Studio 2008 с использованием языка программирования C#.
- Тестирование разработанной модели поведения животного выполняется в системе Microsoft Terrarium версии 2.0, так как именно эта версия системы предназначена для тестирования компонентов, разработанных с использованием технологии .NET, функционирующей на базе платформы Microsoft .NET Framework версии 2.1.
3. Марков С.М., Шалыто А.А.Система управления травоядным существом для игры «Terrarium».С.П.,2003: Санкт-Петербургский государственный институт точной механики и оптики, кафедра «Компьютерные технологии».
4. Нейгель, Кристиан, Ивьен, Билл, Глин, Джей, и др. C# для профессионалов. - М.: Издательский дом «Вильямс», 2006 - 1376 с.
5. Ларман, Крег. Применение UML и шаблонов проектирования. 2-е издание. - М.: Издательский дом «Вильямс», 2004. - 624 с.
ПриложениеЛистингusing System;using System.Collections;using System.Drawing;using System.IO;using OrganismBase;[assembly: OrganismClass("Exercise1.MyAnimal")][assembly: AuthorInformation("Юра", "YuG.Ermolaev@vorkuta.ru")]namespace Exercise1{[Carnivore(false)] [MatureSize(28)] [AnimalSkin(AnimalSkinFamily.Beetle)] [MarkingColor(KnownColor.Yellow)] [MaximumEnergyPoints(14)] // Максимальное количество энергии [EatingSpeedPointsAttribute(0)] // Скорость еды [AttackDamagePointsAttribute(0)] // Ущерб,наносимый противнику при атаке[DefendDamagePointsAttribute(0)] // Эффективность защиты [MaximumSpeedPointsAttribute(18)] // Максимальная скорость [CamouflagePointsAttribute(18)] // Умение прятаться [EyesightPointsAttribute(50)] // Дальнозоркость // CLASSpublic class MyAnimal : Animal{ private PlantState targetPlant = null; // Растение// private AnimalState targetAnimal = null; // ЖивотноеAnimalState attackerAnimal = null; // Кто атакуетconst int cruisingSpeed = 5; // Скорость нормального ходаconst int fleeingSpeed = 40; // Скорость при бегеprotected override void Initialize(){Idle += new IdleEventHandler(IdleEvent);// Load += MyAnimal_Load;Attacked += new AttackedEventHandler(AttackedEvent); MoveCompleted += new Move Completed Event Handler(Move Completed Event);}// // Загрузка организма// private void MyAnimal_Load(object sender, LoadEventArgs e)// {// }void IdleEvent(object sender, IdleEventArgs e){ try{ MyWriteTrace();if (CanReproduce){ WriteTrace("Я размножаюсь");BeginReproduction(null); }// Если мы можем есть и имеем еду, то мы едим if (CanEat){ WriteTrace("Я голодный.");if (!IsEating){ WriteTrace("Нет еды: Ищем еду?");if (targetPlant != null) { WriteTrace("Да, я вижу еду.");if (WithinEatingRange(targetPlant)){ WriteTrace("Имеем еду, старт поедания.");BeginEating(targetPlant);if (IsMoving){ WriteTrace("Остановимся, пока едим.");StopMoving(); } }else{ if (!IsMoving){ WriteTrace("Перемещаемся к еде");BeginMoving(new MovementVector(targetPlant.Position, cruisingSpeed));} }}else{WriteTrace("Не могу найти растение.");if ((!ScanForTargetPlant())&&(!TraceScan()))if (!IsMoving){if (!TraceScan()){int RandomX = OrganismRandom.Next(0, WorldWidth - 1);int RandomY = OrganismRandom.Next(0, WorldHeight - 1);BeginMoving(new MovementVector(new Point(RandomX, RandomY), cruisingSpeed));}}else{WriteTrace("Перемещаемся и смотрим...");}}}else{WriteTrace("О! Еда.");if (IsMoving){ WriteTrace("Остановимся пока кушаем.");StopMoving();}}}else{ WriteTrace("Воот: ничего не делаем.");if ((IsMoving)&&(!TraceScan()))StopMoving();TraceScan();}}catch (Exception exc){ WriteTrace(exc.ToString());}// if (!IsMoving)// {// Int32 RandomX = OrganismRandom.Next(0, WorldWidth - 1);// Int32 RandomY = OrganismRandom.Next(0, WorldHeight - 1);// BeginMoving(new MovementVector(new Point(RandomX, RandomY), 4));// }// else// {// };}void MyWriteTrace(){ WriteTrace("Мой возраст = ", State.TickAge, " хода."); }private bool ScanForTargetPlant(){ try{ ArrayList foundCreatures = Scan();// TraceScan(); if (foundCreatures.Count > 0){ // Всегда двигаемся подле самого близкого растения или ремовим его foreach (OrganismState organismState in foundCreatures){ if (organismState is PlantState){ targetPlant = (PlantState)organismState;BeginMoving(new MovementVector(organismState.Position, cruisingSpeed));return true;}}}}catch (Exception exc){ WriteTrace(exc.ToString());}return false;}// Вызывается, когда существо было атакованоvoid AttackedEvent(object sender, AttackedEventArgs e){if (e.Attacker.IsAlive){ Vector newVector = Vector.Subtract(attackerAnimal.Position,Position);Vector newPositionVector = newVector.Scale(10);Point newPosition = Vector.Add(Position, newPositionVector);BeginMoving(new MovementVector(newPosition, fleeingSpeed));}}// Запускается, когда закончили двигаться.private void MoveCompletedEvent(object sender, MoveCompletedEventArgs e){ TraceScan();}private bool TraceScan(){ WriteTrace("СКАНИРУЮ():");ArrayList OrgArr = Scan();Int32 ii=0;Int32 Tick = State.TickAge;for (Int32 I = 0; I < OrgArr.Count; I++){ OrganismState Org = OrgArr[I] as OrganismState;String S;if (Org is PlantState)S = "Растение ";else{if ((Org as AnimalState).AnimalSpecies.IsCarnivore)S = "Хищник ";else{ WriteTrace("Смотрю кто старше");if (((Org as AnimalState).TickAge > Tick) && (Org.Species.IsSameSpecies(this.Species))){ ii = I;Tick = (Org as AnimalState).TickAge;}S = "Травоядный ";}}WriteTrace(S);}if (Tick > State.TickAge){ WriteTrace("Вижу вожака на основе опыта. Иду следом");OrganismState Org = OrgArr[ii] as OrganismState;BeginMoving(new MovementVector((Org as AnimalState).Position, cruisingSpeed));return true;}else{ return false;}}public override void SerializeAnimal(MemoryStream m){}public override void DeserializeAnimal(MemoryStream m){}}}