43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
JavaScript
|
// © Головин Г.Г., Набор фигур, 2023
|
|||
|
'use strict';
|
|||
|
// фигуры тетрамино
|
|||
|
const FIGURE=[
|
|||
|
[[1,1],[1,0],[1,0]],
|
|||
|
[[2,2],[0,2],[0,2]],
|
|||
|
[[0,3],[3,3],[3,0]],
|
|||
|
[[4,0],[4,4],[0,4]],
|
|||
|
[[5,5],[5,5]],
|
|||
|
[[6],[6],[6],[6]],
|
|||
|
[[7,0],[7,7],[7,0]]];
|
|||
|
// полный набор фигур
|
|||
|
FIGURE.set = function() {
|
|||
|
let set = [];
|
|||
|
for (let i=0; i<FIGURE.length; i++)
|
|||
|
set.push(new Figure(i));
|
|||
|
return set;
|
|||
|
}
|
|||
|
// класс-фабрика для фигур
|
|||
|
class Figure {
|
|||
|
// создать новый объект
|
|||
|
constructor(num) {
|
|||
|
// num - номер в диапазоне [0..6]
|
|||
|
if (num<0||num>6) return undefined;
|
|||
|
this.type=num+1;
|
|||
|
this.shape=FIGURE[num];
|
|||
|
}
|
|||
|
// копия текущего объекта
|
|||
|
clone() {
|
|||
|
return new Figure(this.type-1);
|
|||
|
}
|
|||
|
// поворот по часовой стрелке
|
|||
|
rotate() {
|
|||
|
let nShape = [], shape = this.shape;
|
|||
|
for (let y = 0; y < shape.length; y++)
|
|||
|
for (let x = 0; x < shape[y].length; x++) {
|
|||
|
if (nShape[x]==undefined) nShape[x] = [];
|
|||
|
nShape[x][shape.length-y-1] = shape[y][x];
|
|||
|
}
|
|||
|
this.shape=nShape;
|
|||
|
}
|
|||
|
};
|