160 lines
3.6 KiB
JavaScript

function getGame() {
return {
board: [],
currentPiece: getRandomPiece(),
nextPiece: getRandomPiece(),
score: 0,
level: 1,
speed: 1000,
lines: 0,
linesCleared: 0,
paused: false,
gameOver: false
}
}
function getColor(r, g, b) {
return {
red: r,
green: g,
blue: b
}
}
function getSquare(xPos, yPos, c) {
return {
color: c,
x: xPos,
y: yPos
}
}
function getBarPiece() {
return {
squares: [
getSquare(3, 0, getColor(240, 87, 84)),
getSquare(4, 0, getColor(240, 87, 84)),
getSquare(5, 0, getColor(240, 87, 84)),
getSquare(6, 0, getColor(240, 87, 84))
],
xCenter: 4.5,
yCenter: 0.5
}
}
function getLPiece() {
return {
squares: [
getSquare(3, 1, getColor(254, 223, 92)),
getSquare(4, 1, getColor(254, 223, 92)),
getSquare(5, 1, getColor(254, 223, 92)),
getSquare(5, 0, getColor(254, 223, 92))
],
xCenter: 4,
yCenter: 1
}
}
function getJPiece() {
return {
squares: [
getSquare(3, 1, getColor(27, 148, 118)),
getSquare(4, 1, getColor(27, 148, 118)),
getSquare(5, 1, getColor(27, 148, 118)),
getSquare(3, 0, getColor(27, 148, 118))
],
xCenter: 4,
yCenter: 1
}
}
function getTPiece() {
return {
squares: [
getSquare(3, 1, getColor(36, 115, 155)),
getSquare(4, 1, getColor(36, 115, 155)),
getSquare(5, 1, getColor(36, 115, 155)),
getSquare(4, 0, getColor(36, 115, 155))
],
xCenter: 4,
yCenter: 1
}
}
function getZPiece() {
return {
squares: [
getSquare(3, 1, getColor(106, 190, 178)),
getSquare(4, 1, getColor(106, 190, 178)),
getSquare(4, 0, getColor(106, 190, 178)),
getSquare(5, 0, getColor(106, 190, 178))
],
xCenter: 4,
yCenter: 1
}
}
function getSPiece() {
return {
squares: [
getSquare(3, 0, getColor(164, 199, 218)),
getSquare(4, 0, getColor(164, 199, 218)),
getSquare(4, 1, getColor(164, 199, 218)),
getSquare(5, 1, getColor(164, 199, 218))
],
xCenter: 4,
yCenter: 1
}
}
function getSquarePiece() {
return {
squares: [
getSquare(3, 0, getColor(177, 225, 218)),
getSquare(4, 0, getColor(177, 225, 218)),
getSquare(3, 1, getColor(177, 225, 218)),
getSquare(4, 1, getColor(177, 225, 218))
],
xCenter: 3.5,
yCenter: 0.5
}
}
function getPiece(type) {
switch (type) {
case 'bar':
return getBarPiece();
case 'L':
return getLPiece();
case 'J':
return getJPiece();
case 'T':
return getTPiece();
case 'Z':
return getZPiece();
case 'S':
return getSPiece();
case 'square':
return getSquarePiece();
}
}
function getRandomPiece() {
const pieces = ['bar', 'L', 'J', 'T', 'Z', 'S', 'square'];
const randomIndex = Math.floor(Math.random() * pieces.length);
return getPiece(pieces[randomIndex]);
}
function clonePiece(piece) {
let newSquares = piece.squares.map(square => ({
color: { ...square.color },
x: square.x,
y: square.y
}));
return {
squares: newSquares,
xCenter: piece.xCenter,
yCenter: piece.yCenter
};
}