User prompt
sayıları küçült ve kutularıda küçült
User prompt
kutular arasında boşluk bırak
User prompt
biraz daha büyüt ve aralarında boşluk bırak
User prompt
sayıları büyüt ve aralarında boşluk bırak
User prompt
kutuları biraz daha küçük yap ve aralarında boşluk bırak
User prompt
sayıların yanına bir kutu boşluk bırak onu kaydırarak bütün sayıları soldan sağa doğru sıralamalıyız
User prompt
15 sayıyı sadece 1 kutu içerisine al
User prompt
bütün sayıları bir kutu içerisine al
User prompt
sayıları kutu içine alma bütün sayıları bir kutu içerisine al
User prompt
bunu 15 sayı yap ve bir tablo içerisine koy
User prompt
biraz dah küçük olsun
User prompt
kenarları gözüksün
User prompt
bunu ekranı kaplayacak bir kare şeklinde yap
User prompt
arkada bir kutu içinde
User prompt
sayıları yana kaydırarak sıralamak istiyorum
User prompt
Please fix the bug: 'Uncaught TypeError: setTimeout is not a function' in or related to this line: 'setTimeout(function () {' Line Number: 241
Code edit (1 edits merged)
Please save this source code
User prompt
Sayı Sıralama Yarışı
Initial prompt
bana bir sayı oyunu yap
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ // NumberButton: A tappable number on the board var NumberButton = Container.expand(function () { var self = Container.call(this); // Attach circle background var circle = self.attachAsset('numberCircle', { anchorX: 0.5, anchorY: 0.5 }); // Number text var numberText = new Text2('1', { size: 110, fill: 0xFFFFFF }); numberText.anchor.set(0.5, 0.5); self.addChild(numberText); self.value = 1; // The number this button represents self.isActive = true; // If false, ignore taps self.setNumber = function (n) { self.value = n; numberText.setText(n); }; self.flash = function (color, duration) { tween(circle, { tint: color }, { duration: duration / 2, easing: tween.easeIn, onFinish: function onFinish() { tween(circle, { tint: 0x2d9cdb }, { duration: duration / 2, easing: tween.easeOut }); } }); }; // Touch/click event self.down = function (x, y, obj) { if (!self.isActive) return; if (typeof onNumberButtonPressed === "function") { onNumberButtonPressed(self); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181c20 }); /**** * Game Code ****/ // We'll use a simple circle as a background for each number for better touch targets. // Numbers will be rendered as Text2, so no need for custom shapes or images for numbers. // --- Game parameters --- var boardPadding = 80; var minNumbers = 5; var maxNumbers = 20; var level = 1; var numbersOnBoard = minNumbers; var timePerLevel = 15000; // ms var timePenalty = 1500; // ms lost on wrong tap var timeBonus = 500; // ms gained on perfect level var maxLevel = 20; // --- State --- var numberButtons = []; var nextNumber = 1; var timer = null; var timeLeft = timePerLevel; var score = 0; var isPlaying = false; var lastTapTime = 0; // --- UI --- var scoreText = new Text2('Skor: 0', { size: 90, fill: "#fff" }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); var timerText = new Text2('Süre: 0', { size: 80, fill: 0xFFE066 }); timerText.anchor.set(0.5, 0); LK.gui.top.addChild(timerText); var levelText = new Text2('Seviye: 1', { size: 70, fill: 0xB8E994 }); levelText.anchor.set(0.5, 0); LK.gui.top.addChild(levelText); // Position GUI elements scoreText.y = 30; scoreText.x = LK.gui.top.width / 2; timerText.y = scoreText.y + scoreText.height + 10; timerText.x = LK.gui.top.width / 2; levelText.y = timerText.y + timerText.height + 10; levelText.x = LK.gui.top.width / 2; // --- Functions --- function shuffleArray(arr) { for (var i = arr.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } return arr; } function layoutNumbers(n) { // Remove old buttons for (var i = 0; i < numberButtons.length; i++) { numberButtons[i].destroy(); } numberButtons = []; // Remove old background if exists if (typeof numberRowBg !== "undefined" && numberRowBg && numberRowBg.parent) { numberRowBg.parent.removeChild(numberRowBg); numberRowBg.destroy(); } numberRowBg = null; // Make a large square background that fills the screen and centers the number row var squareSize = Math.min(2048, 2732) - boardPadding * 2; var bgX = 2048 / 2; var bgY = 2732 / 2; numberRowBg = LK.getAsset('numberCircle', { width: squareSize, height: squareSize, color: 0x222b38, anchorX: 0.5, anchorY: 0.5, scaleX: squareSize / 220, scaleY: squareSize / 220, x: bgX, y: bgY }); game.addChild(numberRowBg); // Layout numbers in a horizontal row, centered inside the square var btnSpacing = 240; // enough for 220px button + margin var totalWidth = (n - 1) * btnSpacing + 220; var startX = bgX - totalWidth / 2 + 110; var y = bgY; // center row vertically in the square var positions = []; for (var i = 0; i < n; i++) { positions.push({ x: startX + i * btnSpacing, y: y }); } // Shuffle numbers var nums = []; for (var i = 1; i <= n; i++) nums.push(i); shuffleArray(nums); for (var i = 0; i < positions.length; i++) { var btn = new NumberButton(); btn.setNumber(nums[i]); btn.x = positions[i].x; btn.y = positions[i].y; btn.isActive = true; numberButtons.push(btn); game.addChild(btn); } } function startLevel(lvl) { level = lvl; numbersOnBoard = Math.min(minNumbers + (level - 1) * 2, maxNumbers); nextNumber = 1; timeLeft = timePerLevel + Math.max(0, (level - 1) * 500); // Slightly more time for higher levels levelText.setText('Seviye: ' + level); layoutNumbers(numbersOnBoard); isPlaying = true; updateScoreText(); updateTimerText(); } function updateScoreText() { scoreText.setText('Skor: ' + score); } function updateTimerText() { timerText.setText('Süre: ' + Math.ceil(timeLeft / 1000)); } function endGame(win) { isPlaying = false; // Remove all number buttons for (var i = 0; i < numberButtons.length; i++) { numberButtons[i].destroy(); } numberButtons = []; // Show win/lose if (win) { LK.showYouWin(); } else { LK.showGameOver(); } } function onNumberButtonPressed(btn) { if (!isPlaying) return; if (!btn.isActive) return; if (btn.value === nextNumber) { // Correct btn.isActive = false; btn.flash(0x6fcf97, 300); tween(btn, { scaleX: 1.2, scaleY: 1.2, alpha: 0 }, { duration: 250, easing: tween.easeOut, onFinish: function onFinish() { btn.destroy(); } }); nextNumber++; score += 10 + Math.max(0, 5 * (level - 1)); updateScoreText(); if (nextNumber > numbersOnBoard) { // Level complete isPlaying = false; // Bonus for perfect timeLeft += timeBonus; LK.setTimeout(function () { if (level >= maxLevel) { endGame(true); } else { startLevel(level + 1); } }, 600); } } else { // Wrong btn.flash(0xeb5757, 400); timeLeft -= timePenalty; LK.effects.flashObject(btn, 0xeb5757, 300); if (timeLeft < 0) { timeLeft = 0; } updateTimerText(); } } // --- Game event handlers --- game.update = function () { if (!isPlaying) return; // Timer timeLeft -= 1000 / 60; if (timeLeft < 0) timeLeft = 0; updateTimerText(); if (timeLeft <= 0) { endGame(false); } }; // --- Start game --- function startGame() { score = 0; level = 1; startLevel(level); updateScoreText(); updateTimerText(); } startGame(); // --- Touch handling --- // All handled by NumberButton.down // --- Horizontal sliding/swipe logic for number row --- var isDraggingRow = false; var dragStartX = 0; var rowStartX = 0; // Helper: get min/max X of all buttons function getRowBounds() { if (numberButtons.length === 0) return { min: 0, max: 0 }; var minX = numberButtons[0].x, maxX = numberButtons[0].x; for (var i = 1; i < numberButtons.length; i++) { if (numberButtons[i].x < minX) minX = numberButtons[i].x; if (numberButtons[i].x > maxX) maxX = numberButtons[i].x; } return { min: minX, max: maxX }; } // Only allow sliding if game is playing game.down = function (x, y, obj) { if (!isPlaying) return; // Only start drag if touch is on the row area var rowY = numberButtons.length > 0 ? numberButtons[0].y : 0; if (Math.abs(y - rowY) < 180) { isDraggingRow = true; dragStartX = x; rowStartX = numberButtons.length > 0 ? numberButtons[0].x : 0; } }; game.move = function (x, y, obj) { if (!isPlaying) return; if (!isDraggingRow) return; var dx = x - dragStartX; // Move all buttons horizontally for (var i = 0; i < numberButtons.length; i++) { numberButtons[i].x = rowStartX + dx + i * 240; } // Prevent row from sliding out of bounds var bounds = getRowBounds(); var leftLimit = boardPadding + 110; var rightLimit = 2048 - boardPadding - 110; if (bounds.min < leftLimit) { var offset = leftLimit - bounds.min; for (var i = 0; i < numberButtons.length; i++) { numberButtons[i].x += offset; } } if (bounds.max > rightLimit) { var offset = rightLimit - bounds.max; for (var i = 0; i < numberButtons.length; i++) { numberButtons[i].x += offset; } } }; game.up = function (x, y, obj) { isDraggingRow = false; }; // --- Storage (for future highscore etc.) --- // Not implemented in MVP // --- Music/Sound --- // Not implemented in MVP // --- End of file ---
===================================================================
--- original.js
+++ change.js
@@ -131,32 +131,30 @@
numberRowBg.parent.removeChild(numberRowBg);
numberRowBg.destroy();
}
numberRowBg = null;
- // Board area
- var boardW = 2048 - boardPadding * 2;
- var boardH = 2732 - boardPadding * 2 - 300; // leave space for GUI
- // Layout numbers in a horizontal row, centered
- var positions = [];
- var btnSpacing = 240; // enough for 220px button + margin
- var totalWidth = (n - 1) * btnSpacing + 220;
- var startX = (2048 - totalWidth) / 2 + 110;
- var y = 2732 / 2 + 200; // place row a bit below center
- // --- Add background box behind the row ---
- var bgWidth = totalWidth + 80;
- var bgHeight = 260;
+ // Make a large square background that fills the screen and centers the number row
+ var squareSize = Math.min(2048, 2732) - boardPadding * 2;
+ var bgX = 2048 / 2;
+ var bgY = 2732 / 2;
numberRowBg = LK.getAsset('numberCircle', {
- width: bgWidth,
- height: bgHeight,
+ width: squareSize,
+ height: squareSize,
color: 0x222b38,
anchorX: 0.5,
anchorY: 0.5,
- scaleX: bgWidth / 220,
- scaleY: bgHeight / 220,
- x: 2048 / 2,
- y: y
+ scaleX: squareSize / 220,
+ scaleY: squareSize / 220,
+ x: bgX,
+ y: bgY
});
game.addChild(numberRowBg);
+ // Layout numbers in a horizontal row, centered inside the square
+ var btnSpacing = 240; // enough for 220px button + margin
+ var totalWidth = (n - 1) * btnSpacing + 220;
+ var startX = bgX - totalWidth / 2 + 110;
+ var y = bgY; // center row vertically in the square
+ var positions = [];
for (var i = 0; i < n; i++) {
positions.push({
x: startX + i * btnSpacing,
y: y