У вас вопросы?
У нас ответы:) SamZan.net

ЛАБОРАТОРНАЯ РАБОТА 1

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 6.3.2025

1 ЛАБОРАТОРНАЯ РАБОТА №1. СОЗДАНИЕ HTML5 ИГР

1.1 Цель работы

Ознакомиться с особенностями разработки игровых приложений с помощью HTML 5, языка для структурирования и представления содержимого для всемирной паутины. Освоить основные составные части и функции, принципы разработки приложений с помощью технологии HTML 5, используемой в Интернет.   

1.2 Методические рекомендации к самостоятельной работе студентов

HTML 5 – язык для структурирования и представления информации. Основная цель HTML 5 – улучшить язык, поддерживающий работу с новейшими мультимедийными приложениями, при этом сохраняется легкость чтения кода для человека и ясность исполнения для компьютеров и приспособлений (веб-браузеры, синтаксические анализаторы и т.д.).

HTML 5 – попытка определить единый язык разметки, который мог бы быть написан как и в HTML, так и в XHTML и был бы синтаксически корректен. Он включает в себя детальные модели обработки, чтобы поддерживать больше взаимодействующих процессов; он расширяет, улучшает и рационализирует разметку, пригодную для документов, и вводит разметку и API для сложных веб-приложений.

На данный момент для встраивания интерактивного контента, наиболее популярной технологией является Adobe Flash. Однако большинство разработчиков отказываются от неё. Так, Apple отказался от поддержки соответствующего плагина в своём браузере Safari и операционной системе iOS, Microsoft отказывается от поддержки Flash плагина в своём браузере Internet Explorer 10, в Android Market Flash плагин имеет наименьшие оценки. Большинство разработчиков заявляют, что наибольшее число feedback о ненормальном прекращении работы их продуктов связано именно с плагином Adobe Flash.

HTML5 имеет следующие преимущества по сравнению с Adobe Flash:

  •  открытость платформы. Связанное с флеш ПО на 100% частное. Эти продукты доступны только в Adobe, и Adobe владеет монополией на их развитие, ценообразование и т.д. Их широкая распространённость не означает их открытость, т.к. они производятся и контролируются Adobe;
  •  доступ ко всем веб-технологиям. Такие технологии как просмотр фильмов, игры, работа с пользовательским интерактивом ранее были доступны только для пользователей технологии Adobe Flash. Теперь добиться тех же результатов можно с помощью чистой веб-технологии;
  •  более высокие надёжность, производительность и безопасность. Symantec выделил флеш, как технологию с одним из худших рангов уязвимости в 2009 году. Так же выполнение определённого кода позволяет закрыть браузер и начать выполнение процесса вне его и собрать информацию о системе и её уязвимостях;
  •  более низкое энергопотребление. Чтобы батареи при проигрывании видео хватало надолго, гаджеты должны аппаратно декодировать видео, программный декодинг слишком энергоёмок. Многие современные устройства содержат аппаратный декодер H.264. Хотя флеш с недавнего времени поддерживает H.264, почти на всех флеш-сайтах видео требует декодера прошлого поколения, не реализованного аппаратно и декодируется программно;
  •  поддержка управления, с помощью сенсорных экранов. Флеш был придуман для ПК с мышью, не для управления пальцами. Большинство флеш-сайтов основаны на «onMouseOver»-событии от которого срабатывают меню и другие элементы. Multi-touch интерфейс не использует мышь, поэтому нет аналога для «onMouseOver»-события. Большинство флеш-сайтов должны быть переписаны для поддерживать сенсорного интерфейса.

Під час підготовки до лабораторної роботи необхідно ознайомитися з конспектом лекцій та матеріалами, які наведено у літературних джерелах [1–5].

1.3 Порядок выполнения работы

При выполнении лабораторной работы необходимо реализовать игровое приложение, тематику которого задает  преподаватель. Примеры заданий для лабораторной работы приведены в разделе 1.4. Ниже рассмотрен порядок выполнения лабораторной работы на тему «Игра змейка».

1.3.1Работа с медиа-элементами

При работе с медиаконтентом следует помнить, что браузер может воспроизводить только медиа, закодированное строго ограниченным набором кодеков, среди которых:

Аудиокодеки:

  •  AAC;
  •  MPEG-3;
  •  Ogg Vorbis.

Видеокодеки:

  •  H.264;
  •  VP8;
  •  Ogg Theora.

