From fffcaf42579987a023974491098efaaeadb55c98 Mon Sep 17 00:00:00 2001 From: Markcosay <76439807+Markcosay@users.noreply.github.com> Date: Wed, 24 Jul 2024 00:47:10 +0530 Subject: [PATCH 1/7] Create readme.md Adding readme to sand tetris game --- Games/sand_tetris/readme.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Games/sand_tetris/readme.md diff --git a/Games/sand_tetris/readme.md b/Games/sand_tetris/readme.md new file mode 100644 index 0000000000..8178c76d62 --- /dev/null +++ b/Games/sand_tetris/readme.md @@ -0,0 +1 @@ +readme From 4cdccbf7daf103b72d407a576f2f4036bf9bc5ef Mon Sep 17 00:00:00 2001 From: Markcosay <76439807+Markcosay@users.noreply.github.com> Date: Wed, 24 Jul 2024 00:47:52 +0530 Subject: [PATCH 2/7] Add files via upload --- Games/sand_tetris/handleinput.js | 45 +++ Games/sand_tetris/index.html | 129 ++++++++ Games/sand_tetris/logo.png | Bin 0 -> 7430 bytes Games/sand_tetris/piece.js | 258 ++++++++++++++++ Games/sand_tetris/playfield.js | 125 ++++++++ Games/sand_tetris/script.js | 508 +++++++++++++++++++++++++++++++ Games/sand_tetris/style.css | 10 + 7 files changed, 1075 insertions(+) create mode 100644 Games/sand_tetris/handleinput.js create mode 100644 Games/sand_tetris/index.html create mode 100644 Games/sand_tetris/logo.png create mode 100644 Games/sand_tetris/piece.js create mode 100644 Games/sand_tetris/playfield.js create mode 100644 Games/sand_tetris/script.js create mode 100644 Games/sand_tetris/style.css diff --git a/Games/sand_tetris/handleinput.js b/Games/sand_tetris/handleinput.js new file mode 100644 index 0000000000..a70a290075 --- /dev/null +++ b/Games/sand_tetris/handleinput.js @@ -0,0 +1,45 @@ +// Left Arrow Key: 37 +// Up Arrow Key: 38 +// Right Arrow Key: 39 +// Down Arrow Key: 40 + +document.addEventListener('keydown', event => { + if ([32, 37, 38, 39, 40].includes(event.keyCode)) { + event.preventDefault(); + } + switch (event.keyCode) { + + // Down arrow + case 40: + fallingPiece.moveDown(); + if (!playfield.isValid(fallingPiece)) + fallingPiece.moveUp() + else + fallingPiece.resetBuffer() + break; + // Top arrow + case 38: + fallingPiece.rotateCW(); + + // if not valid, rotate back + if (!playfield.isValid(fallingPiece)) + fallingPiece.rotateCCW(); + + break; + + // Left arrow + case 37: + fallingPiece.moveLeft(); + if (!playfield.isValid(fallingPiece)) + fallingPiece.moveRight() + break; + + // Right Arrow + case 39: + fallingPiece.moveRight(); + if (!playfield.isValid(fallingPiece)) + fallingPiece.moveLeft() + break; + } + +}); \ No newline at end of file diff --git a/Games/sand_tetris/index.html b/Games/sand_tetris/index.html new file mode 100644 index 0000000000..2327c3f4d4 --- /dev/null +++ b/Games/sand_tetris/index.html @@ -0,0 +1,129 @@ + + + + + + + Sand Tetris Demo + + + + + + + + + + + +
+ + + + + +
+
+
+ + + + + + + + +
+
+ +
+ + + +
+
+
+ + +
+
+
+ +
+
+
+
+
+
+
Score: 0
+ + +
+
+ +
+
+
+ + + + + +
+
+
+ + +
+
+ +
+ + +
+
+ + +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + + + \ No newline at end of file diff --git a/Games/sand_tetris/logo.png b/Games/sand_tetris/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9d896615a82357e5dd42c9a8a3cb1d81bb48b2e2 GIT binary patch literal 7430 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 RnC*WmQJMxC`Dzy~{|~8U this.dropInterval + } + + resetBuffer() { + this.dropBuffer = 0; + } + + show() { + + // for each non-null cell in this piece, fill in + // the specified color and draw the rectangle + for (let row = 0; row < this.size; row++) { + for (let col = 0; col < this.size; col++) { + + if (this.cells[row][col]) { + let x = this.x + col; + let y = this.y + row; + + let cs = this.cellSize; + let off = this.offset; + + // fill(this.cells[row][col]) + stroke(this.cells[row][col]) + fill(this.cells[row][col]) + + rect(off + cs * x, off + cs * y, cs - 1, cs - 1); + } + + } + } + + } + + moveDown() { + this.y++; + } + moveRight() { + this.x++; + } + moveLeft() { + this.x--; + } + moveUp() { + this.y--; + } + + + // Rotate functions + rotateCW() { + let newCells = []; + + for (let col = 0; col < this.size; col++) { + + let newRow = []; + for (let row = this.size - 1; row >= 0; row--) { + newRow.push(this.cells[row][col]); + } + newCells.push(newRow); + + } + this.cells = newCells; + } + + rotateCCW() { + let newCells = []; + for (let col = this.size - 1; col >= 0; col--) { + + let newRow = []; + for (let row = 0; row < this.size; row++) { + newRow.push(this.cells[row][col]); + } + newCells.push(newRow); + + } + this.cells = newCells; + } + +} + +let types = { + + O: [ + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + + ], + + + J: [ + ['#f43', '#f43', '#f43', '#f43', null, null, null, null, null, null, null, null], + ['#f43', '#f43', '#f43', '#f43', null, null, null, null, null, null, null, null], + ['#f43', '#f43', '#f43', '#f43', null, null, null, null, null, null, null, null], + ['#f43', '#f43', '#f43', '#f43', null, null, null, null, null, null, null, null], + + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + + ], + + + L: [ + [null, null, null, null, null, null, null, null, '#f43', '#f43', '#f43', '#f43'], + [null, null, null, null, null, null, null, null, '#f43', '#f43', '#f43', '#f43'], + [null, null, null, null, null, null, null, null, '#f43', '#f43', '#f43', '#f43'], + [null, null, null, null, null, null, null, null, '#f43', '#f43', '#f43', '#f43'], + + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + ], + + + S: [ + [null, null, null, null, '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + [null, null, null, null, '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + [null, null, null, null, '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + [null, null, null, null, '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', null, null, null, null], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', null, null, null, null], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', null, null, null, null], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', null, null, null, null], + + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + ], + + + Z: [ + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', null, null, null, null], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', null, null, null, null], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', null, null, null, null], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', null, null, null, null], + + [null, null, null, null, '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + [null, null, null, null, '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + [null, null, null, null, '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + [null, null, null, null, '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + ], + + + T: [ + [null, null, null, null, '#f43', '#f43', '#f43', '#f43', null, null, null, null], + [null, null, null, null, '#f43', '#f43', '#f43', '#f43', null, null, null, null], + [null, null, null, null, '#f43', '#f43', '#f43', '#f43', null, null, null, null], + [null, null, null, null, '#f43', '#f43', '#f43', '#f43', null, null, null, null], + + + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + + + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + ], + + + I: [ + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + + + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + ['#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43', '#f43'], + + + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + [null, null, null, null, null, null, null, null, null, null, null, null], + + + ] + +} + + +function replaceStringIn2DArray(arr, textToReplace, replacementText) { + const replacedArray = arr.map(row => { + return row.map(item => { + if (item === textToReplace) { + return replacementText; + } + return item; + }); + }); + return replacedArray; +} + + diff --git a/Games/sand_tetris/playfield.js b/Games/sand_tetris/playfield.js new file mode 100644 index 0000000000..daaca85230 --- /dev/null +++ b/Games/sand_tetris/playfield.js @@ -0,0 +1,125 @@ +class Playfield { + + constructor(w, h) { + // colors + // this.foreground = [230]; + this.foreground = 230; + this.background = [255]; + + // dimensions and grid + this.cols = w; + this.rows = h; + this.grid = []; + this.resetGrid(); + + // drawing sizes + const canvasContainer = select('#canvasBox'); + this.cellSize = canvasContainer.width / w + this.borderSize = 2; + + // whether or not gridlines are seen + this.gridlines = false; + } + + addToGrid(piece) { + for (let row = 0; row < piece.size; row++) { + for (let col = 0; col < piece.size; col++) { + + if (piece.cells[row][col] != null) { + let gridRow = piece.y + row; + let gridCol = piece.x + col; + + this.grid[gridRow][gridCol] = + piece.cells[row][col]; + } + + } + } + + } + + + clearLines() { + + linetest() + } + + isValid(piece) { + + for (let row = 0; row < piece.size; row++) { + for (let col = 0; col < piece.size; col++) { + + if (piece.cells[row][col] != null) { + + let gridRow = piece.y + row; + let gridCol = piece.x + col; + + if (gridRow < 0 || gridRow >= this.rows || + gridCol < 0 || gridCol >= this.cols || + this.grid[gridRow][gridCol] != this.foreground) + return false; + } + + } + } + + return true; + + } + + resetGrid() { + // console.log("reset grid called!") + for (let i = 0; i < this.rows; i++) { + this.grid[i] = new Array(this.cols).fill(this.foreground); + } + } + + + show() { + // Draw the rectangle behind all the cells + // for the border and gridlines + + + let bs = this.borderSize + let cs = this.cellSize + + if (this.gridlines) fill(this.background); + else fill(this.foreground); + + stroke(this.background) + strokeWeight(bs); + + // offset the rectangle so that + // top and right borders stay in canvas + let offset = floor(bs / 2) + rect(offset, offset, cs * this.cols + bs - 1, cs * this.rows + bs - 1) + + + //=========================== + // Draw cells over the big rectangle + //=========================== + + for (let row = 0; row < this.grid.length; row++) { + for (let col = 0; col < this.grid[row].length; col++) { + + // offset the cells by the size of the border + let offset = this.borderSize; + + let cs = this.cellSize; + + // this.grid contains the colors of each cell + stroke(this.grid[row][col]) + fill(this.grid[row][col]); + + // noStroke(); + rect(cs * col + offset, cs * row + offset, cs - 1, cs - 1); + } + } + + } // end of show() + + +} + + + diff --git a/Games/sand_tetris/script.js b/Games/sand_tetris/script.js new file mode 100644 index 0000000000..5f0a0076df --- /dev/null +++ b/Games/sand_tetris/script.js @@ -0,0 +1,508 @@ +let playfield +let fallingPiece +let paused = false +const width = 40 +const height = 80 +// to calculate delta time +let prev = 0; +let score = 0 + +let difficulty = "Intermediate"; +let totalWidth +let totalHeight + +// mobile touch debounce +let lastTouchTime = 0; +const debounceDelay = 100; // Adjust the debounce delay as needed + + +let scoreui = document.getElementById("scoreui") +let scrshotbtn = document.getElementById("scrshotbtn") +let pausebtn = document.getElementById("pausebtn") +let resetbtn = document.getElementById("resetbtn") +const radioInputs = document.getElementsByName("difficultyradio"); + + + + +pausebtn.addEventListener("click", e => { + paused = !paused + pausebtn.innerHTML = paused ? ` Play` : ` Pause`; +}) + +resetbtn.addEventListener("click", e => { + spawnNewPiece(); + playfield.resetGrid(); + score = 0 + // update score ui + scoreui.innerText = score + +}) + +scrshotbtn.addEventListener("click", e => { + saveCanvas('screenshot', 'png'); // Save as PNG file +}) + +radioInputs.forEach(input => { + input.addEventListener("change", function () { + if (input.checked) { + if (input.id === "difficultyradio1") { + difficulty = "Intermediate"; + } else if (input.id === "difficultyradio2") { + difficulty = "Expert"; + } + // You can add more conditions for other difficulty levels if needed + } + }); +}); + + + + +function setup() { + playfield = new Playfield(width, height); + + totalWidth = playfield.cellSize * width + playfield.borderSize * 2; + totalHeight = playfield.cellSize * height + playfield.borderSize * 2; + // frameRate(10) + const canvas = createCanvas(totalWidth, totalHeight); + canvas.parent('canvasBox'); + + spawnNewPiece(); +} + + +function draw() { + + // Handle touch events + for (let i = 0; i < touches.length; i++) { + let touchX = touches[i].x; + let touchY = touches[i].y; + + // Calculate the time since the last touch event + const currentTime = millis(); + const timeSinceLastTouch = currentTime - lastTouchTime; + + if (timeSinceLastTouch > debounceDelay) { + if (touchY < totalHeight / 4) { + // Top side touch: + fallingPiece.rotateCW(); + + // if not valid, rotate back + if (!playfield.isValid(fallingPiece)) + fallingPiece.rotateCCW(); + + } + } + // Update the last touch time + lastTouchTime = currentTime; + + // Check if the touch event occurred in the left, right, up, or down area + if (touchX < totalWidth / 4) { + // Left side touch: Move left + fallingPiece.moveLeft(); + if (!playfield.isValid(fallingPiece)) + fallingPiece.moveRight() + + + } else if (touchX > (totalWidth / 4) * 3) { + // Right side touch: Move right + fallingPiece.moveRight(); + if (!playfield.isValid(fallingPiece)) + fallingPiece.moveLeft() + + + } else if (touchY > (totalHeight / 4) * 3) { + // Bottom side touch: Move down + fallingPiece.moveDown(); + if (!playfield.isValid(fallingPiece)) + fallingPiece.moveUp() + else + fallingPiece.resetBuffer() + } + } + + // Get time passed since last frame + let curr = millis(); + let delta = curr - prev; + prev = curr; + + // Update + + if (!paused) { + fallingPiece.update(delta); + } + + + // move down piece and spawn a new one + // if necessary + if (fallingPiece.timeToFall()) { + fallingPiece.resetBuffer(); + fallingPiece.moveDown(); + + if (!playfield.isValid(fallingPiece)) { + // console.log("not valid") + fallingPiece.moveUp(); + spawnNewPiece(); + } + } + playfield.clearLines(); + + + // Draw + background(251); + automatonRules(playfield.grid) + playfield.show(); + fallingPiece.show(); +} + + +function spawnNewPiece() { + if (fallingPiece) { + playfield.addToGrid(fallingPiece); + // console.log("added to grid") + } + + const pieces = ['O', 'J', 'L', 'S', 'Z', 'T', 'I']; + const choice = random(pieces); + fallingPiece = new Piece(choice, playfield); + redraw(); + +} + + + + + +function automatonRules(grid) { + + + let case0 = 230 + let case1 = '#f43' + + + + + for (let i = height - 2; i >= 0; i--) { + for (let j = 0; j < width; j++) { + // Extract values of the 2x2 block clockwise from the top-left cell + + + let topleftcolor + let toprightcolor + let bottomrightcolor + let bottomleftcolor + + let topLeft + if (isInArray(tetrisColors, grid[i][j])) { + topLeft = 1 + topleftcolor = grid[i][j] + } else if (grid[i][j] == case0) { + topLeft = 0 + } + + let topRight + if (isInArray(tetrisColors, grid[i][j + 1])) { + topRight = 1 + toprightcolor = grid[i][j + 1] + } else if (grid[i][j + 1] == case0) { + topRight = 0 + } + + + let bottomRight + if (isInArray(tetrisColors, grid[i + 1][j + 1])) { + bottomRight = 1 + bottomrightcolor = grid[i + 1][j + 1] + + } else if (grid[i + 1][j + 1] == case0) { + bottomRight = 0 + } + + let bottomLeft + if (isInArray(tetrisColors, grid[i + 1][j])) { + bottomLeft = 1 + bottomleftcolor = grid[i + 1][j] + } else if (grid[i + 1][j] == case0) { + bottomLeft = 0 + } + + + // Create an array to represent the 2x2 block + let block = [topLeft, topRight, bottomRight, bottomLeft]; + + // Define rules for each possible block state + + if (arraysEqual(block, [0, 0, 0, 0])) { + // case 1 + grid[i][j] = case0; + grid[i][j + 1] = case0; + grid[i + 1][j + 1] = case0; + grid[i + 1][j] = case0; + } else if (arraysEqual(block, [0, 0, 1, 0])) { + // case 2 + grid[i][j] = case0; + grid[i][j + 1] = case0; + grid[i + 1][j + 1] = bottomrightcolor + grid[i + 1][j] = case0; + } else if (arraysEqual(block, [0, 0, 0, 1])) { + // case 3 + grid[i][j] = case0; + grid[i][j + 1] = case0; + grid[i + 1][j + 1] = case0; + grid[i + 1][j] = bottomleftcolor + } else if (arraysEqual(block, [0, 0, 1, 1])) { + // case 4 + grid[i][j] = case0; + grid[i][j + 1] = case0; + grid[i + 1][j + 1] = bottomrightcolor + grid[i + 1][j] = bottomleftcolor + } else if (arraysEqual(block, [0, 1, 0, 0])) { + // case 5 + grid[i][j] = case0; + grid[i][j + 1] = case0; + grid[i + 1][j + 1] = toprightcolor; + grid[i + 1][j] = case0; + } else if (arraysEqual(block, [0, 1, 1, 0])) { + // case 6 + grid[i][j] = case0; + grid[i][j + 1] = case0; + grid[i + 1][j + 1] = toprightcolor; + grid[i + 1][j] = bottomrightcolor + } else if (arraysEqual(block, [0, 1, 0, 1])) { + // case 7 + grid[i][j] = case0; + grid[i][j + 1] = case0; + grid[i + 1][j + 1] = toprightcolor + grid[i + 1][j] = bottomleftcolor + } else if (arraysEqual(block, [0, 1, 1, 1])) { + // case 8 + grid[i][j] = case0; + grid[i][j + 1] = toprightcolor + grid[i + 1][j + 1] = bottomrightcolor + grid[i + 1][j] = bottomleftcolor + } else if (arraysEqual(block, [1, 0, 0, 0])) { + // case 9 + grid[i][j] = case0; + grid[i][j + 1] = case0; + grid[i + 1][j + 1] = case0; + grid[i + 1][j] = topleftcolor + } else if (arraysEqual(block, [1, 0, 1, 0])) { + // case 10 + grid[i][j] = case0; + grid[i][j + 1] = case0; + grid[i + 1][j + 1] = bottomrightcolor + grid[i + 1][j] = topleftcolor + } else if (arraysEqual(block, [1, 0, 0, 1])) { + // case 11 + grid[i][j] = case0; + grid[i][j + 1] = case0; + grid[i + 1][j + 1] = bottomleftcolor + grid[i + 1][j] = topleftcolor + } else if (arraysEqual(block, [1, 0, 1, 1])) { + // case 12 + grid[i][j] = topleftcolor + grid[i][j + 1] = case0; + grid[i + 1][j + 1] = bottomrightcolor + grid[i + 1][j] = bottomleftcolor; + } else if (arraysEqual(block, [1, 1, 0, 0])) { + // case 13 + grid[i][j] = case0; + grid[i][j + 1] = case0; + grid[i + 1][j + 1] = toprightcolor + grid[i + 1][j] = topleftcolor + } else if (arraysEqual(block, [1, 1, 1, 0])) { + // case 14 + grid[i][j] = case0; + grid[i][j + 1] = toprightcolor + grid[i + 1][j + 1] = bottomrightcolor + grid[i + 1][j] = topleftcolor + } else if (arraysEqual(block, [1, 1, 0, 1])) { + // case 15 + grid[i][j] = topleftcolor + grid[i][j + 1] = case0 + grid[i + 1][j + 1] = toprightcolor + grid[i + 1][j] = bottomleftcolor + } else if (arraysEqual(block, [1, 1, 1, 1])) { + // case 16 + grid[i][j] = topleftcolor + grid[i][j + 1] = toprightcolor + grid[i + 1][j + 1] = bottomrightcolor + grid[i + 1][j] = bottomleftcolor + } + + // Add more rules as needed + } + } +} + +function arraysEqual(arr1, arr2) { + if (arr1.length !== arr2.length) return false; + for (let i = 0; i < arr1.length; i++) { + if (arr1[i] !== arr2[i]) return false; + } + return true; +} + + + +function isInArray(arr, value) { + return arr.includes(value); +} + +const tetrisColors = [ + "#00FFFF", // Cyan + "#0000FF", // Blue + "#FFA500", // Orange + "#FFFF00", // Yellow + "#00FF00", // Green + "#800080", // Purple + "#FF0000" // Red +]; + + + + +function getLeftSideCells(grid) { + const leftSideCells = []; + const rows = grid.length; + + for (let row = 0; row < rows; row++) { + const value = grid[row][0]; // Get the value at the leftmost cell + if (value !== 230) { + // Check if the previous cell had the same color + const previousRow = leftSideCells[leftSideCells.length - 1]; + if (!previousRow || previousRow.color !== value) { + leftSideCells.push({ row, col: 0, color: value }); + } + } + } + + return leftSideCells; +} + +function findConnectedCells(grid, startRow, startCol) { + const rows = grid.length; + const cols = grid[0].length; + const targetValue = grid[startRow][startCol]; + + // Initialize a 2D array to track visited cells + const visited = new Array(rows).fill(false).map(() => new Array(cols).fill(false)); + + // Define the eight possible neighbor directions, including diagonals + const directions = [ + [-1, -1], [-1, 0], [-1, 1], + [0, -1], [0, 1], + [1, -1], [1, 0], [1, 1] + ]; + + // Helper function to perform depth-first search + function dfs(row, col, connectedCells) { + if (row < 0 || row >= rows || col < 0 || col >= cols || visited[row][col]) { + return; + } + + visited[row][col] = true; + + if (grid[row][col] === targetValue) { + connectedCells.push({ row, col }); + + // Check all neighbors, including diagonals + for (const [dx, dy] of directions) { + dfs(row + dx, col + dy, connectedCells); + } + } + } + + const connectedCells = []; + dfs(startRow, startCol, connectedCells); + + return connectedCells; +} + + + +// this function does not check diagonal neighboring cells + +function findConnectedCellsnodiagonal(grid, startRow, startCol) { + const rows = grid.length; + const cols = grid[0].length; + const targetValue = grid[startRow][startCol]; + + // Initialize a 2D array to track visited cells + const visited = new Array(rows).fill(false).map(() => new Array(cols).fill(false)); + + // Helper function to perform depth-first search + function dfs(row, col, connectedCells) { + if (row < 0 || row >= rows || col < 0 || col >= cols || visited[row][col]) { + return; + } + + visited[row][col] = true; + + if (grid[row][col] === targetValue) { + connectedCells.push({ row, col }); + + // Check all neighbors + dfs(row - 1, col, connectedCells); // Up + dfs(row + 1, col, connectedCells); // Down + dfs(row, col - 1, connectedCells); // Left + dfs(row, col + 1, connectedCells); // Right + } + } + + const connectedCells = []; + dfs(startRow, startCol, connectedCells); + + return connectedCells; +} + + + +function linetest() { + + + let uniqueleftcolors = getLeftSideCells(playfield.grid) + // console.log(uniqueleftcolors) + + for (let index = 0; index < uniqueleftcolors.length; index++) { + + + // get the cluster + let connectedcells + // console.log(connectedcells) + + if (difficulty == "Intermediate") { + connectedcells = findConnectedCells(playfield.grid, uniqueleftcolors[index].row, uniqueleftcolors[index].col) + } else if (difficulty == "Expert") { + connectedcells = findConnectedCellsnodiagonal(playfield.grid, uniqueleftcolors[index].row, uniqueleftcolors[index].col) + + } + + + + + const hasCol = connectedcells.some(obj => obj.col === width - 1); + + if (hasCol) { + // console.log("Found an object with col = 39"); + + // loop over the cluster and set their location in grid to 230 + for (let index = 0; index < connectedcells.length; index++) { + playfield.grid[connectedcells[index].row][connectedcells[index].col] = 230 + } + + + score += connectedcells.length + // update score ui + scoreui.innerText = score + + } + + + } + + + +} + diff --git a/Games/sand_tetris/style.css b/Games/sand_tetris/style.css new file mode 100644 index 0000000000..8379ed6016 --- /dev/null +++ b/Games/sand_tetris/style.css @@ -0,0 +1,10 @@ +body { + background-color: rgba(200, 200, 200); +} +*{ + background-color: rgb(255, 255, 255); + color: rgb(0, 0, 0); +} +html{ + background-color: bisque; +} \ No newline at end of file From 57509ba6fdb088e21cfc23758884bd1201889942 Mon Sep 17 00:00:00 2001 From: Markcosay <76439807+Markcosay@users.noreply.github.com> Date: Wed, 24 Jul 2024 00:55:09 +0530 Subject: [PATCH 3/7] Create 1.md --- Games/sand_tetris/assets/1.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Games/sand_tetris/assets/1.md diff --git a/Games/sand_tetris/assets/1.md b/Games/sand_tetris/assets/1.md new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Games/sand_tetris/assets/1.md @@ -0,0 +1 @@ +1 From e9d442a176f8a67e4a736df781a978db8cdd89bb Mon Sep 17 00:00:00 2001 From: Markcosay <76439807+Markcosay@users.noreply.github.com> Date: Wed, 24 Jul 2024 00:57:29 +0530 Subject: [PATCH 4/7] Add files via upload --- .../assets/screenshot_sand_tetris.png | Bin 0 -> 36507 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Games/sand_tetris/assets/screenshot_sand_tetris.png diff --git a/Games/sand_tetris/assets/screenshot_sand_tetris.png b/Games/sand_tetris/assets/screenshot_sand_tetris.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3d4012e4f0520cb43239355d9869747f20ac5b GIT binary patch literal 36507 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 Date: Thu, 25 Jul 2024 00:08:55 +0530 Subject: [PATCH 5/7] Adding Game link to reamdme file --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fadd81de9b..60a78bbf0e 100644 --- a/README.md +++ b/README.md @@ -201,7 +201,7 @@ This repository also provides one such platforms where contributers come over an | [Dragon_Tower](https://github.com/kunjgit/GameZone/tree/main/Games/Dragon_Tower) | [Hover_Board_Effect](https://github.com/kunjgit/GameZone/tree/main/Games/Hover_Board_Effect) | [escaperoom](https://github.com/kunjgit/GameZone/tree/main/Games/escaperoom) | [Ball_Shooting_Game](https://github.com/kunjgit/GameZone/tree/main/Games/Ball_Shooting_Game) | [HTML5_Controller_Tester](https://github.com/kunjgit/GameZone/tree/main/Games/HTML5_Controller_Tester) | [candy_match](https://github.com/kunjgit/GameZone/tree/main/Games/Candy_Match_Saga) | [Crossy_Road](https://github.com/tanujbordikar/GameZone/tree/Crossy_Road) | [HueHero](https://github.com/kunjgit/GameZone/tree/main/Games/HueHero) | [Puzzel_Winner](https://github.com/kunjgit/GameZone/tree/main/Games/Puzzel_Winner) | | [Emoji_Intruder](https://github.com/kunjgit/GameZone/tree/main/Games/Emoji_Intruder) | [Guess The Weapon](https://github.com/kunjgit/GameZone/tree/main/Games/Guess_The_Weapon) | [TriHand_Tactics](https://github.com/kunjgit/GameZone/tree/main/Games/TriHand_Tactics) | [Earth_Guardian](https://github.com/kunjgit/GameZone/tree/main/Games/Earth_Guardian) | [CatchTheBall](https://github.com/kunjgit/GameZone/tree/main/Games/CatchTheBall) | | [Candy_Crush_Saga](https://github.com/kunjgit/GameZone/tree/main/Games/Candy_Crush_Saga) | [numeral-whiz](https://github.com/Ishan-77/GameZone/tree/main/Games/numeral-whiz) | [candy_match](https://github.com/kunjgit/GameZone/tree/main/Games/Candy_Match_Saga) | [Crossy_Road](https://github.com/tanujbordikar/GameZone/tree/Crossy_Road) | [HueHero](https://github.com/kunjgit/GameZone/tree/main/Games/HueHero) | [Puzzel_Winner](https://github.com/kunjgit/GameZone/tree/main/Games/Puzzel_Winner) | -| [Emoji_Intruder](https://github.com/kunjgit/GameZone/tree/main/Games/Emoji_Intruder) | [Guess The Weapon](https://github.com/kunjgit/GameZone/tree/main/Games/Guess_The_Weapon) | [Guess Who](https://github.com/kunjgit/GameZone/tree/main/Games/Guess_Who) | [Pop My Balloon](https://github.com/kunjgit/GameZone/tree/main/Games/Pop_My_Balloon) | [Tower Stack](https://github.com/kunjgit/GameZone/tree/main/Games/Tower_Stack) | +| [Emoji_Intruder](https://github.com/kunjgit/GameZone/tree/main/Games/Emoji_Intruder) | [Guess The Weapon](https://github.com/kunjgit/GameZone/tree/main/Games/Guess_The_Weapon) | [Guess Who](https://github.com/kunjgit/GameZone/tree/main/Games/Guess_Who) | [Pop My Balloon](https://github.com/kunjgit/GameZone/tree/main/Games/Pop_My_Balloon) | [Tower Stack](https://github.com/kunjgit/GameZone/tree/main/Games/Tower_Stack) | [Sand Tetris](https://github.com/kunjgit/GameZone/tree/main/Games/Sand_Tetris) | From 420d4498c6df50bb4f254e31e1ba1ee8b16c3730 Mon Sep 17 00:00:00 2001 From: Markcosay <76439807+Markcosay@users.noreply.github.com> Date: Thu, 25 Jul 2024 00:22:18 +0530 Subject: [PATCH 6/7] Update gamesData.json --- assets/js/gamesData.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/assets/js/gamesData.json b/assets/js/gamesData.json index 50bd9b7eee..6956aa014e 100644 --- a/assets/js/gamesData.json +++ b/assets/js/gamesData.json @@ -3151,3 +3151,11 @@ "gameUrl": "Atlas_Game", "thumbnailUrl": "Atlas_Game.png" }, + "629":{ + "gameTitle" : "Sand Tetris", + "gameUrl": "sand_tetris", + "thumbnailUrl": "logo.png" + }, + + + From d0546a2299f4a7209a1f90d6a3205339a270b8e4 Mon Sep 17 00:00:00 2001 From: Markcosay <76439807+Markcosay@users.noreply.github.com> Date: Sat, 27 Jul 2024 14:55:09 +0530 Subject: [PATCH 7/7] changing repo to kunjgit from markcosay --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fcb6631017..3c53d12e13 100644 --- a/README.md +++ b/README.md @@ -204,7 +204,7 @@ This repository also provides one such platforms where contributers come over an | [Emoji_Intruder](https://github.com/kunjgit/GameZone/tree/main/Games/Emoji_Intruder) | [Guess The Weapon](https://github.com/kunjgit/GameZone/tree/main/Games/Guess_The_Weapon) | [TriHand_Tactics](https://github.com/kunjgit/GameZone/tree/main/Games/TriHand_Tactics) | [Earth_Guardian](https://github.com/kunjgit/GameZone/tree/main/Games/Earth_Guardian) | [CatchTheBall](https://github.com/kunjgit/GameZone/tree/main/Games/CatchTheBall) | | [Candy_Crush_Saga](https://github.com/kunjgit/GameZone/tree/main/Games/Candy_Crush_Saga) | [numeral-whiz](https://github.com/Ishan-77/GameZone/tree/main/Games/numeral-whiz) | [candy_match](https://github.com/kunjgit/GameZone/tree/main/Games/Candy_Match_Saga) | [Crossy_Road](https://github.com/tanujbordikar/GameZone/tree/Crossy_Road) | [HueHero](https://github.com/kunjgit/GameZone/tree/main/Games/HueHero) | [Puzzel_Winner](https://github.com/kunjgit/GameZone/tree/main/Games/Puzzel_Winner) | -| [Emoji_Intruder](https://github.com/kunjgit/GameZone/tree/main/Games/Emoji_Intruder) | [Guess The Weapon](https://github.com/kunjgit/GameZone/tree/main/Games/Guess_The_Weapon) | [Guess Who](https://github.com/kunjgit/GameZone/tree/main/Games/Guess_Who) | [Pop My Balloon](https://github.com/kunjgit/GameZone/tree/main/Games/Pop_My_Balloon) | [Tower Stack](https://github.com/kunjgit/GameZone/tree/main/Games/Tower_Stack) | [Sand Tetris](https://github.com/markcosay/GameZone/tree/main/Games/sand_tetris) | | +| [Emoji_Intruder](https://github.com/kunjgit/GameZone/tree/main/Games/Emoji_Intruder) | [Guess The Weapon](https://github.com/kunjgit/GameZone/tree/main/Games/Guess_The_Weapon) | [Guess Who](https://github.com/kunjgit/GameZone/tree/main/Games/Guess_Who) | [Pop My Balloon](https://github.com/kunjgit/GameZone/tree/main/Games/Pop_My_Balloon) | [Tower Stack](https://github.com/kunjgit/GameZone/tree/main/Games/Tower_Stack) | [Sand Tetris](https://github.com/kunjgit/GameZone/tree/main/Games/sand_tetris) | | | [Emoji_Intruder](https://github.com/kunjgit/GameZone/tree/main/Games/Emoji_Intruder) | [Guess The Weapon](https://github.com/kunjgit/GameZone/tree/main/Games/Guess_The_Weapon) | [Guess Who](https://github.com/kunjgit/GameZone/tree/main/Games/Guess_Who) | [Pop My Balloon](https://github.com/kunjgit/GameZone/tree/main/Games/Pop_My_Balloon) | [Tower Stack](https://github.com/kunjgit/GameZone/tree/main/Games/Tower_Stack) | | [Boom_Blast](https://github.com/kunjgit/GameZone/tree/main/Games/Boom_Blast) |