User prompt
her bir blok koydğumuzda blokun rengi farklı olsun
User prompt
her bir blok koyduğumuzda blok değissin
User prompt
geri
Code edit (2 edits merged)
Please save this source code
User prompt
mavi çubuk kapalı yeşil olsun
User prompt
arka plan gri
User prompt
arka plan Stack gibi olsun
User prompt
arka plan yeşilimsi olsun
User prompt
bütün tween leri sil
User prompt
Please fix the bug: 'Uncaught ReferenceError: tween is not defined' in or related to this line: 'tween(currentBlock, {' Line Number: 167 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Stack Tower
Initial prompt
Stack oyunu yap
/**** * Classes ****/ // Base block (foundation) var BaseBlock = Container.expand(function () { var self = Container.call(this); var baseAsset = self.attachAsset('baseBlock', { anchorX: 0.5, anchorY: 0.5, width: 600, height: 100 }); return self; }); // Block class for stackable blocks var Block = Container.expand(function () { var self = Container.call(this); // Default block width/height, can be overridden self.blockWidth = 600; self.blockHeight = 100; self.isPerfect = false; // Attach block asset var blockAsset = self.attachAsset('block', { anchorX: 0.5, anchorY: 0.5, width: self.blockWidth, height: self.blockHeight }); self.setBlockSize = function (width, height) { self.blockWidth = width; self.blockHeight = height; blockAsset.width = width; blockAsset.height = height; }; self.setBlockColor = function (colorId) { blockAsset.color = colorId; blockAsset.tint = colorId; }; self.flashPerfect = function () { // Flash green for perfect drop (no tween) blockAsset.tint = 0x2ecc40; // Restore after a short delay LK.setTimeout(function () { blockAsset.tint = 0x3498db; }, 200); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x888888 }); /**** * Game Code ****/ // (Background is now set by backgroundColor, no rectangle needed) // Sound for perfect drop // Perfect effect: green rectangle // Base block: dark gray // Block asset: blue rectangle // Game constants var GAME_WIDTH = 2048; var GAME_HEIGHT = 2732; var BLOCK_START_WIDTH = 600; var BLOCK_HEIGHT = 100; var BLOCK_MIN_WIDTH = 60; var BLOCK_MOVE_MARGIN = 120; // Margin from edge for block movement var BASE_Y = GAME_HEIGHT - 300; // Y position for base block // Game state var stackBlocks = []; // Array of stacked blocks (bottom to top) var currentBlock = null; // The moving block var currentDirection = 1; // 1: right, -1: left var currentSpeed = 8; // Initial horizontal speed (pixels per frame) var blockLevel = 0; // Number of blocks stacked (score) var isDropping = false; // Prevent double tap var lastBlockX = GAME_WIDTH / 2; // X position of last stacked block var lastBlockWidth = BLOCK_START_WIDTH; // Width of last stacked block var lastBlockY = BASE_Y - BLOCK_HEIGHT; // Y of last stacked block var gameOver = false; // Score display var scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Helper: Center X function getCenterX() { return GAME_WIDTH / 2; } // Create base block var baseBlock = new BaseBlock(); baseBlock.x = getCenterX(); baseBlock.y = BASE_Y; game.addChild(baseBlock); // Add base block to stack stackBlocks.push({ x: baseBlock.x, y: baseBlock.y, width: BLOCK_START_WIDTH, height: BLOCK_HEIGHT, blockObj: baseBlock }); // Start first block function spawnBlock() { var block = new Block(); block.setBlockSize(lastBlockWidth, BLOCK_HEIGHT); block.x = BLOCK_MOVE_MARGIN + block.blockWidth / 2; block.y = lastBlockY - BLOCK_HEIGHT; blockLevel += 1; currentDirection = 1; currentSpeed = 8 + Math.floor(blockLevel / 8); // Increase speed as tower grows isDropping = false; currentBlock = block; game.addChild(block); } // Drop logic function dropBlock() { if (isDropping || gameOver) { return; } isDropping = true; // Get last stacked block var prev = stackBlocks[stackBlocks.length - 1]; var prevLeft = prev.x - prev.width / 2; var prevRight = prev.x + prev.width / 2; var currLeft = currentBlock.x - currentBlock.blockWidth / 2; var currRight = currentBlock.x + currentBlock.blockWidth / 2; // Calculate overlap var overlapLeft = Math.max(prevLeft, currLeft); var overlapRight = Math.min(prevRight, currRight); var overlapWidth = overlapRight - overlapLeft; // Perfect drop threshold (within 6px) var perfect = Math.abs(currLeft - prevLeft) < 6 && Math.abs(currRight - prevRight) < 6; if (overlapWidth <= 0) { // No overlap, game over endGame(); return; } // Trim block to overlap if (overlapWidth < currentBlock.blockWidth) { // Animate trimming var trimAmount = currentBlock.blockWidth - overlapWidth; var trimSide = currLeft < prevLeft ? 'left' : 'right'; // Instantly set block to new width and position (no tween) var newX = overlapLeft + overlapWidth / 2; currentBlock.x = newX; currentBlock.setBlockSize(overlapWidth, BLOCK_HEIGHT); } // Perfect drop effect if (perfect) { currentBlock.flashPerfect(); LK.getSound('perfect').play(); LK.setScore(LK.getScore() + 2); } else { LK.getSound('drop').play(); LK.setScore(LK.getScore() + 1); } scoreTxt.setText(LK.getScore()); // Instantly set block drop (no tween) currentBlock.y = lastBlockY; // Add to stack stackBlocks.push({ x: currentBlock.x, y: lastBlockY, width: overlapWidth, height: BLOCK_HEIGHT, blockObj: currentBlock }); lastBlockX = currentBlock.x; lastBlockWidth = overlapWidth; lastBlockY -= BLOCK_HEIGHT; // Check for too small if (overlapWidth < BLOCK_MIN_WIDTH) { endGame(); return; } // Spawn next block spawnBlock(); } // End game function endGame() { if (gameOver) { return; } gameOver = true; LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); } // Handle tap anywhere except top left 100x100 game.down = function (x, y, obj) { if (gameOver) { return; } if (x < 100 && y < 100) { return; } // Don't allow tap in top left dropBlock(); }; // Move block horizontally game.update = function () { if (gameOver) { return; } if (!currentBlock) { // First block lastBlockX = getCenterX(); lastBlockWidth = BLOCK_START_WIDTH; lastBlockY = BASE_Y - BLOCK_HEIGHT; spawnBlock(); LK.setScore(0); scoreTxt.setText('0'); return; } if (!isDropping) { // Move block left/right currentBlock.x += currentDirection * currentSpeed; var leftEdge = BLOCK_MOVE_MARGIN + currentBlock.blockWidth / 2; var rightEdge = GAME_WIDTH - BLOCK_MOVE_MARGIN - currentBlock.blockWidth / 2; if (currentBlock.x >= rightEdge) { currentBlock.x = rightEdge; currentDirection = -1; } if (currentBlock.x <= leftEdge) { currentBlock.x = leftEdge; currentDirection = 1; } } }; // Reset game state on restart game.on('reset', function () { // Remove all blocks except base for (var i = 1; i < stackBlocks.length; i++) { if (stackBlocks[i].blockObj) { stackBlocks[i].blockObj.destroy(); } } stackBlocks = [stackBlocks[0]]; lastBlockX = getCenterX(); lastBlockWidth = BLOCK_START_WIDTH; lastBlockY = BASE_Y - BLOCK_HEIGHT; blockLevel = 0; isDropping = false; gameOver = false; if (currentBlock) { currentBlock.destroy(); currentBlock = null; } LK.setScore(0); scoreTxt.setText('0'); spawnBlock(); });
===================================================================
--- original.js
+++ change.js
@@ -32,16 +32,10 @@
blockAsset.width = width;
blockAsset.height = height;
};
self.setBlockColor = function (colorId) {
- // If the block is not the current moving block, set to green; otherwise, use the provided color
- if (self !== currentBlock) {
- blockAsset.color = 0x2ecc40;
- blockAsset.tint = 0x2ecc40;
- } else {
- blockAsset.color = colorId;
- blockAsset.tint = colorId;
- }
+ blockAsset.color = colorId;
+ blockAsset.tint = colorId;
};
self.flashPerfect = function () {
// Flash green for perfect drop (no tween)
blockAsset.tint = 0x2ecc40;