Так же, не следует забывать, что определённые браузеры могут воспроизводить контент, закодированный строго определёнными кодеками.

Для работы с медиаконтентом в HTML5 используются теги: <audio>… </audio> для работы с аудио контентом и <video>…</video> для работы с видео контентом. Данный тег указывает браузеру необходимость создания контрола для работы с соответствующим контентом. Пример контролов, генерируемых браузером Google Chrome, представлены на рисунках 1.1 – 1.2.

Рисунок 1.1 – Контрол для работы с аудио контентом

Рисунок 1.2 – Контрол для работы с видео материалом (отображается клип на композицию БИ-2 – «Оптимист»)

Данные теги принимают ряд необязательных параметров:

  •  src – принимает строку, которая определяет URL загружаемого контента.
  •  autoplay – принимает логическое значение, определяющего начнётся ли воспроизведение контента сразу после загрузки элемента.
  •  loop – принимает логическое значение, указывающее будет ли воспроизведение начато с начала после завершения.
  •  muted – принимает логическое значение, указывающее будет ли воспроизводится в беззвучном режиме.
  •  controls – принимает логическое значение, указывающее, что разработчик просит браузер предоставить встроенные компоненты управления, в случае не указания данного параметра, контролы, указанные на рисунках 1.1 – 1.2, созданы не будут, и их создание полностью лежит на программисте.
  •  poster – только для тега <video>, принимает строку, определяющую URL изображения-заглушки.

Как уже было замечено ранее, разные браузеры поддерживают разные наборы кодеков. Для создания контента, который будет воспроизводиться одинаково во всех браузерах, используется тег <source>…</source>, который вкладывается внутрь основного тега. Теги <source> рассматриваются браузером последовательно сверху-вниз до момента, пока не встретится первый источник, который может быть воспроизведён. Если не встретится контент, который закодирован кодеком, который понимается браузером, – воспроизведение начато не будет.

Тег <source> получает следующие параметры:

  •  src – обязательный атрибут, принимающий строку, содержащую URL медиаконтента;
  •  type – параметр, принимающий строку, которая содержит MIME тип медиа контента. Параметр иногда используется с подпараметром codecs, принимающим строку, которая содержит точную строку-наименование кодека медиа-контента по RFC4281.

Образец использования тега <source>:

<source src='video.ogv' type='video/ogg;

  codecs="theora, vorbis"'>

Для работы с контентом используются следующие js – функции:

  •  load() – загружает медиафайл и подготавливает его к воспроизведению. Вызов данной функции в явном виде, почти никогда не требуется. Исключение составляет только загрузка контента, который создается динамически;
  •  play() – загружает и воспроизводит медиафайл. Также служит для восстановления воспроизведения после приостановки;
  •  pause() – приостанавливает воспроизведение медиафайла;
  •  canPlayType(type) – возвращает булево значение может ли браузер воспроизводить данный тип. В качестве типа передаётся MIME-type воспроизводимого контента.

Для анализа текущего состояния воспроизводимого контента используются следующие readonly-параметры:

  •  duration – возвращает число с плавающей точкой, показывающее продолжительность клипа в секундах;
  •  paused – возвращает true – если воспроизведение приостановлено;
  •  ended – возвращает true если клип завершился;
  •  startTime – возвращает число с плавающей точкой, показывающее время с которого начинается воспроизведение в секундах (чаще всего применяется 0.0). Исключение составляет потоковый контент. В данном случае возвращается время, с которого медиаконтент содержится в буфере;
  •  error – возвращает код последней ошибки;
  •  currentSrc – возвращает строку – содержимое атрибута src.

Для управления состоянием воспроизведения контента, используются следующие параметры:

  •  autoplay – устанавливает/возвращает установку атрибута autoplay;
  •  loop – устанавливает/возвращает установку атрибута loop;
  •  currentTime – устанавливает/возвращает количество времени прошедшее с момента запуска файла в секундах.;
  •  controls – устанавливает/возвращает установку атрибута controls;
  •  volume – устанавливает/возвращает уровень громкости. Уровень громкости указывается числом плавающей точкой от 0.0 до 1.0;
  •  muted – устанавливает/возвращает установку беззвучного режима.

1.3.2 Работа с графическими элементами

Рассмотрим отображение 2D элементов на странице. Для работы с графикой используется элемент canvas. Элемент canvas впервые предложен корпорацией Apple в 2004 году, и использовался для создания дополнений к браузеру. На сегодняшний день canvas поддерживается во всех основных браузерах.

