'use strict'; /* Centrale configuratie voor het spel */ const CONSTANTS = { COLS: 10, // breedte van het bord ROWS: 20, // hoogte van het bord CELL: 30, // pixelgrootte van een cel op het bord PREVIEW_CELL: 18, // pixelgrootte van een cel in de previews PREVIEW_COUNT: 3, // aantal zichtbare volgende blokken COLORS: { I: '#00e5f0', O: '#f7d000', T: '#b14ce0', S: '#35d23d', Z: '#f03c3c', J: '#3c6cf0', L: '#f09a20' }, SCORE: { SINGLE: 100, // 1 rij DOUBLE: 300, // 2 rijen TRIPLE: 500, // 3 rijen TETRIS: 800, // 4 rijen SOFT_DROP: 1, // punt per cel bij zachte drop HARD_DROP: 2, // punten per cel bij harde drop LINES_PER_LEVEL: 10 // aantal rijen nodig voor een nieuw level }, GRAVITY: [800, 720, 630, 550, 470, 380, 300, 220, 160, 100, 80, 70, 60, 50, 40, 30, 20, 15, 10, 10], // ms per zetje per level HIGHSCORE_KEY: 'neo-tetris.highscores', PLAYER_NAME_KEY: 'neo-tetris.playername', MAX_HIGHSCORES: 10 }; /* Punten per aantal tegelijk gewiste rijen (index = aantal rijen) */ const SCORE_POINTS = [0, 100, 300, 500, 800]; /* Definitie van de 7 tetromino's als matrices (1 = gevuld blokje) */ const SHAPES = { I: [ [0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0], [0, 0, 0, 0] ], O: [ [1, 1], [1, 1] ], T: [ [0, 1, 0], [1, 1, 1], [0, 0, 0] ], S: [ [0, 1, 1], [1, 1, 0], [0, 0, 0] ], Z: [ [1, 1, 0], [0, 1, 1], [0, 0, 0] ], J: [ [1, 0, 0], [1, 1, 1], [0, 0, 0] ], L: [ [0, 0, 1], [1, 1, 1], [0, 0, 0] ] }; const PIECE_TYPES = Object.keys(SHAPES); /* Eenvoudige wall-kicks die proberen een blokje langs obstakels te schuiven bij rotatie */ const WALL_KICKS = [ [ 0, 0], [-1, 0], [ 1, 0], [ 0, -1], [-2, 0], [ 2, 0] ];