Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Uncaught RangeError: Maximum call stack size exceeded' in or related to this line: 'candy1.x = candy2.x;' Line Number: 160
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Uncaught RangeError: Maximum call stack size exceeded' in or related to this line: 'candy1.x = candy2.x;' Line Number: 160
Code edit (1 edits merged)
Please save this source code
User prompt
mouse ile tıklanmaya başlanan şeker mousun kaydırılma yönüne hareket ederek diğer şeker ile yer değiştirsin
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'swapCandies')' in or related to this line: 'self.swapCandies = function (candy1, candy2) {' Line Number: 166
User prompt
mouse ile tıklanmaya başlanan şeker mousun kaydırılma yönüne hareket ederek diğer şeker ile yer değiştirsin
User prompt
şeker resimlerini biraz küçült
User prompt
şimdi bu aralıklarla şekerlerin olduğu kısmı ekran genişliğine uydur
User prompt
aralığı biraz daha arttır
User prompt
biraz daha arttır ve alt üst ile sağ sol aralığı eşit olsun
User prompt
şekerler arasını biraz daha aç
User prompt
şekerler arasında 2 piksel boşluk olsun
User prompt
şekerlerin olduğu yeri bir şeker boyu kadar aşağı al
User prompt
bir şeker boyutu kadar aşağı alabilirsin
User prompt
şekerlerin sayısını şu şekilde ayarla: 9 şeker X 9 şeker şekerler arasında çok az mesafe bırak
User prompt
şekerlerin olduğu bölüm alt taraftan biraz kısılsın ekstra kullanımlar görünecek şekilde ayrıca birkaç bonus hareket kullanımı ekle
User prompt
şekerlerin olduğu bölüm ekranı kaplasın
User prompt
Please fix the bug: 'Uncaught TypeError: extras.getCandyAtPosition is not a function' in or related to this line: 'var selectedExtra = extras.getCandyAtPosition(x, y);' Line Number: 118
User prompt
ekranın alt bölümünde kullanılabilir ekstalar yer alacak geri kalan kısımda ise oyun yer almalı
Code edit (1 edits merged)
Please save this source code
User prompt
3. Özel Güçler ve Güçlendiriciler Oyuncuya bazı özel güçler vererek zor seviyeleri geçmesini sağlayabilirsin. 🚀 Bomba Taş – Patladığında etrafındaki taşları yok eder. 🌈 Renk Değiştirici – Seçilen bir rengi başka bir renge çevirir. ⚡ Yıldırım Çizgisi – Bir satır veya sütunu tamamen temizler. 💣 Mega Patlayıcı – Bütün tahtayı etkileyen güçlü bir patlama.
User prompt
2. Seviye Zorluk Dengesi Seviyeler başlangıçta kolay başlamalı ve gittikçe zorlaşmalı. İşte bazı zorluk ayarlamaları: 🔹 Kolay Seviye: Fazla engel yok, bolca hamle var. Büyük kombolar yapmayı teşvik eden açık tahtalar. 🔹 Orta Seviye: Hedeflere ulaşmak için daha az hamle verilmiş. Buzlu / zincirli taşlar gibi ilk engeller eklenmiş. 🔹 Zor Seviye: Çok az hamle veya kısa zaman sınırı. Birkaç taş kilitli veya hareket edemeyen alanlar var.
User prompt
Temel Oyun Mekaniği Match-3 mantığı: Aynı türdeki 3 veya daha fazla öğeyi yatay veya dikey hizalayarak yok etme. Kombo sistemleri: 4'lü eşleşme → Satır/sütun patlatan özel taş. 5'li eşleşme → Patlama dalgası oluşturan güçlü taş. L veya T şeklinde eşleşme → Büyük çapta yok edici taş.
/**** * Classes ****/ // Board class to represent the game board var Board = Container.expand(function () { var self = Container.call(this); self.board = []; self.boardWidth = 9; self.boardHeight = 9; self.candySize = (game.width - (self.boardWidth - 1) * 2) / self.boardWidth; self.difficulty = 'easy'; self.selectedCandy = null; self.moves = 0; self.time = 0; // Initialize the board with candies self.initializeBoard = function (difficulty) { self.difficulty = difficulty; self.moves = difficulty === 'medium' ? 30 : 0; self.time = difficulty === 'hard' ? 60 : 0; for (var i = 0; i < self.boardWidth; i++) { self.board[i] = []; for (var j = 0; j < self.boardHeight; j++) { self.createCandyAt(i, j); } } // Initial check for matches to prevent starting with matches while (self.hasMatches()) { self.reshuffleBoard(); } }; // Create a candy at specific position self.createCandyAt = function (i, j) { var item; if (Math.random() < 0.1) { item = new PowerUp(); } else { item = new Candy(); if (self.difficulty === 'medium' && Math.random() < 0.1) { item.locked = true; } else if (self.difficulty === 'hard' && Math.random() < 0.2) { item.locked = true; item.immovable = true; } } item.x = i * (self.candySize + 2) + self.candySize / 2; item.y = j * (self.candySize + 2) + self.candySize / 2; item.boardX = i; item.boardY = j; self.board[i][j] = item; self.addChild(item); return item; }; // Check for matches on the board self.checkMatches = function () { var matches = []; // Check horizontal matches for (var j = 0; j < self.boardHeight; j++) { var count = 1; var type = null; for (var i = 0; i < self.boardWidth; i++) { var candy = self.board[i][j]; if (candy && candy.type) { if (type === candy.type) { count++; if (count >= 3) { matches.push({ x: i - 2, y: j, length: count, direction: 'horizontal' }); } } else { count = 1; type = candy.type; } } } } // Check vertical matches for (var i = 0; i < self.boardWidth; i++) { var count = 1; var type = null; for (var j = 0; j < self.boardHeight; j++) { var candy = self.board[i][j]; if (candy && candy.type) { if (type === candy.type) { count++; if (count >= 3) { matches.push({ x: i, y: j - 2, length: count, direction: 'vertical' }); } } else { count = 1; type = candy.type; } } } } return matches; }; // Check if there are any matches on the board self.hasMatches = function () { return self.checkMatches().length > 0; }; // Reshuffle the board when no moves are possible self.reshuffleBoard = function () { for (var i = 0; i < self.boardWidth; i++) { for (var j = 0; j < self.boardHeight; j++) { if (self.board[i][j]) { self.removeChild(self.board[i][j]); } } } for (var i = 0; i < self.boardWidth; i++) { for (var j = 0; j < self.boardHeight; j++) { self.createCandyAt(i, j); } } }; // Get the candy at a specific position self.getCandyAtPosition = function (x, y) { var i = Math.floor((x - self.x) / (self.candySize + 2)); var j = Math.floor((y - self.y) / (self.candySize + 2)); if (i >= 0 && i < self.boardWidth && j >= 0 && j < self.boardHeight) { return self.board[i][j]; } return null; }; // Swap two candies on the board self.swapCandies = function (candy1, candy2) { // Check if either candy is locked or immovable if (candy1.locked || candy2.locked || candy1.immovable || candy2.immovable) { return false; } // Check if candies are adjacent var dx = Math.abs(candy1.boardX - candy2.boardX); var dy = Math.abs(candy1.boardY - candy2.boardY); if (dx + dy !== 1) { return false; } // Perform the swap var tempX = candy1.x; var tempY = candy1.y; var tempBX = candy1.boardX; var tempBY = candy1.boardY; candy1.x = candy2.x; candy1.y = candy2.y; candy1.boardX = candy2.boardX; candy1.boardY = candy2.boardY; candy2.x = tempX; candy2.y = tempY; candy2.boardX = tempBX; candy2.boardY = tempBY; self.board[candy1.boardX][candy1.boardY] = candy1; self.board[candy2.boardX][candy2.boardY] = candy2; // Check if the swap created any matches if (!self.hasMatches()) { // Swap back if no matches were created self.swapCandies(candy1, candy2); return false; } return true; }; return self; }); // Candy class to represent each candy on the board var Candy = Container.expand(function () { var self = Container.call(this); var candyTypes = ['candy1', 'candy2', 'candy3', 'candy4', 'candy5']; self.type = candyTypes[Math.floor(Math.random() * candyTypes.length)]; self.attachAsset(self.type, { anchorX: 0.5, anchorY: 0.5, width: gameBoard.candySize * 0.8, height: gameBoard.candySize * 0.8 }); self.locked = false; self.immovable = false; self.pop = function () { self.destroy(); }; return self; }); // PowerUp class to represent the power-ups in the game var PowerUp = Container.expand(function () { var self = Container.call(this); var powerUpTypes = ['bomb', 'colorChanger', 'lightning', 'megaBomb']; self.type = powerUpTypes[Math.floor(Math.random() * powerUpTypes.length)]; self.attachAsset(self.type, { anchorX: 0.5, anchorY: 0.5, width: gameBoard.candySize, height: gameBoard.candySize }); self.use = function () { switch (self.type) { case 'bomb': // Destroy candies in a 3x3 area break; case 'colorChanger': // Change all candies of one color to another break; case 'lightning': // Destroy all candies in a row or column break; case 'megaBomb': // Destroy candies in a 5x5 area break; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ var gameBoard = new Board(); game.addChild(gameBoard); gameBoard.initializeBoard('easy'); // Center the game board gameBoard.y = (game.height - gameBoard.candySize * gameBoard.boardHeight - 2 * (gameBoard.boardHeight - 1)) / 2; gameBoard.x = (game.width - gameBoard.candySize * gameBoard.boardWidth - 2 * (gameBoard.boardWidth - 1)) / 2; // Handle input events game.down = function (x, y, obj) { gameBoard.selectedCandy = gameBoard.getCandyAtPosition(x, y); if (gameBoard.selectedCandy instanceof PowerUp) { gameBoard.selectedCandy.use(); gameBoard.selectedCandy = null; } }; game.up = function (x, y, obj) { var candyAtMouse = gameBoard.getCandyAtPosition(x, y); if (gameBoard.selectedCandy && candyAtMouse && gameBoard.selectedCandy !== candyAtMouse) { gameBoard.swapCandies(gameBoard.selectedCandy, candyAtMouse); } gameBoard.selectedCandy = null; }; game.move = function (x, y, obj) { if (gameBoard.selectedCandy) { var candyAtMouse = gameBoard.getCandyAtPosition(x, y); if (candyAtMouse && gameBoard.selectedCandy !== candyAtMouse) { if (gameBoard.swapCandies(gameBoard.selectedCandy, candyAtMouse)) { gameBoard.selectedCandy = null; } } } }; // Update function called every game tick game.update = function () { var matches = gameBoard.checkMatches(); if (matches.length > 0) { matches.forEach(function (match) { for (var i = 0; i < match.length; i++) { var x = match.direction === 'horizontal' ? match.x + i : match.x; var y = match.direction === 'vertical' ? match.y + i : match.y; if (gameBoard.board[x][y]) { gameBoard.board[x][y].pop(); gameBoard.board[x][y] = null; } } }); } // Update game state based on difficulty if (gameBoard.difficulty === 'medium') { gameBoard.moves = Math.max(0, gameBoard.moves - 0.016); // Assuming 60 FPS } else if (gameBoard.difficulty === 'hard') { gameBoard.time = Math.max(0, gameBoard.time - 0.016); } };
===================================================================
--- original.js
+++ change.js
@@ -160,22 +160,9 @@
self.board[candy2.boardX][candy2.boardY] = candy2;
// Check if the swap created any matches
if (!self.hasMatches()) {
// Swap back if no matches were created
- var tempX = candy1.x;
- var tempY = candy1.y;
- var tempBX = candy1.boardX;
- var tempBY = candy1.boardY;
- candy1.x = candy2.x;
- candy1.y = candy2.y;
- candy1.boardX = candy2.boardX;
- candy1.boardY = candy2.boardY;
- candy2.x = tempX;
- candy2.y = tempY;
- candy2.boardX = tempBX;
- candy2.boardY = tempBY;
- self.board[candy1.boardX][candy1.boardY] = candy1;
- self.board[candy2.boardX][candy2.boardY] = candy2;
+ self.swapCandies(candy1, candy2);
return false;
}
return true;
};