Для встраивания элемента используется тег <canvas>…</canvas>, он рассматривается браузером, и имеет такие же параметры, как и любой другой блочный элемент. Для работы с данным элементом используется язык JavaScript. Для проверки поддержки используется следующий код:

canvas = document.getElementById('canvas');

if (canvas.getContext) {//Canvas поддерживается  }

else     {//Canvas не поддерживается }

Все объекты, рисуемые на canvas, отрисовываются на объекте RenderingContext. Для получения доступа к нему вызывается функция getContext('2D'), у элемента. Никакие другие параметры, кроме 2D пока не предусмотрены, однако в будущем это должно измениться. Далее все рассматриваемые методы и параметры вызываются у объекта context, если не указано другое.

Создание примитивов на элементе требует выполнения ряда операций:

  •  сообщить, что начинается отрисовка;
  •  нарисовать фигуры;
  •  сообщить, что отрисовка завершена и необходимо отобразить нарисованные элементы. Для этого используются функции:
  1.  beginPath() – сообщает о начале отрисовки;
  2.  moveTo(x, y) – перемещает перо в указанную точку холста;
  3.  lineTo(x, y) – перемещает перо в указанную точку холста, и рисует прямую линию;
  4.  strokeRect(x, y, width, height) – отображает прямоугольник с заданной шириной, высотой в заданной точке;
  5.  stroke() – отображает нарисованные элементы.

Таким образом, для отображения линии, необходимо указать следующй код:

canvas = document.getElementById('canvas');

if (canvas.getContext){

var context = canvas.getContext('2d');

context.beginPath();

context.moveTo(10, 20);

context.lineTo(150, 100);

context.stroke();

}

else{alert('Canvas is not supported');}

Результат работы данного кода изображён на рисунке 1.3.

Также, canvas поддерживает работу с кривыми линиями. Поддерживаются следующие кривые:

Рисунок 1.3 – Результат отображения кода

  •  кривая Безье. Строится с помощью функции bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x, y). cpx1, cpy1 – координаты первой контрольной точки; cpx2, cpy2 – координаты второй контрольной точки; x, y – координаты конца прямой. В качестве координат начала берётся текущая позиция пера. Принцип построения кривой отображён на рисунке 1.4.
  •  квадратическая кривая. Строится с помощью функции quadricCurveTo(cpx, cpy, x, y): cpx, cpy – координаты контрольной точки; x, y – координаты конца прямой. В качестве координат начала берётся текущая позиция пера. Принцип построения кривой отображён на рисунке 1.5. Ниже приведен пример рисования квадратической кривой:

Рисунок 1.4 – Построение

кривой Безье

 

Рисунок 1.5 – Построение

квадратической кривой

context.moveTo(75,25);

context.quadraticCurveTo(25,25,25,62.5);

context.quadraticCurveTo(25,100,50,100);

context.quadraticCurveTo(50,120,30,125);

context.quadraticCurveTo(60,120,65,100);

context.quadraticCurveTo(125,100,125,62.5);

context.quadraticCurveTo(125,25,75,25);

context.stroke();

Результат приведенного фрагмента рисования приведено на рисунке 1.6.

Рисунок 1.6 – Отображение результата приведенного фрагмента рисования

  •  дуга строится с помощью функции arcTo(x1, y1, x2, y2, radius), где x1, y1; x2, y2 – координаты первой и второй контрольной точек соответственно; radius – радиус дуги. Принцип построения кривой отображён на рисунке 1.7.

Рисунок 1.7 – Построение дуги

Все фигуры, которые Были построены до текущего момента, имели один стиль отображения. Для изменения стиля нарисованных элементов объект context элемента canvas имеет следующие параметры:

  •  lineWidth – ширина отображаемой линии в пикселях (по умолчанию 1);
  •  lineJoin – тип соединения линий round – скруглённое соединение, bevel – срезанное, mittel – прямое (по умолчанию mittel). Примеры отображаемых линий приведены на рисунке 1.8;

Рисунок 1.8 – Типы соединения линий

  •  strokeStyle – цвет отображаемой прямой (по умолчанию чёрный).

Помимо работы с каркасными фигурами, можно заливать заданным цветом необходимые области экрана. Для этого используются функции:

  •  fillRect(x, y, width, height) – заливает область шириной width и высотой height в точке x, y;
  •  clearRect(x, y, width, height) – восстанавливает фоновый цвет области шириной width и высотой height в точке x, y;

Для определения цвета заливки используется параметр fillStyle.

Помимо работы с фигурами заданного цвета, элемент canvas позволяет работать с уже готовыми изображениями. Для отображения изображения используется функция drawImage(image, x, y, width, height), которая отображает изображение image, в прямоугольнике с шириной width и высотой height, в точке (x, y). До вызова этой функции изображение уже должно быть полностью загружено. Однако загрузка изображения выполняется асинхронно, поэтому перед вызовом данной функции делают следующую проверку:

var image = new Image();

image.src = 'image.jpg';

image.onload = function(){drawImage(image,5,10, 100, 100);}

Изображения могут быть использованы в качестве шаблонов, для отрисовки фигур. Для этого загруженное изображение надо преобразовать с помощью функции createPattern(image, repeat), где image –рисунок, repeat – тип повторения. Доступны следующие типы повторения изображения:

  •  repeat – повторение, как по оси x, так и по оси y (по умолчанию);
  •  repeat-x – повторение только по оси x;
  •  repeat-y – повторение только по оси y;
  •  norepeat – без повторений.

Далее полученный шаблон необходимо передать в параметр strokeStyle или fillStyle, в зависимости от целей применения.

Также canvas предоставляет методы, для работы с градиентом. Поддерживаются 2 типа градиентов:

  •  линейный. Создаётся функцией createLinearGradient(x0, y0, x1, y1), в прямоуголнике, заданным точками (x0,y0); (x1,y1). Пример градиента отображён на рисунке 1.9.
  •  радиальный. Создаётся функцией createRadialGradient(x0, y0, r0, x1, y1, r1), и представляет собой две окружности, заданные своими координатами и радиусами. Пример градиента отображён на рисунке 1.10.

Рисунок 1.9 – Линейный градиент

Рисунок 1.10 – Радиальный градиент

Для указания цветов градиента, у этого объекта существует метод addColorStop(gradientPart, color), где gradientPart – часть градиента, которая представляется, как число с плавающей точкой от 0 (начало градиента), до 1 (конец градиента), color – цвет в указанной точке. Далее объект градиент передаётся параметру strokeStyle или fillStyle, в зависимости от целей.

var canvas = document.getElementById('picture');

var context = canvas.getContext('2d');

var grad = context.createLinearGradient(150,0,150,150);

grad.addColorStop(0,'rgb(255, 0, 0)');  

grad.addColorStop(0.5,'rgb(0, 255, 0)');

grad.addColorStop(1,'yellow');

context.fillStyle = grad;

context.fillRect(0,0,150,150);

Элемент canvas предоставляет готовые решения для работы с тенью элементов, для этого у элемента context, предусмотрены параметры:

  •  shadowColor – задаёт цвет тени;
  •  shadowOffsetX – смещение тени относительно основного объекта по оси X;
  •  shadowOffsetY – смещение тени относительно основного объекта по оси Y;
  •  shadowBlur – размытие тени.

Работа с созданием примитивов, в неявном виде представляет собой работу с геометрическими преобразованиями изображений, однако, можно и явно преобразовывать объекты. Данные функции, напоминают преобразование объектов в OpenGL. Рассмотрим их:

  •  save() – сохранение текущего состояния холста;
  •  translate(x, y) – перемещение центра координат в точку с координатами x, y;
  •  scale(x, y) – масштабирование холста по оси x и y;
  •  rotate(cornerRadian) – поворот системы координат вокруг начала координат на угол cornerRadian;
  •  restore() – восстановление ранее сохранённого состояния холста.

Помимо, работы с элементами с помощью заданных функций, можно работать напрямую с пикселями изображений. Для получения информации о них, вызывается функция getImageData(x, y, width, height). Данная функция возвращает объект типа ImageData, который имеет следующие параметры:

  •  width – ширина выбранной области;
  •  height – высота выбранной области;
  •  data – одномерный массив данных, в котором записаны R, G, B и alpha компоненты каждого пикселя. Компоненты задаются целым числом от 0 до 255. Учитывая, что все данные представлены в одном массиве, доступ к элементам затруднён. Чтобы получить доступ к компонентам точки x и y используются следующие формулы:

R = ((width * y) + x) * 4

G = (((width * y) + x) * 4) + 1

B = (((width * y) + x) * 4) + 2

Alpha = (((width * y) + x) * 4) + 3

Обработав пиксели изображения, необходимо вставить его в элемент canvas. Для этого используем функцию putImageData(imageData, dx, dy), где imageData – информация о пикселях изображения; dx, dy – координаты точки, куда встраиваем выбранную часть изображения.

Помимо работы с изображением canvas предоставляет функционал для работы с текстом. Для встраивания текста, используются функции:

  •  strokeText(text, x, y, maxWidth);
  •  fillText(text, x, y, maxWidth),

где text – отображаемый текст; x, y – координаты точки, куда встраиваем текст; maxWidth – максимальная ширина объекта текста.

Для управления текстом у элемента context предусмотрены следующие параметры:

  •  textAlign – выравнивание точки встраивания текста относительно точки встраивания текста. Возможные варианты изображены на рисунке 1.11.

Рисунок 1.11 – Выравнивание относительно точки встраивания

  •  font – указание параметров шрифта текста
  •  textBaseLine – указание базовой линии текста. Возможные варианты указаны на рисунке 1.12.

Рисунок 1.12 – Варианты базовой линии текста

1.3.3 Пример создания HTML5-игры «Змейка»

В качестве задания создадим простейшую игру змейка, для этого необходимо сделать следующие шаги:

– создать форму, для отображения игры;

– создать переменные для определения состояния змейки и основных констант;

– создать функции для отображения змейки;

– создать функции для основной логики игры;

– создать основной игровой цикл;

– обеспечить взаимодействие с пользователем;

– добавить медиа-контент;

– проинициализировать игру.

Для начала создадим форму, на которой будет отображаться игра:

<!doctype html>

<head>

<title>Snake</title>

</head>

<body onload="init()">

<input type="button" value="Play/Pause"

    onclick="play()"><br />

<canvas id="canvas" style="border: solid 1px red;"

    width="600" height="600">

</canvas>

</body>

Создадим основные внешние переменные, используемые для написания скрипта (создаются в теге <script>…</script>):

var bckColor = "rgb(0, 255, 255)";

var snakeColor = "rgb(0, 0, 0)"; //Цвет змейки

var foodColor = "rgb(0, 255, 0)"; //Цвет еды змейки

var ctx;       //Объект context

var gridSize = 20;    //Размер клетки

var snake;      //Очередь элементов змейки

var food = [];     //Координаты еды змейки

var direction;     //Направление змейки

var changex = [-1, 0, 1, 0];  //Изменение координаты x в

       //зависимости от направления

var changey = [0, -1, 0, 1];  //Изменение координаты y в

       //зависимости от направления

var paused;      //Состояние игры

var speed = 100;     //Скорость перемещения змейки

var clock;      //Объект таймера

Создадим функции отрисовки элементов:

function drawSnake(){

 ctx.fillStyle = snakeColor;

ctx.fillRect(snake[snake.length - 1][0] * gridSize, snake[snake.length - 1][1] * gridSize, gridSize, gridSize);

}

function drawFood(){

ctx.fillStyle = foodColor;

ctx.fillRect(food[0] * gridSize, food[1] * gridSize, gridSize, gridSize);

}

function delPart(x, y){

ctx.fillStyle = bckColor;

ctx.clearRect(x * gridSize, y * gridSize, gridSize,

  gridSize);

}

Создадим функцию принадлежности точки телу змейки.

function dotBelongSnake(x, y){

res = false;

for(i = 0; i < snake.length && !res; ++i)

 res = x == snake[i][0] && y == snake[i][1];

 return res;

}

Создадим функции добавления элементов, на поле.

function setX(x)

{

return x >= 0 ? x % (ctx.canvas.width / gridSize) : x +

  (ctx.canvas.width / gridSize);

}

function setY(y)

{

return y >= 0 ? y % (ctx.canvas.height / gridSize) : y + (ctx.canvas.height / gridSize);

}

function addFood(){

do

{

 food[0] = Math.floor(Math.random() *

   (ctx.canvas.height / gridSize));

 food[1] = Math.floor(Math.random() *

   (ctx.canvas.height / gridSize));

}while(dotBelongSnake(food[0], food[1]));

 drawFood();

}

Создадим функцию проверки змейки на столкновение.

function crash(){

res = false;

for(i = 0; i < snake.length - 1 && !res; ++i)

{

 res = snake[i][0] == snake[snake.length - 1][0] &&

   snake[i][1] == snake[snake.length - 1][1];

 }

return res;

}

Создадим функцию управления состоянием игры.

function play(){

if(paused) clock = setInterval(movement, speed);

else   clearInterval(clock);

paused = !paused;

}

Создадим основной игровой цикл.

function movement(){

 snake.push([setX(snake[snake.length - 1][0] + changex[direction]), setY(snake[snake.length - 1][1] + changey[direction])])

if(!dotBelongSnake(food[0], food[1]))

{

 delPart(snake[0][0], snake[0][1]);

 snake.shift();

}

else

 addFood();

if(crash())

{

 play();

 alert("Game Over;");

 clear();

 init();

}

drawSnake();

}

Создадим функцию управления игрой.

function changeDirection(event)

{

if(!paused)

{

 code = 0

 if(event == null)  code = window.event.keyCode;

 else     code = event.keyCode;

 switch(code)

 {

  case 37: if(direction != 2) direction = 0;

    break;

  case 38: if(direction != 3) direction = 1;

    break;

  case 39: if(direction != 0) direction = 2;

    break;

  case 40: if(direction != 1) direction = 3;

    break;

 }

}

}

Создадим функцию инициализации игры.

function init()

{

canvas = document.getElementById('canvas');

if (canvas.getContext)

{

 snake = [[0, 0]];

 direction = 2;

 paused = true;

 ctx = canvas.getContext('2d');

 document.onkeydown =

  function (event){changeDirection(event);};

 addFood();

 return true;

}

else

{

 alert("Canvas isn’t supported!");

 return false;

}

}

1.4 Варианты заданий для выполнения лабораторной работы

  1.  Тетрис.
  2.  Арканоид.
  3.  Пакмен.
  4.  Pong на 2 игроков. Управление с левой и правой части клавиатуры.

1.5 Выводы

В ходе выполнения лабораторной работы студенты ознакомились с особенностями разработки игровых приложений с помощью HTML 5, освоили основные составные части и функции, принципы разработки приложений с помощью технологии HTML 5, используемой в Интернет.

1.6 Контрольные вопросы и задания

  1.  Какие кодеки может воспроизводить браузер?
  2.  Какой тег используется для создания элемента, воспроизводящего звук? Какие параметры он принимает?
  3.  Какой тег используется для создания элемента, воспроизводящего видео? Какие параметры он принимает?
  4.  Для чего используется параметр controls? Что происходит, если параметр controls не указан?
  5.  Как указать множественный источник медиаконтента? Какой источник будет выбран приоритетным?
  6.  Как изменять состояние медиаэлемента?
  7.  Какие параметры медиаэлемента можно изменять?
  8.  Какие параметры медиаэлемента доступны только для считывания?
  9.  Как создать элемент для отображения 2D графики?
  10.  Базовые функции для отрисовки элементов.
  11.  Отрисовка кривых.
  12.  Работа со стилями рисуемых фигур.
  13.  Отрисовка рисунков.
  14.  Создание градиентов.
  15.  Отличия линейного и радиального градиентов.
  16.  Работа с тенями.
  17.  Функции для моделирования работы графических преобразований.
  18.  Попиксельная работа с изображением.
  19.  Работа с текстом на canvas.
  20.  Вертикальное и горизонтальное выравнивание текста.




1. Международная торговля представляет собой процесс купли и продажи осуществляемый между покупателями прод
2. Лабораторная работа 6 Модуль оптимизации и многовариантных расчетов UM Experiments Цель работы- Ознакоми
3. Реферат на тему -Одесса Потёмкинская лестница Выполнила работу- Чекмарёва Лиля 9Б класс Потёмкинск
4. Воскресшие боги Леонардо да Винчи показан во взаимоотношениях со своими великими современниками- Рафаэлем
5. 31 СПОСОБИ ЕКСПРЕСИВНОЇ РЕАЛІЗАЦІЇ ГРАМАТИЧНОГО СУБ~ЄКТА В ПОЕТИЧНОМУ
6. Повышение устойчивости к физической нагрузке у тренированных и нетренировнных лиц под влиянием тонизирующих фитосборов
7. РАЗДАТКА В казахском ухо луны в чешском рулетик из селди в армянском обезьяна в итальянском ул
8. Тема. Чередование звуков в суффиксах слов видимое на письме
9. Греция- Политика Искусство Наука
10. Предмет і метод економічної історії