This commit is contained in:
Alexander Popov 2021-07-08 01:38:10 +03:00
parent 8e0c66565c
commit 1b7ed67f3e
9 changed files with 211 additions and 6 deletions

1
.gitignore vendored
View File

@ -1,3 +1,2 @@
node_modules/
package-lock.json
docs/DOCS.md

142
docs/DOCS.md Normal file
View File

@ -0,0 +1,142 @@
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
## setAreas
Устанавливает размеры и положение зон для отрисовки
### Parameters
* `canvas` **[Object][1]**
* `landscape_orientation` **Bool** текущая ориентация игры
* `logoImage` **[Image][2]** логотип
Returns **[Object][1]** список зон
## getMousePos
Возвращает
### Parameters
* `canvas` **[Object][1]** canvas с которого считывается позиция курсора
* `event` **[Event][3]**
Returns **[Object][1]** координаты X, Y положения курсора на canvas
## isInside
Проверяет положение курсора в области объекта
### Parameters
* `mousePos` **[Object][1]** { x:, y: } курсора мыши
* `rect` **[Object][1]** квадратная область
Returns **Bool**
## clearContext
### Parameters
* `canvas` **[Object][1]** canvas object
* `color` **[String][4]** строка с цветом (HEX, либо имя, либо rgba, etc)
## getCenterH
Возвращает X координату для центрировки объекта
### Parameters
* `canvasWidth` **Integer**
* `objectWidth` **Integer**
Returns **Integer** X координата
## getCenterV
Возвращает Y координату для центрировки объекта
### Parameters
* `canvasHeight` **Integer**
* `objectHeight` **Integer**
Returns **Integer** Y координата
## drawProgressBar
Рисует полосу прогресса с визуализацией правильных и неправильных ответов
### Parameters
* `context`
* `area` **[Object][1]** зона в которой будет отрисовываться объект
* `colors` **[Object][1]** объект цветов
* `questions` **[Object][1]** объект вопросов
## imagePreloader
Функция, которая загружает изображения в документ
и по завершению выполнятся callback() функция
### Parameters
* `images` **[Array][5]** массив с именами файлов
* `callback` **[Function][6]** callback() функция
## shuffle
Функция случайным образом перемешивает массив
### Parameters
* `array` **[Array][5]** массив, элементы которого будут перемешаны
## setOrientation
Функция возвращает ориентацию игры в зависимости от размера canvas
### Parameters
* `canvas` **[Object][1]** canvas object
Returns **Bool** значение, которое присвается landscape_orientation в index.js
## checkAnswer
Проверяет правильность ответа на вопрос и устанавливает статус ответа в верно/неверно
### Parameters
* `quest` **[Object][1]** объект вопроса с вариантами ответа и правильным вариантом
* `answer` **[String][4]**
## restartGame
При выполнении перемешивает вопросы и варианты ответов и запускает игру сначала
### Parameters
* `game` **[Object][1]** объект игрового процесса
* `quests` **[Object][1]** объект с вопросами
## playMusic
Воспроизводит фоновую музыку
### Parameters
* `config` **[Object][1]** объект с параметрами движка
* `music` **AudioContext**
[1]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
[2]: https://developer.mozilla.org/docs/Web/API/HTMLImageElement/Image
[3]: https://developer.mozilla.org/docs/Web/API/Event
[4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
[6]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function

View File

@ -2,6 +2,13 @@ import config from './config.json';
import * as Draw from './draw.js'
/**
* Устанавливает размеры и положение зон для отрисовки
* @param {Object} canvas
* @param {Bool} landscape_orientation текущая ориентация игры
* @param {Image} logoImage логотип
* @return {Object} список зон
*/
export function setAreas(canvas, landscape_orientation, logoImage) {
let areasArray = null;

View File

@ -1,5 +1,11 @@
// функции обработки кнопок
/**
* Возвращает
* @param {Object} canvas canvas с которого считывается позиция курсора
* @param {Event} event
* @return {Object} координаты X, Y положения курсора на canvas
*/
export function getMousePos(canvas, event) {
let rect = canvas.getBoundingClientRect();
@ -9,6 +15,12 @@ export function getMousePos(canvas, event) {
};
}
/**
* Проверяет положение курсора в области объекта
* @param {Object} mousePos { x:, y: } курсора мыши
* @param {Object} rect квадратная область
* @return {Bool}
*/
export function isInside(mousePos, rect) {
return mousePos.x > rect.x && mousePos.x < rect.x + rect.w && mousePos.y < rect.y + rect.h && mousePos.y > rect.y;
}

View File

@ -1,5 +1,9 @@
// функции рисоввания
/**
* @param {Object} canvas canvas object
* @param {String} color строка с цветом (HEX, либо имя, либо rgba, etc)
*/
export function clearContext(canvas, color) {
let cW = canvas.width;
let cH = canvas.height;
@ -41,10 +45,22 @@ export function placeImage(canvas, area, imageFile, colors) {
}
}
/**
* Возвращает X координату для центрировки объекта
* @param {Integer} canvasWidth
* @param {Integer} objectWidth
* @return {Integer} X координата
*/
export function getCenterH(canvasWidth, objectWidth) {
return canvasWidth / 2 - objectWidth / 2;
}
/**
* Возвращает Y координату для центрировки объекта
* @param {Integer} canvasHeight
* @param {Integer} objectHeight
* @return {Integer} Y координата
*/
export function getCenterV(canvasHeight, objectHeight) {
return canvasHeight / 2 - objectHeight / 2;
}
@ -74,6 +90,13 @@ export function drawInfo(canvas, landscape_orientation) {
// }
}
/**
* Рисует полосу прогресса с визуализацией правильных и неправильных ответов
* @param {} context
* @param {Object} area зона в которой будет отрисовываться объект
* @param {Object} colors объект цветов
* @param {Object} questions объект вопросов
*/
export function drawProgressBar(context, area, colors, questions) {
let sizeProgressItem = area.w / questions.length;

View File

@ -1,5 +1,11 @@
import config from './config.json';
/**
* Функция, которая загружает изображения в документ
* и по завершению выполнятся callback() функция
* @param {Array} images массив с именами файлов
* @param {Function} callback callback() функция
*/
export function imagePreloader(images, callback) {
let counter = 0;
@ -15,9 +21,11 @@ export function imagePreloader(images, callback) {
}
}
/**
* Функция случайным образом перемешивает массив
* @param {Array} array массив, элементы которого будут перемешаны
*/
export function shuffle(array) {
// ф
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
@ -28,7 +36,7 @@ export function shuffle(array) {
/**
* Функция возвращает ориентацию игры в зависимости от размера canvas
* @param {Object} canvas canvas object
* @return {Bool} landscape_orientation
* @return {Bool} значение, которое присвается landscape_orientation в index.js
*/
export function setOrientation(canvas) {
let landscape_orientation = null;

View File

@ -2,6 +2,11 @@
import { shuffle } from './engine.js';
/**
* Проверяет правильность ответа на вопрос и устанавливает статус ответа в верно/неверно
* @param {Object} quest объект вопроса с вариантами ответа и правильным вариантом
* @param {String} answer
*/
export function checkAnswer(quest, answer) {
if (Array.isArray(quest.rightAnswer)) {
let lowerCaseArray = [];
@ -24,6 +29,11 @@ export function checkAnswer(quest, answer) {
}
}
/**
* При выполнении перемешивает вопросы и варианты ответов и запускает игру сначала
* @param {Object} game объект игрового процесса
* @param {Object} quests объект с вопросами
*/
export function restartGame(game, quests) {
// shuffle quests and answers order
shuffle(quests);

View File

@ -44,8 +44,7 @@ window.onload = function() {
images.logo = imageLogo;
let loadingImages = [];
loadingImages.push(gameData.result.notPassed);
loadingImages.push(gameData.result.passed);
loadingImages.push(gameData.result.notPassed, gameData.result.passed);
for (const [key, value] of Object.entries(gameData.questions)) {
loadingImages.push(value.image);

View File

@ -1,3 +1,8 @@
/**
* Воспроизводит фоновую музыку
* @param {Object} config объект с параметрами движка
* @param {AudioContext} music
*/
export function playMusic(config, music) {
let request = new XMLHttpRequest();