42 lines
1.1 KiB
JavaScript
42 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;
|
||
}
|
||
};
|