User prompt
level artıkça zorlaşsın
User prompt
leveller imkansız
User prompt
LEVELLER İMKANSIZ KOLAYLAŞTIR
User prompt
2 YE İNDİR HAREKETİ
User prompt
3.levelde sorun var düzelt
User prompt
duvar Hareketi engelerse karakter 1 kere hareket etsin
User prompt
her hareket ettiğimizde 3 er adım atalım
User prompt
karakteri hızlandır
User prompt
aşağı boşluğa Ok tuşları ekle
User prompt
karakter ekrandan çıkıyor düzelt
User prompt
karakter oyun alanından Çıkıyor fix it
Code edit (1 edits merged)
Please save this source code
User prompt
Maze Explorer - 30 Level Challenge
Initial prompt
Bana labirent oyunu yap 30 uncu levelde bitsin her level farklı olsun
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var MazeCell = Container.expand(function () { var self = Container.call(this); self.isWall = false; self.isExit = false; self.gridX = 0; self.gridY = 0; self.setAsWall = function () { self.isWall = true; self.attachAsset('wall', { anchorX: 0.5, anchorY: 0.5 }); }; self.setAsFloor = function () { self.isWall = false; self.attachAsset('floor', { anchorX: 0.5, anchorY: 0.5 }); }; self.setAsExit = function () { self.isExit = true; self.attachAsset('exit', { anchorX: 0.5, anchorY: 0.5 }); }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.gridX = 0; self.gridY = 0; self.isMoving = false; self.moveToGrid = function (gridX, gridY) { if (self.isMoving) return; self.isMoving = true; self.gridX = gridX; self.gridY = gridY; var targetX = gridX * CELL_SIZE + CELL_SIZE / 2; var targetY = gridY * CELL_SIZE + CELL_SIZE / 2; tween(self, { x: targetX, y: targetY }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { self.isMoving = false; LK.getSound('move').play(); // Check if reached exit if (gridX === exitX && gridY === exitY) { completeLevel(); } } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1E1E1E }); /**** * Game Code ****/ // Game constants var CELL_SIZE = 80; var MAZE_COLS = 20; var MAZE_ROWS = 20; var MAX_LEVEL = 30; // Game variables var currentLevel = storage.currentLevel || 1; var player = null; var maze = []; var startX = 1; var startY = 1; var exitX = 18; var exitY = 18; var levelStartTime = Date.now(); var dragStartPos = null; var isGameComplete = false; // UI elements var levelText = new Text2('Level 1', { size: 80, fill: '#FFFFFF' }); levelText.anchor.set(0.5, 0); LK.gui.top.addChild(levelText); var timeText = new Text2('Time: 0s', { size: 60, fill: '#CCCCCC' }); timeText.anchor.set(0, 0); timeText.x = 50; timeText.y = 150; LK.gui.topLeft.addChild(timeText); // Maze layouts for each level var mazeLevels = [ // Level 1 - Simple [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]]; // Generate more complex maze layouts function generateMazeLayout(level) { if (level <= mazeLevels.length) { return mazeLevels[level - 1]; } // Generate procedural maze for higher levels var layout = []; for (var y = 0; y < MAZE_ROWS; y++) { layout[y] = []; for (var x = 0; x < MAZE_COLS; x++) { if (x === 0 || y === 0 || x === MAZE_COLS - 1 || y === MAZE_ROWS - 1) { layout[y][x] = 1; // Border walls } else if (x === startX && y === startY) { layout[y][x] = 0; // Start position } else if (x === exitX && y === exitY) { layout[y][x] = 0; // Exit position } else { // Create more complex patterns based on level var complexity = Math.min(level / 5, 0.6); layout[y][x] = Math.random() < complexity ? 1 : 0; } } } // Ensure path from start to exit exists layout[startY][startX] = 0; layout[exitY][exitX] = 0; return layout; } function initializeMaze() { // Clear existing maze for (var i = 0; i < maze.length; i++) { for (var j = 0; j < maze[i].length; j++) { if (maze[i][j]) { maze[i][j].destroy(); } } } maze = []; // Get maze layout for current level var layout = generateMazeLayout(currentLevel); // Create maze for (var y = 0; y < MAZE_ROWS; y++) { maze[y] = []; for (var x = 0; x < MAZE_COLS; x++) { var cell = new MazeCell(); cell.gridX = x; cell.gridY = y; cell.x = x * CELL_SIZE + CELL_SIZE / 2; cell.y = y * CELL_SIZE + CELL_SIZE / 2; if (layout[y][x] === 1) { cell.setAsWall(); } else { cell.setAsFloor(); } // Set exit if (x === exitX && y === exitY) { cell.setAsExit(); } maze[y][x] = cell; game.addChild(cell); } } // Position maze in center of screen var mazeWidth = MAZE_COLS * CELL_SIZE; var mazeHeight = MAZE_ROWS * CELL_SIZE; var offsetX = (2048 - mazeWidth) / 2; var offsetY = (2732 - mazeHeight) / 2; for (var y = 0; y < MAZE_ROWS; y++) { for (var x = 0; x < MAZE_COLS; x++) { maze[y][x].x += offsetX; maze[y][x].y += offsetY; } } } function initializePlayer() { if (player) { player.destroy(); } player = new Player(); player.gridX = startX; player.gridY = startY; var mazeWidth = MAZE_COLS * CELL_SIZE; var mazeHeight = MAZE_ROWS * CELL_SIZE; var offsetX = (2048 - mazeWidth) / 2; var offsetY = (2732 - mazeHeight) / 2; player.x = startX * CELL_SIZE + CELL_SIZE / 2 + offsetX; player.y = startY * CELL_SIZE + CELL_SIZE / 2 + offsetY; game.addChild(player); } function canMoveTo(gridX, gridY) { if (gridX < 0 || gridX >= MAZE_COLS || gridY < 0 || gridY >= MAZE_ROWS) { return false; } if (gridX < 1 || gridX >= MAZE_COLS - 1 || gridY < 1 || gridY >= MAZE_ROWS - 1) { return false; } return !maze[gridY][gridX].isWall; } function movePlayer(deltaX, deltaY) { if (player.isMoving) return; var newX = player.gridX + deltaX; var newY = player.gridY + deltaY; // Extra boundary check to ensure player stays within maze if (newX < 1 || newX >= MAZE_COLS - 1 || newY < 1 || newY >= MAZE_ROWS - 1) { return; } if (canMoveTo(newX, newY)) { player.moveToGrid(newX, newY); } } function completeLevel() { LK.getSound('complete').play(); var completionTime = Math.floor((Date.now() - levelStartTime) / 1000); if (currentLevel >= MAX_LEVEL) { // Game completed isGameComplete = true; LK.getSound('win').play(); LK.showYouWin(); return; } // Next level currentLevel++; storage.currentLevel = currentLevel; LK.effects.flashScreen(0x4CAF50, 500); // Start next level after delay LK.setTimeout(function () { startLevel(); }, 1000); } function startLevel() { levelStartTime = Date.now(); levelText.setText('Level ' + currentLevel); // Adjust exit position based on level if (currentLevel <= 10) { exitX = 18; exitY = 18; } else if (currentLevel <= 20) { exitX = 18; exitY = 1; } else { exitX = 1; exitY = 18; } initializeMaze(); initializePlayer(); } function restartLevel() { levelStartTime = Date.now(); initializePlayer(); } // Touch controls function handleMove(x, y, obj) { if (!dragStartPos || player.isMoving) return; var deltaX = x - dragStartPos.x; var deltaY = y - dragStartPos.y; var threshold = 40; if (Math.abs(deltaX) > threshold || Math.abs(deltaY) > threshold) { if (Math.abs(deltaX) > Math.abs(deltaY)) { // Horizontal movement if (deltaX > 0) { movePlayer(1, 0); // Right } else { movePlayer(-1, 0); // Left } } else { // Vertical movement if (deltaY > 0) { movePlayer(0, 1); // Down } else { movePlayer(0, -1); // Up } } dragStartPos = null; } } game.move = handleMove; game.down = function (x, y, obj) { dragStartPos = { x: x, y: y }; }; game.up = function (x, y, obj) { dragStartPos = null; }; game.update = function () { // Update timer var currentTime = Math.floor((Date.now() - levelStartTime) / 1000); timeText.setText('Time: ' + currentTime + 's'); // Check for level restart (tap on player) if (player && !player.isMoving) { // Additional game logic can be added here } }; // Initialize game startLevel();
===================================================================
--- original.js
+++ change.js
@@ -208,14 +208,21 @@
function canMoveTo(gridX, gridY) {
if (gridX < 0 || gridX >= MAZE_COLS || gridY < 0 || gridY >= MAZE_ROWS) {
return false;
}
+ if (gridX < 1 || gridX >= MAZE_COLS - 1 || gridY < 1 || gridY >= MAZE_ROWS - 1) {
+ return false;
+ }
return !maze[gridY][gridX].isWall;
}
function movePlayer(deltaX, deltaY) {
if (player.isMoving) return;
var newX = player.gridX + deltaX;
var newY = player.gridY + deltaY;
+ // Extra boundary check to ensure player stays within maze
+ if (newX < 1 || newX >= MAZE_COLS - 1 || newY < 1 || newY >= MAZE_ROWS - 1) {
+ return;
+ }
if (canMoveTo(newX, newY)) {
player.moveToGrid(newX, newY);
}
}