Разработка игры "Воздушный бой" - Программирование, компьютеры и кибернетика курсовая работа

Разработка игры "Воздушный бой" - Программирование, компьютеры и кибернетика курсовая работа



































Описание предметной области. Контроль и методы доступа. Работа с графикой в С++ Builder. Программирование игры "Воздушный бой" с использованием основных принципов объектно-ориентированного программирования. Принципы работы конструкторов и деструкторов.


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Государственного образовательного бюджетного учреждения
высшего профессионального образования
«СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Факультет информационных технологий и экономики
Кафедра информатики и вычислительной техники
1.4 Работа с графикой в С++ Builder
Естественное стремление разработчиков программ - сократить время разработки, облегчить повторное использование отлаженных модулей и снизить издержки на сопровождение и модификацию программ.
Для достижения этих целей в отрасли создания программ комплексов используют методы и подходы управления процессом разработки. На разных этапах развития программной инженерии использовались различные технологии программирования - императивное программирование; модульное программирование; структурное программирование; программирование, управляемое данными; программирование, управляемое событиями; функциональное программирование; логическое программирование и т.п. Теперь невозможно принять участие в дискуссии, посвященной программированию, если не использовать термин «объектно-ориентированное программирование».
Объектно-ориентированное программирование -- это стиль кодирования, который позволяет разработчику группировать схожие задачи в классы. Таким образом, код соответствует принципу DRY (don't repeat yourself - не повторяй самого себя) и становится лёгким для сопровождения.
Цель данного курсового проекта написать игру, используя три принципа ООП.
Объектно-ориентированное программирование (ООП) основано на трех концепциях:
В центре ООП находится понятие объекта. Объект - это абстрактная модель, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные. Объект - это экземпляр класса. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией. Инкапсуляция - это ограничение доступа к данным и их объединение с методами, обрабатывающими эти данные. Доступ к отдельным частям класса регулируется с помощью специальных ключевых слов: public(открытая часть), private(закрытая часть) и protected(защищенная часть). Наличие инкапсуляции достаточно для объектности языка программирования, но для его объектной ориентированности требуется наличие наследования. Наследование - механизм получения нового класса их существующего. Производный класс (наследник) создается путем дополнения или изменения существующего класса (класса-родителя). Методы, расположенные в открытой части, формируют интерфейс класса и могут свободно вызываться клиентом через соответствующий объект класса.
Основные преимущества ООП заключаются в том, что существует возможность объектов с одинаковой спецификацией иметь различную реализацию - полиморфизм.
Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект -- это экземпляр класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.
Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса или копирования прототипа.
Прототип -- это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка.
Класс является абстрактным типом данных, определяемым пользователем, и представляет собой модель реального объекта в виде данных и функций для работы с ними.
Данные класса называются полями, а функция класса - методами. Поля и методы являются элементами класса. Синтаксис имеет следующий вид:
Спецификаторы private и public управляют видимостью элементов класса. Всего таких спецификаторов три:
Как уже говорилось выше, в современных объектно-ориентированных языках программирования каждый объект является значением, относящимся к определённому классу. Класс представляет собой объявленный программистом составной тип данных, имеющий в составе:
Параметры объекта (конечно, не все, а только необходимые в программе), задающие его состояние (свойства объекта предметной области). Иногда поля данных объекта называют свойствами объекта, из-за чего возможна путаница. Физически поля представляют собой значения (переменные, константы), объявленные как принадлежащие классу.
Процедуры и функции, связанные с классом. Они определяют действия, которые можно выполнять над объектом такого типа, и которые сам объект может выполнять. Классы могут наследоваться друг от друга. Класс-потомок получает все поля и методы класса-родителя, но может дополнять их собственными либо переопределять уже имеющиеся. Большинство языков программирования поддерживает только единичное наследование (класс может иметь только один класс-родитель), лишь в некоторых допускается множественное наследование -- порождение класса от двух или более классов-родителей. Множественное наследование создаёт целый ряд проблем, как логических, так и чисто реализационных, поэтому в полном объёме его поддержка не распространена. Вместо этого в 1990-е годы появилось и стало активно вводиться в объектно-ориентированные языки понятие интерфейса.
Интерфейс -- это класс без полей и без реализации, включающий только заголовки методов. Если некий класс наследует (или, как говорят, реализует) интерфейс, он должен реализовать все входящие в него методы. Использование интерфейсов предоставляет относительно дешёвую альтернативу множественному наследованию. Взаимодействие объектов в абсолютном большинстве случаев обеспечивается вызовом ими методов друг друга.
Поскольку методы класса могут быть как чисто внутренними, обеспечивающими логику функционирования объекта, так и внешними, с помощью которых взаимодействуют объекты, необходимо обеспечить скрытость первых при доступности извне вторых. Для этого в языки вводятся специальные синтаксические конструкции, явно задающие область видимости каждого члена класса. Традиционно это модификаторы public, protected и private, обозначающие, соответственно, открытые члены класса, члены класса, доступные только из классов-потомков и скрытые, доступные только внутри класса. Конкретная номенклатура модификаторов и их точный смысл различаются в разных языках.
Поля класса, в общем случае, не должны быть доступны извне, поскольку такой доступ позволил бы произвольным образом менять внутреннее состояние объектов. Поэтому поля обычно объявляются скрытыми (либо язык в принципе не позволяет обращаться к полям класса извне), а для доступа к находящимся в полях данным используются специальные методы, называемые методами доступа. Такие методы либо возвращают значение того или иного поля, либо производят запись в это поле нового значения. При записи метод доступа может проконтролировать допустимость записываемого значения и, при необходимости, произвести другие манипуляции с данными объекта, чтобы они остались корректными (внутренне согласованными). Методы доступа называют ещё аксессорами (от англ. Access -- доступ), а по отдельности -- геттерами (англ. Get -- чтение) и сеттерами (англ. Set -- запись).
Псевдополя, доступные для чтения и/или записи. Свойства внешне выглядят как поля и используются аналогично доступным полям (с некоторыми исключениями), однако фактически при обращении к ним происходит вызов методов доступа. Таким образом, свойства можно рассматривать как «умные» поля данных, сопровождающие доступ к внутренним данным объекта какими-либо дополнительными действиями (например, когда изменение координаты объекта сопровождается его перерисовкой на новом месте). Свойства, по сути -- не более чем синтаксический сахар, поскольку никаких новых возможностей они не добавляют, а лишь скрывают вызов методов доступа. Конкретная языковая реализация свойств может быть разной.
Конкретные переменные типа «класс» называются экземплярами класса, или объектами. Время жизни и видимость объектов зависит от вида и места их описания и подчиняется общим правилам С++.
При создании объекта выделяется память, достаточная для хранения всех его полей и автоматически вызывается конструктор, выполняющий их инициализацию. При выходе объекта из области видимости он уничтожается, при этом автоматически вызывается деструктор.
Доступ к элементам объекта аналогичен доступу к полям структуры. Для этого используется операция «.» (точка) при обращении к элементу через имя объекта и операция «->» при обращении через указатель.
Конструктор предназначен для инициализации объекта вызывается автоматически при его создании. Ниже перечислены основные свойства конструкторов:
Конструктор не возвращает значение. Нельзя получить указатель на конструктор.
Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации (при этом используется механизм перегрузки).
Конструктор, вызываемый без параметров, называется конструктором по умолчанию.
Параметры конструктора могут иметь любой тип, кроме этого же класса. Можно задавать значение параметров по умолчанию. Их может содержать только один из конструкторов.
Если при написании программы не было указано ни одного конструктора, компилятор создает его автоматически.
Конструкторы нельзя описывать с модификаторами const, virtual и static
Конструкторы глобальных объектов вызываются до вызова функции main. Локальные объекты создаются, как только становится активной область их действий. Конструктор запускается и при создании временного объекта (например, при передачи объекта из функции).
Деструктор - это особый вид метода, применяющийся для освобождения памяти, занимаемой объектом. Деструктор вызывается автоматически, когда объект выходит из области видимости:
Для локальных объектов - при выходе из блока, в котором они объявлены;
Для глобальных - как часть процедуры выхода из main;
Для объектов, заданных через указатели, деструктор вызывается неявно при использовании операции delete.
Имя деструктора начинается с тильды (), непосредственно за которой следует имя класса. Свойства деструктора:
не имеет аргументов и возвращаемого значения;
не может быть объявлен как const или stract;
Если деструктор явным образом не определен, компилятор автоматически пустой деструктор.
1.4 Работа с графикой в С++ Builder
В C++ Builder для графических построений предусмотрены специальные компоненты. TCanvas(Канва) - класс, предназначенный для вывода и хранения графических объектов в C++ Builder. Канва входит в состав большинства визуальных компонентов, кроме большинства визуальных компонентов, кроме стандартных оконных контролов (TButton, TMemo, Tpanel и т.п.).
При помощи методов этого класса можно рисовать как и стандартные примитивы (линии, эллипсы, прямоугольники), так и графические объекты, типа Graphics::TBitmap.
Доступ к канве любого объекта происходит следующим образом:
имя_объекта->Canvas->Свойство/Метод;
Канва, в ее графическом представлении, это двумерный массив пикселей. Каждый элемент этого массива хранит в себе информацию о цвете. Доступ к отдельно взятому пикселю можно получить из свойства Pixels, подробнее о котором будет написано ниже.
Точка(0,0) - верхний левый угол канвы. Значение по х-координате возрастает слева направо от точки(0,0), а значение по у-координате сверху вниз.
В качестве практического применения изученного материала необходимо реализовать задачу:
Запрограммировать игру с использованием основных принципов объектно-ориентированного программирования.
Главный модуль интерфейса программы;
Модуль программы, описывающий классы и методы;
Назовем разрабатываемую игру: Воздушный бой.
Игрок контролирующему свой самолет необходимо уничтожить, двигающихся к нему на встречу, вражеские самолеты, ведя по ним дистанционный огонь. По мере прохождения скорость врагов будет увеличиваться. Уровень считается пройденным, если все вражеские самолеты были уничтожены. На одну игру дается три жизни, если враг сумел добраться до нас, то игрок теряет одну жизнь. При потере игроком всех жизней игра заканчивается. Основная задача игры - заработать как можно больше очков.
Класс TEnemy содержит открытые методы:
int Color,State - цвет и положение объекта
Также имеется конструктор TEnemy(int tx,int ty), который устанавливает цвет и противников на поле в случайном порядке.
Класс TShip содержит открытые методы:
int TimeToNextBullet - время до следующего выстрела
В нем также присутствует конструктор TShip(), который устанавливает задержку перед выстрелом, пока не пуля не долетит до объектов.
Метод Draw() класса TEnemy устанавливает на фоне картинки врагов по цвету и положению на поле:
BackScreen->Canvas->Draw(x,y, EnemyPic[State][Color]);
Методы Draw(), Draw1() класса TShip устанавливает цвет и ширин пуль, метод Draw3() устанавливает позицию корабля:
BackScreen->Canvas->Pen->Color=clYellow;
BackScreen->Canvas->MoveTo(BulletPos.x,BulletPos.y+9);
BackScreen->Canvas->Pen->Style=psDot;
BackScreen->Canvas->LineTo(BulletPos.x,BulletPos.y+12);
BackScreen->Canvas->Pen->Color=clYellow;
BackScreen->Canvas->MoveTo(BulletPos1.x,BulletPos1.y+9);
BackScreen->Canvas->Pen->Style=psDot;
BackScreen->Canvas->LineTo(BulletPos1.x,BulletPos1.y+12);
BackScreen->Canvas->Draw(x,y,Plane);
BackScreen->Canvas->MoveTo(BulletPos3.x,BulletPos3.y-100);
Метод Fire() класса TShip проверяет через сколько можно будет сделать следующий выстрел:
В процедуре __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) производится загрузка картинок из файла для вражеских самолетов и истребителя игрока, устанавливает ширину, длину, цвет и размер объектов. Задает начальную скорость вражеских самолетов, а также начальное количество жизней и очки игрока:
__fastcall TForm1::TForm1(TComponent* Owner)
BackScreen=new Graphics::TBitmap();
BackScreen->Canvas->Font->Color=clYellow;
Graphics::TBitmap*Temp=new Graphics::TBitmap();
EnemyPic[i][j]=new Graphics::TBitmap();
EnemyPic[i][j]->Canvas->CopyRect(Rect(0,0,30,30),
Temp->Canvas,Rect(i*30,j*30,i*30+30,j*30+30));
Функция void TForm1::NewGame() отвечает за переход на следующий уровень, увеличение скорости врага:
Основным элементом программы является игровое поле - где и будут отображаться все элементы программы. Зададим для него начальные основные параметры - размер и цвет, функция void TForm1::ClearBack().
BackScreen->Canvas->Brush->Color=clAqua;
BackScreen->Canvas->FillRect(Rect(0,0,400,400));
Так же у нас имеются такие объекты как самолет игрока, вражеские самолеты и элементы пуль, описанные выше в классах TEnemy и TShip. Так как по задумке уничтоженные враги будут исчезать с поля боя, то следует сразу предусмотреть что и характер их движения с уменьшением количества будет изменен соответственно. Следовательно и их отображение должно меняться, DrawAllEnemy().
TEnemy*temp=(TEnemy*)Enemy->Items[i];
Для обозначения остальных объектов воспользуемся методами класса TShip. Теперь остается лишь отобразить наше поле боя с объявленными для него объектами, для этого напишем процедуру void __fastcall TForm1::FormPaint(TObject *Sender) разрисовывывающую поле боя.
void __fastcall TForm1::FormPaint(TObject *Sender)
После того как мы обозначили все наши объекты на поле поя необходимо их запрограммировать, начнем с вражеских самолетов, напишем процедуру, MoveEnemy() отвечающую за их передвижение:
bool __fastcall TForm1::MoveEnemy()
if(temp->State==0)temp->State=1;else temp->State=0;
if(EnemyDirect==1)temp->x+=EnemySpeed;
if(EnemyDirect==2)temp->x-=EnemySpeed;
Чтобы наши объекты двигались необходимо привязать изменение параметров их координат и свойств на поле боя к событию которое происходило постоянно и придавало бы нашей игре динамичность и им послужит событие OnTimer объекта Timer. Запрограммируем данное событие:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
if (MessageDlg("У вас больше нет жизней. Начать сначала?", mtInformation, TMsgDlgButtons() << mbYes << mbNo,0) == mrNo)
if (MessageDlg("Вы победили? Продолжить?", mtInformation, TMsgDlgButtons() << mbYes << mbNo,0) == mrNo)
BackScreen->Canvas->Brush->Style=bsClear;
BackScreen->Canvas->TextOut(10,10,"Жизней:"+IntToStr(Lifes));
BackScreen->Canvas->TextOut(10,30,"Очков:"+IntToStr(Scores));
BackScreen->Canvas->Brush->Style=bsSolid;
Программа почти готова осталось запрограммировать клавиши управления и один из основных элементов игры - уничтожение противника. Напишем функцию MoveBullet(), которая будет отвечать за проверку попадания пули во врага и начисления очков игроку в случае уничтожения вражеских самолетов:
if(Ship.Time>40) //При выходе за экран
if(((Ship.BulletPos.x>=temp->x)&&(Ship.BulletPos.x<=temp->x+30)&&
(Ship.BulletPos.y>=temp->y)&&(Ship.BulletPos.y<=temp->y+30))||
((Ship.BulletPos1.x>=temp->x)&&(Ship.BulletPos1.x<=temp->x+30)&&
(Ship.BulletPos1.y>=temp->y)&&(Ship.BulletPos1.y<=temp->y+30)))
В процессе написания курсовой работы, были получены знания об основных принципах объектно - ориентированного программирования, рассмотрены такие понятия класс, метод. Подробно изучены способы создания объектов, использование графики в C++ Builder, также изучены принципы работы конструкторов и деструкторов, были приобретены огромные навыки в объектно-ориентированном программировании, подкреплены теоретические знания на практике. Все эти знания были применены при выполнении данного курсового проекта в виде реализации простейшей компьютерной игры - Воздушный бой.
Семакин И.Г., Шестяков А.П., «Основы программирования». Москва. 2002.
Лафоре Р., «Объектно - ориентированное программирование С++». 2013.
Медведев В.И., «Особенности объектно - ориентированного программирования на С++/CLI, C# и Java». 2010
Набайоти Баркакати «Программирование игр для Windows на Borland C++». 1994
http://citforum.ru/programming/tasm3/tasm3_4.shtml
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// устанавливает цвет и противников на поле в случайном порядке
BackScreen->Canvas->Draw(x,y,EnemyPic[State][Color]);
// устанавливает задержку перед выстрелом, пока не пуля не долетит до объектов
BackScreen->Canvas->Pen->Color=clYellow;
BackScreen->Canvas->MoveTo(BulletPos.x,BulletPos.y+9);
BackScreen->Canvas->Pen->Style=psDot;
BackScreen->Canvas->LineTo(BulletPos.x,BulletPos.y+12);
BackScreen->Canvas->Pen->Color=clYellow;
BackScreen->Canvas->MoveTo(BulletPos1.x,BulletPos1.y+9);
BackScreen->Canvas->Pen->Style=psDot;
BackScreen->Canvas->LineTo(BulletPos1.x,BulletPos1.y+12);
BackScreen->Canvas->Draw(x,y,Plane);
BackScreen->Canvas->MoveTo(BulletPos3.x,BulletPos3.y-100);
// загружает из файла картинки для врагов и самолета,
// устанавливает ширину, длину, цвет и размер объектов.
__fastcall TForm1::TForm1(TComponent* Owner)
BackScreen=new Graphics::TBitmap();
BackScreen->Canvas->Font->Color=clYellow;
Graphics::TBitmap*Temp=new Graphics::TBitmap();
EnemyPic[i][j]=new Graphics::TBitmap();
EnemyPic[i][j]->Canvas->CopyRect(Rect(0,0,30,30),Temp->Canvas,Rect(i*30,j*30,i*30+30,j*30+30));
//---------------------------------------------------------------------------
// Задает скорость врагов, а также жизни и очки игрока
TEnemy*temp=(TEnemy*)Enemy->Items[i];
void __fastcall TForm1::FormPaint(TObject *Sender)
// Задаем параметры игрового поля (Цвет, размер)
BackScreen->Canvas->Brush->Color=clAqua;
BackScreen->Canvas->FillRect(Rect(0,0,400,400));
bool __fastcall TForm1::MoveEnemy()
if(temp->State==0)temp->State=1;else temp->State=0;
if(EnemyDirect==1)temp->x+=EnemySpeed;
if(EnemyDirect==2)temp->x-=EnemySpeed;
// устанавливает время, за которое враги доберутся до корабля
void __fastcall TForm1::Timer1Timer(TObject *Sender)
if (MessageDlg("У вас больше нет жизней. Начать сначала?", mtInformation, TMsgDlgButtons() << mbYes << mbNo,0) == mrNo)
if (MessageDlg("Вы победили? Продолжить?", mtInformation, TMsgDlgButtons() << mbYes << mbNo,0) == mrNo)
BackScreen->Canvas->Brush->Style=bsClear;
BackScreen->Canvas->TextOut(10,10,"Жизней:"+IntToStr(Lifes));
BackScreen->Canvas->TextOut(10,30,"Очков:"+IntToStr(Scores));
BackScreen->Canvas->Brush->Style=bsSolid;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
if(Key==VK_RIGHT || Key==68) RIGHT=true;
if(Key==VK_LEFT || Key==65)LEFT=true;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key,
if(Key==VK_RIGHT || Key==68)RIGHT=false;
if(Key==VK_LEFT || Key==65) LEFT =false;
//---------------------------------------------------------------------------
if(Ship.Time>40) //При выходе за экран
if(((Ship.BulletPos.x>=temp->x)&&(Ship.BulletPos.x<=temp->x+30)&&
(Ship.BulletPos.y>=temp->y)&&(Ship.BulletPos.y<=temp->y+30))||
((Ship.BulletPos1.x>=temp->x)&&(Ship.BulletPos1.x<=temp->x+30)&&
(Ship.BulletPos1.y>=temp->y)&&(Ship.BulletPos1.y<=temp->y+30)))
if(Enemy->Count>0)return false;else return true;
Исследование принципов объектно-ориентированного программирования на базе языка программирования С++. Разработка программного комплекса для ведения учёта памятников города. Описание процессов сортировки, поиска, формирования статистики по памятникам. курсовая работа [782,4 K], добавлен 26.05.2014
Анализ предметной области "Конкурс поэтов" на основе объектно-ориентированного подхода. Разработка оконного приложения и описание информационной модели предметной области. Описание разработанных процедур С++ и результатов тестирования приложения. курсовая работа [355,9 K], добавлен 18.06.2013
Разработка объектно-ориентированной модели животного, которая объясняется построением модели игры Terrarium. Модель построена на базе концепций объектно-ориентированного программирования. Разработка компонента, моделирующего поведение животного. курсовая работа [23,2 K], добавлен 30.11.2008
Разработка программы логической игры в "крестики-нолики" пять в ряд на поле размера 15х15 клеток с применением графики на языке Pascal с использованием объектно-ориентированного программирования. Структура алгоритма программы и описание ее работы. курсовая работа [821,5 K], добавлен 13.02.2012
Создание консольных приложений с использованием графического интерфейса пользователя. Содержание палитры компонентов программы С++ Builder. Использование возможностей объектно-ориентированного программирования, особенности редактора кода и форм в С++. лекция [27,0 K], добавлен 22.12.2010
Анализ объектно-ориентированного программирования, имитирующего способы выполнения предметов. Основные принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм. Понятие классов, полей, методов, сообщений, событий. контрольная работа [51,7 K], добавлен 22.01.2013
Приемы и правила объектно-ориентированного программирования с использованием языка С++. Общие принципы разработки объектно-ориентированных программ. Основные конструкции языка С++. Разработка различных программ для Windows с использованием WIN32 API. учебное пособие [1,6 M], добавлен 28.12.2013
Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д. PPT, PPTX и PDF-файлы представлены только в архивах. Рекомендуем скачать работу .

