script
This commit is contained in:
parent
6a012da958
commit
f058e4045e
189
2048.js
189
2048.js
@ -0,0 +1,189 @@
|
||||
var board;
|
||||
var score = 0;
|
||||
var rows = 4;
|
||||
var columns = 4;
|
||||
|
||||
window.onload = function() {
|
||||
setGame();
|
||||
}
|
||||
|
||||
function setGame() {
|
||||
// board = [
|
||||
// [2, 2, 2, 2],
|
||||
// [2, 2, 2, 2],
|
||||
// [4, 4, 8, 8],
|
||||
// [4, 4, 8, 8]
|
||||
// ];
|
||||
|
||||
board = [
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 0, 0]
|
||||
]
|
||||
|
||||
for (let r = 0; r < rows; r++) {
|
||||
for (let c = 0; c < columns; c++) {
|
||||
let tile = document.createElement("div");
|
||||
tile.id = r.toString() + "-" + c.toString();
|
||||
let num = board[r][c];
|
||||
updateTile(tile, num);
|
||||
document.getElementById("board").append(tile);
|
||||
}
|
||||
}
|
||||
//create 2 to begin the game
|
||||
setTwo();
|
||||
setTwo();
|
||||
|
||||
}
|
||||
|
||||
function updateTile(tile, num) {
|
||||
tile.innerText = "";
|
||||
tile.classList.value = ""; //clear the classList
|
||||
tile.classList.add("tile");
|
||||
if (num > 0) {
|
||||
tile.innerText = num.toString();
|
||||
if (num <= 4096) {
|
||||
tile.classList.add("x"+num.toString());
|
||||
} else {
|
||||
tile.classList.add("x8192");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('keyup', (e) => {
|
||||
if (e.code == "ArrowLeft") {
|
||||
slideLeft();
|
||||
setTwo();
|
||||
}
|
||||
else if (e.code == "ArrowRight") {
|
||||
slideRight();
|
||||
setTwo();
|
||||
}
|
||||
else if (e.code == "ArrowUp") {
|
||||
slideUp();
|
||||
setTwo();
|
||||
|
||||
}
|
||||
else if (e.code == "ArrowDown") {
|
||||
slideDown();
|
||||
setTwo();
|
||||
}
|
||||
document.getElementById("score").innerText = score;
|
||||
})
|
||||
|
||||
function filterZero(row){
|
||||
return row.filter(num => num != 0); //create new array of all nums != 0
|
||||
}
|
||||
|
||||
function slide(row) {
|
||||
//[0, 2, 2, 2]
|
||||
row = filterZero(row); //[2, 2, 2]
|
||||
for (let i = 0; i < row.length-1; i++){
|
||||
if (row[i] == row[i+1]) {
|
||||
row[i] *= 2;
|
||||
row[i+1] = 0;
|
||||
score += row[i];
|
||||
}
|
||||
} //[4, 0, 2]
|
||||
row = filterZero(row); //[4, 2]
|
||||
//add zeroes
|
||||
while (row.length < columns) {
|
||||
row.push(0);
|
||||
} //[4, 2, 0, 0]
|
||||
return row;
|
||||
}
|
||||
|
||||
function slideLeft() {
|
||||
for (let r = 0; r < rows; r++) {
|
||||
let row = board[r];
|
||||
row = slide(row);
|
||||
board[r] = row;
|
||||
for (let c = 0; c < columns; c++){
|
||||
let tile = document.getElementById(r.toString() + "-" + c.toString());
|
||||
let num = board[r][c];
|
||||
updateTile(tile, num);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function slideRight() {
|
||||
for (let r = 0; r < rows; r++) {
|
||||
let row = board[r]; //[0, 2, 2, 2]
|
||||
row.reverse(); //[2, 2, 2, 0]
|
||||
row = slide(row) //[4, 2, 0, 0]
|
||||
board[r] = row.reverse(); //[0, 0, 2, 4];
|
||||
for (let c = 0; c < columns; c++){
|
||||
let tile = document.getElementById(r.toString() + "-" + c.toString());
|
||||
let num = board[r][c];
|
||||
updateTile(tile, num);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function slideUp() {
|
||||
for (let c = 0; c < columns; c++) {
|
||||
let row = [board[0][c], board[1][c], board[2][c], board[3][c]];
|
||||
row = slide(row);
|
||||
// board[0][c] = row[0];
|
||||
// board[1][c] = row[1];
|
||||
// board[2][c] = row[2];
|
||||
// board[3][c] = row[3];
|
||||
for (let r = 0; r < rows; r++){
|
||||
board[r][c] = row[r];
|
||||
let tile = document.getElementById(r.toString() + "-" + c.toString());
|
||||
let num = board[r][c];
|
||||
updateTile(tile, num);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function slideDown() {
|
||||
for (let c = 0; c < columns; c++) {
|
||||
let row = [board[0][c], board[1][c], board[2][c], board[3][c]];
|
||||
row.reverse();
|
||||
row = slide(row);
|
||||
row.reverse();
|
||||
// board[0][c] = row[0];
|
||||
// board[1][c] = row[1];
|
||||
// board[2][c] = row[2];
|
||||
// board[3][c] = row[3];
|
||||
for (let r = 0; r < rows; r++){
|
||||
board[r][c] = row[r];
|
||||
let tile = document.getElementById(r.toString() + "-" + c.toString());
|
||||
let num = board[r][c];
|
||||
updateTile(tile, num);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setTwo() {
|
||||
if (!hasEmptyTile()) {
|
||||
return;
|
||||
}
|
||||
let found = false;
|
||||
while (!found) {
|
||||
//find random row and column to place a 2 in
|
||||
let r = Math.floor(Math.random() * rows);
|
||||
let c = Math.floor(Math.random() * columns);
|
||||
if (board[r][c] == 0) {
|
||||
board[r][c] = 2;
|
||||
let tile = document.getElementById(r.toString() + "-" + c.toString());
|
||||
tile.innerText = "2";
|
||||
tile.classList.add("x2");
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function hasEmptyTile() {
|
||||
let count = 0;
|
||||
for (let r = 0; r < rows; r++) {
|
||||
for (let c = 0; c < columns; c++) {
|
||||
if (board[r][c] == 0) { //at least one zero in the board
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user