Разработка компьютерных игр
Компания "Awesomatic games" и ее разработка компьютерных игр с 2007 года. Игровой дизайнер, профессиональный художник и программисты, которые создают клиентскую и серверную составляющую проекта. Проработка архитектуры игры. Описание логической структуры.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | практическая работа |
Язык | русский |
Дата добавления | 07.09.2016 |
Размер файла | 473,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Разработка компьютерных игр
Введение
Автоматизация c каждым днём приобретает всё большую роль в производственной деятельности и жизни человеческого общества, в удовлетворении его растущих потребностей. В последние годы в связи с заметным уменьшением природных ресурсов, тревожными глобальными изменениями климата и ростом численности населения Земли роль автоматизации всё больше усиливается, а сферы её применения непрерывно расширяются. Сегодня практически не существует технических процессов, которые обходятся без автоматики - начиная от простых систем, используемых в быту, и кончая сложнейшими промышленными процессами производства. Многие технические устройства, без которых сегодня невозможно представить себе комфортную и безопасную повседневную жизнь, стали таковыми только благодаря используемой в них автоматике. Автоматизация является ведущей дисциплиной при разработке, оптимизации и применении новых промышленных продуктов, методов и технологий. Новые продукты и технологии базируются на возможностях, которые прежде без автоматики были вообще не реализуемы. Автоматизация благоприятствует более лёгкой модернизации и улучшению качества новых продуктов и технологий и тем самым приспосабливать их к новым потребностям. Автоматизация изначально является связующей платформой между разработчиками, продуцентами и пользователями приборов и систем автоматики, в том числе в таких отраслях, как энергетика, машиностроение, химическая технология, вычислительная техника, информатика, коммуникационная техника, жилищно-коммунальное хозяйство. С учетом всего выше сказанного можно сделать вывод, что невозможно реализовать проект онлайн игры без автоматизированных систем просто невозможно. Поэтому, для реализации подобного проекта необходимо овладеть навыками управления автоматизированных систем разработки игр.
Организационная структура предприятия
Компания "Awesomatic games" занимается разработкой компьютерных игр с 2007 года. Первым самым успешным проектом компании была игра "Klanz", которая успешно существует и по сей день. К концу 2007 года, к началу 2008 над проектом работало 5 человек. Игровой дизайнер, профессиональный художник и программисты, которые собственно реализовывали клиентскую и серверную составляющую проекта. Данный проект был достаточно успешным и находился на высоких местах рейтинга вплоть до 2012 года. В 2012 году, компания начинает разрабатывать новый проект под названием "Skyburg". Над данным проектом начинало работать 3 человека. Игровой дизайнер и два разработчика. Реализация проекта проходит достаточно успешно и в настоящий момент над проектом работает 5 человек. К ним добавился художник и человек, отвечающий за рекламу. Сейчас проект находится на этапе "beta" тестирования и с скором времени будет запущен в полную эксплуатацию. К проектам компании предъявляются повышенные требования по безопасности, отказоустойчивости и быстродействию. Для выполнения этих требований "Awesomatic games" выстроили свои внутренние процессы на основе гибких методологий и передовых инженерных практик, что позволяет контролировать качество, сроки реализации, а также оперативно реагировать на меняющиеся требования.
Уровень автоматизации технологических процессов
На мой взгляд, уровень автоматизации технологических процессов достаточно высок. Это связано с тем, что компания "Awesomatic games" постоянно внедряет новые технологии в свои проекты, что позволяет увеличить быстродействие и качество их продукции. Данная компания использует программные средства:
- Для разработки клиентской части игры используется игровой движок Unity 3d, редакторы кода MonoDevelop и Visual Studio Express.
– "Серверная" часть сформирована на базе Ruby on rails. А также с использованием кросс платформенной технологии "Photon Cloud". А в проекте "Skyburg" используется собственный сервер, основанный на технологии "EventMachine", который написан программистами компании "Awesomatic games". А также редактор кода SublimeText3.
Постановка задачи
Задача, которую предстояло мне выполнить - это реализация отдельных частей клиентской части игры "Robot's craft" и помощь в проработке игрового дизайна и архитектуры игры. А также необходимо было освоить основные компоненты игрового движка Unity 3d и изучить написание скриптов на языке C#.
Назначение разработки
Разрабатываемые компоненты клиентской части игры "Robot's craft", предназначены для реализации и исполнения части игрового процесса. Который происходит в реальное время, а также напрямую взаимодействует с пользователем.
Требования к программе
Компоненты, которые должны быть реализованы в клиентской части проекта должны быть надежными и не давать возможности пользователю внести изменение в игровой процесс. А также решены методами, которые затрачивают наименьший ресурс компьютера.
Стадии и этапы разработки
1). Проработка игрового дизайна (совместно с другими членами группы).
1.1) Написание дизайн документа по проекту.
2). Проработка архитектуры игры (совместно с другими членами группы).
2.1) Написание документа структуры игры.
3). Расстановка приоритетов разработки игрового процесса (совместно с другими членами группы).
4). Изучение компонентов среды разработки Unity 3D.
4.1) Изучение интерфейса графического движка Unity 3D.
4.2) Работа с графическими моделями объектов.
4.3) Написание скриптов на языке C#.
4.4) Работа с графическим интерфейсом с использованием расширения NGUI графического движка Unity 3D.
5). Тестирование
Описание логической структуры.
Используемые технические средства
Для работы клиентской части программы необходим компьютер с тактовой частотой более 2 гигагерц и объемом ОЗУ более 2056 мегабайт. Так же необходимо чтобы на компьютере была операционная система Windows XP или выше. компьютерный игра программист
Описание средств разработки
При реализации поставленной задачи были освоены компоненты графического движка Unity 3d.
1) Интерфейс графического движка Unity 3D, необходимого для управления средой разработки. Пример приведен в приложении В на рисунке 1.
2) Работа с графическими моделями объектов
3) Графический интерфейс GUI (Graphical User Interface) с использованием расширения NGUI графического движка Unity 3D.
А также при решении поставленной задачи изучено написание скриптов на языке C# и редактор кода Monodevelop.
Разработка приложения
За все время решения поставленной задачи, я принял участие реализации таких компонентов как:
– Создание персонажа, его характеристик и 2 оружий.
– Создание "дроида", с простым искусственным интеллектом.
– Создание и генерация локации (игрового мира).
– Создание пользовательского интерфейса.
А также я принял участие в написании скриптов для управления персонажем, дроидом, пользовательским интерфейсом, а также скрипта генерации локации. Образец кода приведен в приложении А.
Описание программы
Для демонстрации реализованных компонентов необходимо запустить скомпилированный build проекта с расширением с именем файла "Robot's craft.exe". После этого на стартовом меню необходимо нажать кнопку "Start". Далее используя клавиши клавиатуры "w,a,s,d, space, lshift" и вращение осей мыши "ox и oy", а также левую кнопку мыши - можно оценить игровой процесс проекта в режиме "real time".
Описание и применение
В целом проект, который будет включать в себя реализованные компоненты должен будет служить в развлекательных целях, а также для развития таких способностей у пользователей как: реакция, логически мыслить, быстро принимать решения, коммуникативные способности (через общение с другими пользователями) и др. Данный проект можно применять или использовать как дома, так и в другом удобном для пользователя месте и в его свободное время.
Заключение
За время прохождения производственной практики мы познакомились со структурой предприятия, изучили компоненты среды разработки Unity 3D, научились писать скрипты на языке программирования C#. Таким образом, используя полученные навыки мы выполнили задание по производственной практике. Задание выполнено в таком том объеме, в котором было предоставлено руководителем.
Приложение А.
Описание класса FreeMovementMotor для дроида.
using UnityEngine;
using System.Collections;
public class FreeMovementMotor : MovementMotor {
//public var movement : MoveController;
public float walkingSpeed = 5.0f;
public float walkingSnappyness = 50f;
public float turningSmoothing = 0.3f;
void FixedUpdate () {
// Handle the movement of the character
Vector3 targetVelocity = movementDirection * walkingSpeed;
Vector3 deltaVelocity = targetVelocity - rigidbody.velocity;
if (rigidbody.useGravity)
deltaVelocity.y = 0;
rigidbody.AddForce (deltaVelocity * walkingSnappyness, ForceMode.Acceleration);
// Setup player to face facingDirection, or if that is zero, then the movementDirection
Vector3 faceDir = facingDirection;
if (faceDir == Vector3.zero)
faceDir = movementDirection;
// Make the character rotate towards the target rotation
if (faceDir == Vector3.zero) {
rigidbody.angularVelocity = Vector3.zero;
}
else {
float rotationAngle = AngleAroundAxis (transform.forward,
faceDir, Vector3.up);
rigidbody.angularVelocity = (Vector3.up * rotationAngle * turningSmoothing);
}
}
// The angle between dirA and dirB around axis
static float AngleAroundAxis (Vector3 dirA, Vector3 dirB, Vector3 axis) {
// Project A and B onto the plane orthogonal target axis
dirA = dirA - Vector3.Project (dirA, axis);
dirB = dirB - Vector3.Project (dirB, axis);
// Find (positive) angle between A and B
float angle = Vector3.Angle (dirA, dirB);
// Return angle multiplied with 1 or -1
return angle * (Vector3.Dot (axis, Vector3.Cross (dirA, dirB)) < 0 ? -1 : 1);
}
}
Описание класса AI дроида.
using UnityEngine;
using System.Collections;
public class FreeMovementMotor : MovementMotor {
//public var movement : MoveController;
public float walkingSpeed = 5.0f;
public float walkingSnappyness = 50f;
public float turningSmoothing = 0.3f;
void FixedUpdate () {
// Handle the movement of the character
Vector3 targetVelocity = movementDirection * walkingSpeed;
Vector3 deltaVelocity = targetVelocity - rigidbody.velocity;
if (rigidbody.useGravity)
deltaVelocity.y = 0;
rigidbody.AddForce (deltaVelocity * walkingSnappyness, ForceMode.Acceleration);
// Setup player to face facingDirection, or if that is zero, then the movementDirection
Vector3 faceDir = facingDirection;
if (faceDir == Vector3.zero)
faceDir = movementDirection;
// Make the character rotate towards the target rotation
if (faceDir == Vector3.zero) {
rigidbody.angularVelocity = Vector3.zero;
}
else {
float rotationAngle = AngleAroundAxis (transform.forward, faceDir, Vector3.up);
rigidbody.angularVelocity = (Vector3.up * rotationAngle * turningSmoothing);
}
}
// The angle between dirA and dirB around axis
static float AngleAroundAxis (Vector3 dirA, Vector3 dirB, Vector3 axis) {
// Project A and B onto the plane orthogonal target axis
dirA = dirA - Vector3.Project (dirA, axis);
dirB = dirB - Vector3.Project (dirB, axis);
// Find (positive) angle between A and B
float angle = Vector3.Angle (dirA, dirB);
// Return angle multiplied with 1 or -1
return angle * (Vector3.Dot (axis, Vector3.Cross (dirA, dirB)) < 0 ? -1 : 1);
}
}
Описание класса DestroyFlinders
using UnityEngine;
using System.Collections;
public class DestroyFlinders : MonoBehaviour {
// Use this for initialization
void Start() {
StartCoroutine(DestroyFlind());
}
IEnumerator DestroyFlind()
{
yield return new WaitForSeconds(0.3f);
Destroy(gameObject);
}
}
Описание класса WorldGeneration
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class WorldGeneration : MonoBehaviour //Гнёзда для спавна боксов и прочего
{
public GameObject boxSocketPrefab;
public GameObject[,,] spawnPoints;
public int width=32,heigth=8,length=32;
Dictionary<string, GameObject> cubes = new Dictionary<string, GameObject>();
// Use this for initialization
void InitCubes(){
//foreach(KeyValuePair<string, GameObject> kv in cubes)
// kv.Value = (GameObject)Resources.Load(kv.Key);
}
void Start ()
{
cubes["CubePrefab"] = (GameObject)Resources.Load("CubePrefab");
cubes["Cube2Prefab"] = (GameObject)Resources.Load("Cube2Prefab");
cubes["MotherBoard"] = (GameObject)Resources.Load("MotherBoard");
var android = Resources.Load("Android") as GameObject;
CreateSpawnPoints ();
CreateWorldObjects(400,cubes["CubePrefab"]);
CreateWorldObjects(100, cubes["Cube2Prefab"]);
SpawnLootObjects(50, cubes["MotherBoard"], new Loot() { id = 1, amount = 10 });
3
CreateWorldObjects(1, (GameObject)Resources.Load("PlayerPrefab"));
CreateWorldObjects(2, android);
}
void SetObjectsForSpawn (SpawnPoint sb,int i, int j, int k)
{
if(i==1 && j==1 && k==1)
{
Instantiate((GameObject)Resources.Load("PlayerPrefab"));
return;
}
if(Random.value < (1.0f/heigth/(k+1))*0.7)
{
sb.ObjectForSpawn = cubes["CubePrefab"];
sb.Spawn();
}else if(Random.value < (1.0f/heigth/(k+1))*0.1)
{
sb.ObjectForSpawn = cubes["MotherBoard"];
sb.Spawn();
}
}
void CreateWorldObjects(int Count, GameObject type)
{
while(Count>0)
{
var tmp = spawnPoints[Random.Range(0,width-1),
Random.Range(0,length-1),
Random.Range(0,heigth-1)];
var sp = tmp.GetComponent<SpawnPoint>();
if(sp.isFree())
{
3
sp.ObjectForSpawn = type;
sp.Spawn();
}
Count--;
}
}
void SpawnLootObjects(int Count, GameObject type, Loot loot)
{
while (Count > 0)
{
var tmp = spawnPoints[Random.Range(0, width - 1),
Random.Range(0, length - 1),
Random.Range(0, heigth - 1)];
var sp = tmp.GetComponent<SpawnPoint>();
if (sp.isFree())
{
sp.ObjectForSpawn = type;
sp.Spawn(loot);
}
Count--;
}
}
void CreateSpawnPoints ()
{
spawnPoints = new GameObject [width,length,heigth];
for(int i=0;i<width;i++)
for(int j=0;j<length;j++)
for(int k=0;k<heigth;k++)
{
spawnPoints[i,j,k]= Instantiate(boxSocketPrefab,new Vector3(i+.5f,k+.5f,j+.5f),
this.transform.rotation) as GameObject;
SpawnPoint sb = spawnPoints[i,j,k].GetComponent<SpawnPoint>();
if(sb!=null)
{
sb.j=j;
sb.i=i;
sb.k=k;
}
}
}
}
Приложение Б.
Дизайн документ проекта
"Robot's craft"
Общая структура игры
Персонаж:
? Камера от 1го/3го лица
? Робот похож на Android
? Анимации
? Оружие (1 ближнего, 1 дальнего - рейлган)
? Характеристики
_ Скорость
_ Высота прыжка
_ Грузоподъёмность
_ Вес
_ Урон
_ Опыт
Геймплей:
? Спавн игроков
? Оружие (рейлган) - пинает игрока / дамаг по ящикам
? AI -башни - мобы (низкий приоритет)
? Процесс сбора ресурсов. Виды кубов. Генерация ресуров
? Таймер на врата. Зелёная зона около гейта. или рандомно появляющийся гейт
? Общий таймер
Интерфейсы (ГУИ):
? Главное меню (как в танках). в центре персонаж - по перефирии кнопки
_ Список комнат. Кнопка быстрого боя
_ Кнопка профиль. - вокруг игрока появляются его характеристики
_ Статистика
_ Возможно кастомизация
_ Опции (Качество/звук, разрешение экрана)
_ Достижения
? Игровой интерфейс
_ Главный таймер
_ Кол-во ресурсов (в инвентаре/в гейте)
_ Возможность сбрасывать ресурсы
_ Активное оружие. Прицел. Кол-во патронов. Индикатор перезарядки
_ Чат и события
_ Таблица рейтинга
_ Итоги игры (медальки 1,2,3 место)
Локация:
? Модель локации
20
_ Ресурсы с сервера
_ Пол текстурой
_ Всё таки скайбокс. с боков коллайдер
Структуры данных
Структура лута:
? name (str)
? amount (int)
? generation_interval (int)
? min_pack_size (int)
? max_pack_size (int)
? look_id (str)
Структура куба:
? name (str)
? health (int)
? generation_interval (int)
? look_id (str)
Архитектура игры
Приложение В.
Рисунок - 1.
Рисунок - 2.
Рисунок - 3.
Размещено на Allbest.ru
Подобные документы
Научно-технический прогресс как причина появления компьютера и компьютерных технологий. Компьютерные игры (характеристика видов и технология создания) и предпосылки для естественного развития личности. Анализ игровой программы на конкретном примере.
курсовая работа [65,8 K], добавлен 22.12.2010Разработка приложения на WinAPI с реализацией логической структуры в игре "Сапер". Реализация графической части приложения. Проверка на корректность поведения интерфейса программы, работы логической части игры, корректности записи и чтения файла.
курсовая работа [1,1 M], добавлен 17.10.2012Исследование спецификации логической игры "Сапёр". Системное и функциональное проектирование приложения. Разработка программных модулей. Обзор классов, необходимых для создания интерфейса данного приложения. Инструменты для реализации логической игры.
курсовая работа [1,2 M], добавлен 13.01.2016Знакомство с основными особенностями развития игровой индустрии. Создание компьютерных игр как одна из прикладных сфер программирования. Общая характеристика набора методов класса Area. Рассмотрение способов создания игры "Змейка", анализ этапов.
курсовая работа [799,4 K], добавлен 13.06.2013Рассмотрение основ разработки технического задания. Проектирования структуры программ; описание соответственного алгоритма. Собственно программирование. Тестирование и отладка компьютерных программ. Ознакомление с основными правилами защиты проекта.
реферат [157,4 K], добавлен 15.11.2014Разработка эскизного и технического проекта программы игры "Собери картинку". Назначение и область применения, основные технические характеристики. Разработка рабочего проекта, разработка и спецификация программы игры. Описание и тестирование программы.
курсовая работа [22,6 K], добавлен 10.06.2010Рассмотрение истории развития компьютерных систем. Изучение способов организации внутренней программно-аппаратной и логической структуры компьютерных систем и сетей. Структура системы; возможности и ограничения, взаимодействие и взаимосвязь элементов.
презентация [6,6 M], добавлен 06.04.2015Понятие и классификация цифровых образовательных ресурсов, особенности создания и использования в учебном процессе. Технологии защиты информации от компьютерных вирусов. Создание цифрового ресурса средствами Microsoft Office SharePoint Designer 2007.
курсовая работа [6,8 M], добавлен 25.06.2011История появления компьютерных игр, классификация их жанров. Негативные воздействия от компьютерных игр: компьютерное излучение, проблемы со зрением, сбои в работе нервной и сердечнососудистой системы, психологическая зависимость. Польза компьютерных игр.
научная работа [75,0 K], добавлен 18.02.2010Разработка технической демонстрационной версии трехмерной компьютерной ролевой игры "After Reset". Установка, запуск и минимальные требования программы. Анализ алгоритмов. Архитектура системы и иерархия классов. Тестирование программного обеспечения.
дипломная работа [3,4 M], добавлен 19.07.2014