User prompt
Every time after the grid is full check if there is at least one valid connection. If there is not, end game
User prompt
If game over is going to happen, let cells fall and then end gane
User prompt
Check for matches after move to empty space is done
User prompt
If no 2 cells of the same color are conected then its game over
User prompt
Allow threshold not to have to only touch center of cells to be dimed
User prompt
Fix Bug: 'TypeError: self.moveToEmptySpace is not a function' in this line: 'self.moveToEmptySpace();' Line Number: 120
User prompt
Fix Bug: 'TypeError: self.moveToEmptySpace is not a function' in this line: 'self.moveToEmptySpace();' Line Number: 120
User prompt
When there are no commected cells its game over
User prompt
When touch is released un dim all cells
User prompt
Double dot sizes
User prompt
On touch and drag allow to connect more than inly two cells
User prompt
Allow connection of more than 2 cells of the same color
User prompt
Do not destroy cells until finger is lift
User prompt
If cell being connected is same color also dim its color
User prompt
Dim cells that are being hold
User prompt
Apply move to empty space after cell is destroyed
User prompt
Add destroy when i connect two cells with touch and drag
User prompt
Remove destroy on touch
User prompt
Fix Bug: 'ReferenceError: containsPoint is not defined' in this line: 'if (cell && containsPoint(dragStartPos, cell) && containsPoint(currentPos, cell)) {' Line Number: 148
User prompt
Fix Bug: 'TypeError: self.containsPoint is not a function' in this line: 'if (cell && self.containsPoint(dragStartPos, cell) && self.containsPoint(currentPos, cell)) {' Line Number: 144
User prompt
Fix Bug: 'TypeError: cell.containsPoint is not a function' in this line: 'if (cell && cell.containsPoint(dragStartPos) && cell.containsPoint(currentPos)) {' Line Number: 144
User prompt
Fix Bug: 'TypeError: self.containsPoint is not a function' in this line: 'if (cell && self.containsPoint(dragStartPos, cell) && self.containsPoint(currentPos, cell)) {' Line Number: 144
User prompt
Fix Bug: 'TypeError: cell.containsPoint is not a function' in this line: 'if (cell && cell.containsPoint(dragStartPos) && cell.containsPoint(currentPos)) {' Line Number: 144
User prompt
Use drag and trace to select multiple dots. Selected dots will dim their color
User prompt
remove destroy event on click
var Cell = Container.expand(function (type) { var self = Container.call(this); var cellGraphics = self.createAsset('cell', 'Grid Cell', .5, .5); self.targetX = 0; self.targetY = 0; self.isMoving = false; self.totalTypes = 5; self.type = type || Math.floor(Math.random() * self.totalTypes); var hue = self.type / self.totalTypes; var color = hsvToRgb(hue, 1, 1); cellGraphics.tint = color; 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 = 1; 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 Game = Container.expand(function () { var self = Container.call(this); self.checkForMatches = function () { for (var i = 0; i < gridWidth; i++) { for (var j = 0; j < gridHeight; j++) { if (grid[i][j]) { var matchedCells = self.findConnectedNeighbors(grid[i][j]); if (matchedCells.length > 1) { return true; } } } } return false; }; var gridWidth = 4; var gridHeight = 4; var gridSpacing = 8; var tempCell = new Cell(); var cellWidth = tempCell.width; var cellHeight = tempCell.height; tempCell.destroy(); 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; gridContainer.y = (2732 - totalGridHeight) / 2 + cellHeight / 2; 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; cell.destroy(); self.moveToEmptySpace(); } }; self.attachCellListeners = function (cell) { var dragStartCell = null; cell.on('down', function (obj) { dragStartCell = cell; cell.alpha = 0.5; }); cell.on('move', function (obj) { if (dragStartCell) { var pos = obj.event.getLocalPosition(gridContainer); var col = Math.floor((pos.x + cellWidth / 2) / (cellWidth + gridSpacing)); var row = Math.floor((pos.y + cellHeight / 2) / (cellHeight + gridSpacing)); if (col >= 0 && col < gridWidth && row >= 0 && row < gridHeight) { var targetCell = grid[col][row]; if (targetCell) { if (targetCell !== dragStartCell) { if (targetCell.type === dragStartCell.type) { targetCell.alpha = 0.5; dragStartCell.alpha = 0.5; dragStartCell.isMatched = true; targetCell.isMatched = true; } else { dragStartCell.alpha = 1; dragStartCell = null; } } } } } }); cell.on('up', function (obj) { for (var i = 0; i < gridWidth; i++) { for (var j = 0; j < gridHeight; j++) { if (grid[i][j]) grid[i][j].alpha = 1; } } if (dragStartCell && dragStartCell.isMatched) { var matchedCells = self.findConnectedNeighbors(dragStartCell); matchedCells.forEach(function (cell) { self.deleteCell(cell); }); } dragStartCell = null; }); }; var grid = []; for (var i = 0; i < gridWidth; i++) { grid[i] = []; for (var j = 0; j < gridHeight; j++) { var cell = new Cell(); 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 () { var moved; do { moved = false; for (var col = 0; col < gridWidth; col++) { for (var row = gridHeight - 2; row >= 0; row--) { if (grid[col][row] && !grid[col][row + 1]) { var targetCell = grid[col][row]; var targetPos = self.calculateTargetPosition(col, row + 1); targetCell.move(targetPos.x, targetPos.y); grid[col][row + 1] = targetCell; grid[col][row] = null; moved = true; } } } } while (moved); for (var col = 0; col < gridWidth; col++) { if (!grid[col][0]) { var newCell = new Cell(); var targetPos = self.calculateTargetPosition(col, 0); newCell.x = targetPos.x; newCell.y = targetPos.y - cellHeight - 200; newCell.move(targetPos.x, targetPos.y); self.attachCellListeners(newCell); grid[col][0] = newCell; gridContainer.addChild(newCell); self.moveToEmptySpace(); } } if (!self.checkForMatches()) { LK.showGameOver(); } }; 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(); } } }); });
===================================================================
--- original.js
+++ change.js
@@ -58,8 +58,21 @@
return (r * 255 << 16) + (g * 255 << 8) + b * 255;
}
var Game = Container.expand(function () {
var self = Container.call(this);
+ self.checkForMatches = function () {
+ for (var i = 0; i < gridWidth; i++) {
+ for (var j = 0; j < gridHeight; j++) {
+ if (grid[i][j]) {
+ var matchedCells = self.findConnectedNeighbors(grid[i][j]);
+ if (matchedCells.length > 1) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ };
var gridWidth = 4;
var gridHeight = 4;
var gridSpacing = 8;
var tempCell = new Cell();
@@ -205,8 +218,11 @@
gridContainer.addChild(newCell);
self.moveToEmptySpace();
}
}
+ if (!self.checkForMatches()) {
+ LK.showGameOver();
+ }
};
LK.on('tick', function () {
for (var i = 0; i < gridWidth; i++) {
for (var j = 0; j < gridHeight; j++) {