diff --git a/4.1/игра.html b/4.1/игра.html
index da16f3d..3eaef90 100644
--- a/4.1/игра.html
+++ b/4.1/игра.html
@@ -27,6 +27,7 @@
+
diff --git a/4.1/игра/075.Анимация.js b/4.1/игра/075.Анимация.js
new file mode 100644
index 0000000..22fdfad
--- /dev/null
+++ b/4.1/игра/075.Анимация.js
@@ -0,0 +1,68 @@
+ //let параметры = анимации.задано[анимация];
+function Анимация(элемент, параметры)
+{
+ this.запустить = function()
+ {
+ let п = параметры;
+ let воспроизведений = Number(п["воспроизведений"]);
+ let скорость = Number(п["скорость"]);
+ let к0 = Number(п["кадр.0"]);
+ let к1 = Number(п["кадр.1"]);
+ let д0 = Number(п["диапазон.0"]);
+ let д1 = Number(п["диапазон.1"]);
+ let д2 = Number(п["диапазон.2"]);
+ let д3 = Number(п["диапазон.3"]);
+
+ if (
+ воспроизведений == null ||
+ скорость == null ||
+ к0 == null ||
+ к1 == null ||
+ д0 == null ||
+ д1 == null ||
+ д2 == null ||
+ д3 == null
+ ) {
+ return;
+ }
+
+ let ширинаДиапазона = Math.abs(д2 - д0);
+ let высотаДиапазона = Math.abs(д3 - д1);
+ let ширинаКадра = Math.abs(к0);
+ let высотаКадра = Math.abs(к1);
+ let кадровПоГоризонтали = Math.floor(ширинаДиапазона / ширинаКадра);
+ let кадровПоВертикали = Math.floor(высотаДиапазона / высотаКадра);
+
+ this.номерКадра = 0;
+ this.размерКадра = [к0, к1];
+ this.поГоризонтаи = кадровПоГоризонтали > кадровПоВертикали;
+ this.колвоКадров = this.поГоризонтали ? кадровПоГоризонтали : кадровПоВертикали;
+ // Возможно, в будущем стоит заменить частные таймеры на один общий.
+ // Вдруг в браузерах есть ограничение на количество таймеров от одной страницы.
+ this.таймер = setInterval(() => { this.анимировать(); }, скорость);
+ };
+
+ this.остановить = function()
+ {
+ if (this.таймер)
+ {
+ clearInterval(this.таймер);
+ }
+ };
+
+ this.анимировать = function()
+ {
+ this.номерКадра += 1;
+ if (this.номерКадра >= this.колвоКадров)
+ {
+ this.номерКадра = 0;
+ }
+ let x = this.поГоризонтали ? this.номерКадра * this.размерКадра[0] : 0;
+ let y = this.поГоризонтали ? 0 : this.номерКадра * this.размерКадра[1];
+
+ элемент.style.backgroundPosition = `${x}px ${y}px`;
+ };
+
+ // Конструктор.
+ this.запустить();
+}
diff --git a/4.1/игра/080.Анимации.js b/4.1/игра/080.Анимации.js
index 5788953..18826f9 100644
--- a/4.1/игра/080.Анимации.js
+++ b/4.1/игра/080.Анимации.js
@@ -3,6 +3,7 @@ function Анимации(события)
this.создать = function()
{
this.задано = {};
+ this.анимации = {};
};
this.обработатьКлюч = function(ключ, путь, значение)