© 2000 — 2021



Разработка игры "Воздушный бой" курсовая работа. Программирование, компьютеры и кибернетика.
Реферат: Генезис института присяжных заседателей в Российской империи
Реферат: Вальдек, Жан-Фредерик
Реферат: Изменения в обучении географии
Реферат На Тему Финансовые Активы И Инвестиционные Проекты
Английский 3 Класс Контрольная Работа Модуль 1
Курсовая работа по теме Феномен двійництва у романі В. Шевчука 'Три листки за вікном'
Доклад по теме Ненцы
Курсовая работа по теме Практика применения перспективных организационных форм упавления
В Чем Проблема В Жизни Обломова Сочинение
Реферат: «На пути к информационному обществу: история, основные направления развития, актуальные проблемы»
Контрольная работа по теме Срок выплаты страхового возмещения. Правомерные действия, освобождающие от обязанности возмещения причиненного вреда
Контрольная работа по теме Металлургический комплекс Росии
Реферат: Эффективность деятельности службы управления прерсоналом организации. Скачать бесплатно и без регистрации
Доклад по теме Секреты дискуса
Презентация Сочинение Описание Моего Дома
Старуха Изергиль Аргументы К Сочинению
За Сколько Делают Рефераты
Контрольная работа: Задача по математике и информатике. Скачать бесплатно и без регистрации
Реферат по теме Виды конфликтов. Способы профилактики и решения конфликтов
Российская Государственная Библиотека Диссертаций
Сифилис ЛОР-органов - Медицина презентация
Выявление и определение основ конституционно-правового регулирования интеллектуальной собственности в России - Государство и право дипломная работа
Формирование науки о переводе. Теория перевода как самостоятельная наука - Иностранные языки и языкознание презентация


Report Page