User prompt
newcell should happen half a second after destroy event
User prompt
after newcell have been created check move to empty space again
User prompt
Fix Bug: 'Timeout.tick error: Cannot set properties of undefined (setting '0')' in this line: 'grid[col][0] = newCell;' Line Number: 173
User prompt
Fix Bug: 'Timeout.tick error: Cannot set properties of undefined (setting '0')' in this line: 'grid[col][0] = newCell;' Line Number: 172
User prompt
Fix Bug: 'Timeout.tick error: Cannot set properties of undefined (setting '0')' in this line: 'grid[col][0] = newCell;' Line Number: 172
User prompt
new cell should spawn half a second later
User prompt
Fix Bug: 'Timeout.tick error: Cannot set properties of undefined (setting '0')' in this line: 'grid[col][0] = newCell;' Line Number: 172
User prompt
Fix Bug: 'Timeout.tick error: Cannot set properties of undefined (setting '0')' in this line: 'grid[col][0] = newCell;' Line Number: 172
User prompt
delay newCell appearance for half a second
User prompt
newCell should appear 200 pixel above from current definition.
User prompt
new cell should appear from the top of the position its goint to cover
Code edit (1 edits merged)
Please save this source code
User prompt
new created cells after move to empty space should spawn from the top of the screen
User prompt
grid should always have cell in every space. after move to empty space happens, then create random cells and have them drop from the top.
User prompt
make move to empty space only move downwards
User prompt
make grid 4 by 4
User prompt
change effect that creates the grid from t he upper lefft corner to appear all from the top
User prompt
when there are empty space, inmediatelly add new cells coming from the top
User prompt
add touch and drag feature
User prompt
after destroy event, only move cells downwards in grid
User prompt
do not move cells when other are destoryed
User prompt
make new cells drop frob above when there are empty spaces
User prompt
Fix Bug: 'TypeError: Cannot set properties of undefined (setting 'alpha')' in this line: 'cell.graphics.alpha = 0.5;' Line Number: 262
User prompt
Fix Bug: 'TypeError: Cannot set properties of undefined (setting 'alpha')' in this line: 'cell.graphics.alpha = 0.5;' Line Number: 280
User prompt
Fix Bug: 'TypeError: Cannot set properties of undefined (setting 'alpha')' in this line: 'cell.graphics.alpha = 0.5;' Line Number: 280
var Particle = Container.expand(function (color, gravityMultiplier) { var self = Container.call(this); gravityMultiplier = typeof gravityMultiplier === 'undefined' ? 1 : gravityMultiplier; self.gravityMultiplier = gravityMultiplier; self.graphics = self.createAsset('particle', 'Particle', 0.5, 0.5); self.graphics.tint = color; self.speedX = (Math.random() - 0.5) * 10; self.speedY = (Math.random() - 0.5) * 10; self.scaleX = self.scaleY = Math.random() * 0.5 + 0.5; self.alpha = 1; self.tick = function () { self.x += self.speedX; self.speedY += 0.7 * self.gravityMultiplier; self.y += self.speedY; self.alpha -= 0.02; if (self.alpha <= 0) { var index = particles.indexOf(self); if (index > -1) { particles.splice(index, 1); } self.destroy(); } }; }); var Heart = Container.expand(function () { var self = Container.call(this); var heartBackground = self.createAsset('heartBackground', 'Heart Background', 0.5, 0.5); heartBackground.blendMode = 1; var heartGraphics = self.createAsset('heart', 'Life Heart', 0.5, 0.5); }); var LifeIndicator = Container.expand(function (initialLives) { var self = Container.call(this); LifeIndicator.prototype.triggerLifeLostParticles = function (x, y) { var particleColors = [0xff0000, 0xff4500, 0xff6347]; for (var i = 0; i < 5; i++) { var color = particleColors[Math.floor(Math.random() * particleColors.length)]; var particle = new Particle(color, 0); particle.x = x; particle.y = y; particles.push(particle); this.addChild(particle); } }; self.lives = initialLives; self.hearts = []; var heartWidth = 110; var totalWidth = (self.lives - 1) * (heartWidth + 10); var startX = -totalWidth / 2; for (var i = 0; i < self.lives; i++) { var heart = new Heart(); heart.x = startX + i * (heartWidth + 10); self.hearts.push(heart); self.addChild(heart); } self.updateLives = function (lives) { lives = Math.max(0, lives); while (self.hearts.length > lives) { var heart = self.hearts.pop(); if (heart) { self.triggerLifeLostParticles(heart.x, heart.y); heart.destroy(); } } while (self.hearts.length < lives) { var newHeart = new Heart(); var heartWidth = 100; newHeart.x = startX + self.hearts.length * (heartWidth + 10); self.hearts.push(newHeart); self.addChild(newHeart); } self.lives = lives; }; }); var Snowflake = Container.expand(function () { var self = Container.call(this); self.rotation = Math.random() * Math.PI * 2; self.rotationSpeed = Math.random() * 0.05 - 0.025; var flakeGraphics = self.createAsset('snowflake', 'Snowflake', 0.5, 0.5); self.speed = Math.random() * 1.5 + 1; self.direction = Math.random() * Math.PI * 2; self.xSpeed = Math.cos(self.direction) * Math.abs(Math.random() * 1 + 0.5); self.ySpeed = Math.abs(Math.sin(self.direction)) * self.speed; self.tick = function () { self.x += self.xSpeed; self.y += self.ySpeed; self.scale.x = self.scale.y = 0.5 + self.ySpeed / 6; self.rotation += self.rotationSpeed; if (self.x > 2048 || self.x < 0 || self.y > 2732) { self.x = Math.random() * 2048; self.y = -50; } }; }); var Cell = Container.expand(function (type, totalTypes) { var self = Container.call(this); self.targetX = 0; self.targetY = 0; self.isMoving = false; self.totalTypes = totalTypes; self.type = typeof type === 'undefined' ? Math.floor(Math.random() * self.totalTypes) : type; var assetName = 'cellType' + self.type; var cellBackground = self.createAsset('cellBackground', 'Cell Background', .5, .5); cellBackground.alpha = 0; var cellGraphics = self.createAsset(assetName, 'Grid Cell Type ' + self.type, .5, .5); self.move = function (x, y, instant) { self.targetX = x; self.targetY = y; if (instant) { self.x = x; self.y = y; } }; self.tick = function () { var acceleration = 2; self.speedX = self.speedX || 0; self.speedY = self.speedY || 0; var threshold = 1; var dx = self.targetX - self.x; var dy = self.targetY - self.y; if (Math.abs(dx) < threshold && Math.abs(dy) < threshold) { self.x = self.targetX; self.y = self.targetY; self.isMoving = false; self.speedX = 0; self.speedY = 0; } else { if (dx !== 0) { self.speedX += dx > 0 ? acceleration : -acceleration; } if (dy !== 0) { self.speedY += dy > 0 ? acceleration : -acceleration; } var nextX = self.x + self.speedX; var nextY = self.y + self.speedY; if (self.speedX > 0 && nextX > self.targetX || self.speedX < 0 && nextX < self.targetX) { nextX = self.targetX; self.speedX = 0; } if (self.speedY > 0 && nextY > self.targetY || self.speedY < 0 && nextY < self.targetY) { nextY = self.targetY; self.speedY = 0; } self.x = nextX; self.y = nextY; self.isMoving = self.x !== self.targetX || self.y !== self.targetY; } }; }); function hsvToRgb(h, s, v) { var i = Math.floor(h * 6), f = h * 6 - i, p = v * (1 - s), q = v * (1 - f * s), t = v * (1 - (1 - f) * s), mod = i % 6, r = [v, q, p, p, t, v][mod], g = [t, v, v, q, p, p][mod], b = [p, p, t, v, v, q][mod]; return (r * 255 << 16) + (g * 255 << 8) + b * 255; } var particles = []; var Game = Container.expand(function () { var self = Container.call(this); Game.prototype.createParticleEffect = function (x, y, type) { var fixedColors = [0x82d756, 0x5ecde9, 0xf8a4a0, 0x921d2a, 0x7719f9, 0xffffff, 0xefa63b, 0x7dd6a4]; var color = fixedColors[type % fixedColors.length]; for (var i = 0; i < 10; i++) { var particle = new Particle(color); particle.x = x + gridContainer.x; particle.y = y + gridContainer.y; particles.push(particle); this.addChild(particle); } }; self.totalCellTypes = 2; var score = 0; Game.prototype.hasPossibleMoves = function () { for (var col = 0; col < gridWidth; col++) { for (var row = 0; row < gridHeight; row++) { var cell = grid[col][row]; if (cell) { var neighbors = [{ x: col - 1, y: row }, { x: col + 1, y: row }, { x: col, y: row - 1 }, { x: col, y: row + 1 }]; for (var i = 0; i < neighbors.length; i++) { var pos = neighbors[i]; if (pos.x >= 0 && pos.x < gridWidth && pos.y >= 0 && pos.y < gridHeight) { var neighborCell = grid[pos.x][pos.y]; if (neighborCell && neighborCell.type === cell.type) { return true; } } } } } } return false; }; self.resetBoard = function () { grid.forEach(function (column, colIndex) { column.forEach(function (cell, rowIndex) { if (cell) { self.deleteCell(cell); } var newCell = new Cell(undefined, self.totalCellTypes); var targetPos = self.calculateTargetPosition(colIndex, rowIndex); newCell.move(targetPos.x, targetPos.y, false); self.attachCellListeners(newCell); newCell.y = -100; grid[colIndex][rowIndex] = newCell; gridContainer.addChild(newCell); }); }); }; var gridWidth = 8; var gridHeight = 8; var gridSpacing = 8; var cellWidth = 200; var cellHeight = 200; var gridContainer = new Container(); self.addChild(gridContainer); var totalGridWidth = gridWidth * (cellWidth + gridSpacing) - gridSpacing; var totalGridHeight = gridHeight * (cellHeight + gridSpacing) - gridSpacing; gridContainer.x = (2048 - totalGridWidth) / 2 + cellWidth / 2 + 3; gridContainer.y = (2732 - totalGridHeight) / 2 + cellHeight / 2 + 90; self.calculateTargetPosition = function (col, row) { return { x: col * (cellWidth + gridSpacing), y: row * (cellHeight + gridSpacing) }; }; self.findConnectedNeighbors = function (cell, connectedNeighbors) { connectedNeighbors = connectedNeighbors || []; if (!cell) return []; var cellType = cell.type; var cellColRow = self.findCellColRow(cell); if (cellColRow) { var directions = [[-1, 0], [1, 0], [0, -1], [0, 1]]; directions.forEach(function (dir) { var newRow = cellColRow.row + dir[0]; var newCol = cellColRow.col + dir[1]; if (newRow >= 0 && newRow < gridHeight && newCol >= 0 && newCol < gridWidth) { var neighborCell = grid[newCol][newRow]; if (neighborCell && neighborCell.type === cellType && connectedNeighbors.indexOf(neighborCell) === -1) { connectedNeighbors.push(neighborCell); self.findConnectedNeighbors(neighborCell, connectedNeighbors); } } }); } return connectedNeighbors; }; self.findCellColRow = function (cell) { for (var col = 0; col < gridWidth; col++) { for (var row = 0; row < gridHeight; row++) { if (grid[col][row] === cell) { return { col: col, row: row }; } } } return null; }; self.deleteCell = function (cell) { var colRow = self.findCellColRow(cell); if (colRow) { grid[colRow.col][colRow.row] = null; self.createParticleEffect(cell.x, cell.y, cell.type); cell.destroy(); } }; self.attachCellListeners = function (cell) { cell.on('down', function (obj) { var connectedNeighbors = self.findConnectedNeighbors(cell); if (connectedNeighbors.length > 0) { score += 10 * connectedNeighbors.length + (connectedNeighbors.length - 2) * 5; scoreText.setText(score.toString()); var cellsToDestroy = [cell].concat(connectedNeighbors); cellsToDestroy.forEach(function (cell) { self.deleteCell(cell); }); } }); cell.on('up', function (obj) {}); cell.on('move', function (obj) {}); }; var grid = []; var scoreText = new Text2(score.toString(), { size: 150, fill: "#ffffff", weight: '800', dropShadow: true, dropShadowColor: '#000000', dropShadowBlur: 4, dropShadowAngle: Math.PI / 6, dropShadowDistance: 6 }); scoreText.anchor.set(.5, 0); LK.gui.topCenter.addChild(scoreText); var lifeIndicator = new LifeIndicator(10); lifeIndicator.y = 260; LK.gui.topCenter.addChild(lifeIndicator); for (var i = 0; i < gridWidth; i++) { grid[i] = []; for (var j = 0; j < gridHeight; j++) { var cell = new Cell(undefined, self.totalCellTypes); var targetPos = self.calculateTargetPosition(i, j); cell.move(targetPos.x, targetPos.y, true); self.attachCellListeners(cell); grid[i][j] = cell; gridContainer.addChild(cell); } } self.moveToEmptySpace = function (direction, rowMode) { var moved; do { moved = false; var dx = direction === 'left' ? 1 : direction === 'right' ? -1 : 0; var dy = direction === 'up' ? 1 : direction === 'down' ? -1 : 0; for (var col = 0; col < gridWidth; col++) { for (var row = 0; row < gridHeight; row++) { if (!grid[col][row]) { var isRowOrColumnEmpty = true; if (rowMode) { for (var checkIndex = 0; checkIndex < (direction === 'left' || direction === 'right' ? gridHeight : gridWidth); checkIndex++) { isRowOrColumnEmpty = isRowOrColumnEmpty && !grid[direction === 'left' || direction === 'right' ? col : checkIndex][direction === 'up' || direction === 'down' ? row : checkIndex]; } } if (isRowOrColumnEmpty) { if (rowMode) { for (var checkIndex = 0; checkIndex < (direction === 'left' || direction === 'right' ? gridHeight : gridWidth); checkIndex++) { var targetCol = direction === 'left' || direction === 'right' ? col : checkIndex; var targetRow = direction === 'up' || direction === 'down' ? row : checkIndex; if (targetCol + dx >= 0 && targetCol + dx < gridWidth && targetRow + dy >= 0 && targetRow + dy < gridHeight && grid[targetCol + dx][targetRow + dy]) { var targetCell = grid[targetCol + dx][targetRow + dy]; var targetPos = self.calculateTargetPosition(targetCol, targetRow); targetCell.move(targetPos.x, targetPos.y); grid[targetCol][targetRow] = targetCell; grid[targetCol + dx][targetRow + dy] = null; moved = true; } } } else { var targetCol = col + dx; var targetRow = row + dy; if (targetCol >= 0 && targetCol < gridWidth && targetRow >= 0 && targetRow < gridHeight && grid[targetCol][targetRow]) { var targetCell = grid[targetCol][targetRow]; var targetPos = self.calculateTargetPosition(col, row); targetCell.move(targetPos.x, targetPos.y); grid[col][row] = targetCell; grid[targetCol][targetRow] = null; moved = true; } } } } } } } while (moved); }; var maxSnowflakes = 100; var snowflakeContainer = new Container(); self.addChildAt(snowflakeContainer, 1); var snowflakes = []; for (var i = 0; i < maxSnowflakes; i++) { var flake = new Snowflake(); flake.x = Math.random() * 2048; flake.y = Math.random() * 2732; snowflakeContainer.addChild(flake); snowflakes.push(flake); } LK.on('tick', function () { for (var i = 0; i < gridWidth; i++) { for (var j = 0; j < gridHeight; j++) { if (grid[i][j]) grid[i][j].tick(); } } for (var i = 0; i < particles.length; i++) { particles[i].tick(); } for (var i = 0; i < snowflakes.length; i++) { snowflakes[i].tick(); } var cellsAreMoving = grid.some(function (column) { return column.some(function (cell) { return cell && cell.isMoving; }); }); if (!cellsAreMoving && !self.hasPossibleMoves()) { self.totalCellTypes = Math.min(8, 3 + Math.floor(score / 2000)); var tilesLeft = grid.reduce(function (acc, column) { return acc + column.filter(function (cell) { return cell !== null; }).length; }, 0); lifeIndicator.updateLives(lifeIndicator.lives - tilesLeft); if (lifeIndicator.lives <= 0) { LK.showGameOver(); } else { self.resetBoard(); } } }); });
===================================================================
--- original.js
+++ change.js
@@ -282,10 +282,8 @@
var cellsToDestroy = [cell].concat(connectedNeighbors);
cellsToDestroy.forEach(function (cell) {
self.deleteCell(cell);
});
- self.moveToEmptySpace('down', false);
- self.moveToEmptySpace('left', true);
}
});
cell.on('up', function (obj) {});
cell.on('move', function (obj) {});