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;
}
return !maze[gridY][gridX].isWall;
}
function movePlayer(deltaX, deltaY) {
if (player.isMoving) return;
var newX = player.gridX + deltaX;
var newY = player.gridY + deltaY;
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
@@ -1,6 +1,307 @@
-/****
+/****
+* 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: 0x000000
-});
\ No newline at end of file
+ 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;
+ }
+ return !maze[gridY][gridX].isWall;
+}
+function movePlayer(deltaX, deltaY) {
+ if (player.isMoving) return;
+ var newX = player.gridX + deltaX;
+ var newY = player.gridY + deltaY;
+ 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();
\ No newline at end of file