User prompt
For level2 Remove the 2 smallest walls in level2 one horizontal on the right almost on the bottom, and one vertical between 2 walls on the middle left of the screen
User prompt
let the small doors doors be larger in level4 and add another door for the top right room and for the bottom left room
User prompt
for level3 make door in one of the bottom left walls of that rectangle room "not edges of the screen!"
User prompt
make door for the bottom left walls of that room "not edges of the screen!"
User prompt
for level3 add some doors to reach the coins
User prompt
For level2 remove the 2 vertical walls that that are beside right wall of the screen from its left they are closing the root for the player
User prompt
change level2 maze to be more harder
User prompt
add door to the middle rectangle and change player position to the bottom right corner
User prompt
change level2 to be Hypnotic maze, let doors in walls to go through it
User prompt
change level2 to be Hypnotic maze
User prompt
change maze of level2 to be a labyrinth
Code edit (3 edits merged)
Please save this source code
User prompt
add do some spiral squares and rectangles to look like a real maze for level1
User prompt
change maze of level4
Code edit (1 edits merged)
Please save this source code
User prompt
change some walls and the coin on the bottom right it was on the wall i couldn't touch or collect it!
User prompt
add many walls and no closed roomes of square, also add half squares and half rectangles
User prompt
now add more walls to look like egypt maze for level1
User prompt
change maze level1 and don't do closed rooms always let a pass with double size of the player or the coin.
User prompt
do more spaces
User prompt
change the maze for level1 and make it hard not just horizontal or vertical walls!
User prompt
fill it with walls but let spaces to each coin area to collect it.
User prompt
add more lines more shaping of the walls like L or C for level1
/**** * Classes ****/ // Coin class var Coin = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); self.rotationSpeed = 0.05; // Radians per frame self.update = function () { self.rotation += self.rotationSpeed; }; return self; }); // Base size, will be scaled in code // No plugins needed for this version. Tween could be used for rotation, but manual rotation is sufficient. // var tween = LK.import('@upit/tween.v1'); // Player class var Player = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); // No update needed here as movement is handled in the main game loop return self; }); // Wall class var Wall = Container.expand(function (width, height) { var self = Container.call(this); // We get a base wall asset and scale it to the desired dimensions var graphics = self.attachAsset('wall', { anchorX: 0.0, // Anchor top-left for easier positioning and scaling anchorY: 0.0, width: width, // Set the actual width height: height // Set the actual height }); // Store dimensions for collision checks self.wallWidth = width; self.wallHeight = height; // No update needed for static walls return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x111111 // Dark background }); /**** * Game Code ****/ // Game constants and variables // Define assets used in the game. These will be automatically created and loaded. function _typeof2(o) { "@babel/helpers - typeof"; return _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof2(o); } function _defineProperty2(e, r, t) { return (r = _toPropertyKey2(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey2(t) { var i = _toPrimitive2(t, "string"); return "symbol" == _typeof2(i) ? i : i + ""; } function _toPrimitive2(t, r) { if ("object" != _typeof2(t) || !t) { return t; } var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof2(i)) { return i; } throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) { return t; } var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) { return i; } throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var gameWidth = 2048; var gameHeight = 2732; var levelTimeLimit = 60; // Seconds var totalLevels = 10; // As per description var requiredCoinsPerLevel = 10; // Maze definitions for 10 levels with increasing difficulty. // Each level: walls array [{x, y, width, height}], coins array [{x, y}], startPos {x, y} var mazeLevels = [ // Level 1: Spiral Maze { walls: [ // --- Outer Borders --- { x: 100, y: 200, width: 1848, height: 50 }, // Top { x: 100, y: 2482, width: 1848, height: 50 }, // Bottom { x: 100, y: 250, width: 50, height: 2232 }, // Left { x: 1898, y: 250, width: 50, height: 2232 }, // Right // --- Spiral Arm 1 (Outer) --- { x: 150, y: 450, width: 1600, height: 50 }, // H1: Top segment (Leaves gap right: 1750-1898) { x: 1750, y: 500, width: 50, height: 1800 }, // V1: Right segment (Leaves gap bottom: 2300-2482) { x: 300, y: 2300, width: 1500, height: 50 }, // H2: Bottom segment (Leaves gap left: 150-300) { x: 300, y: 600, width: 50, height: 1700 }, // V2: Left segment (Leaves gap top: 450-600) // --- Spiral Arm 2 (Inner) --- Path width ~150px { x: 450, y: 600, width: 1150, height: 50 }, // H3: Top segment (Leaves gap right: 1600-1750) { x: 1600, y: 650, width: 50, height: 1500 }, // V3: Right segment (Leaves gap bottom: 2150-2300) { x: 450, y: 2150, width: 1200, height: 50 }, // H4: Bottom segment (Leaves gap left: 300-450) { x: 450, y: 750, width: 50, height: 1400 }, // V4: Left segment (Leaves gap top: 600-750) // --- Spiral Arm 3 (Inner) --- Path width ~150px { x: 600, y: 750, width: 850, height: 50 }, // H5: Top segment (Leaves gap right: 1450-1600) { x: 1450, y: 800, width: 50, height: 1200 }, // V5: Right segment (Leaves gap bottom: 2000-2150) { x: 600, y: 2000, width: 900, height: 50 }, // H6: Bottom segment (Leaves gap left: 450-600) { x: 600, y: 900, width: 50, height: 1100 }, // V6: Left segment (Leaves gap top: 750-900) // --- Spiral Arm 4 (Innermost) --- Path width ~150px { x: 750, y: 900, width: 550, height: 50 }, // H7: Top segment (Leaves gap right: 1300-1450) { x: 1300, y: 950, width: 50, height: 900 }, // V7: Right segment (Leaves gap bottom: 1850-2000) { x: 750, y: 1850, width: 600, height: 50 }, // H8: Bottom segment (Leaves gap left: 600-750) { x: 750, y: 1050, width: 50, height: 800 }, // V8: Left segment (Leaves gap top: 900-1050) // --- Center Area Termination --- Blocks the direct path to the center { x: 900, y: 1050, width: 250, height: 50 }, // Central H block { x: 1100, y: 1100, width: 50, height: 600 } // Central V block ], coins: [ // Place coins along the spiral path { x: 1000, y: 350 }, // Path 1 Top { x: 1825, y: 1000 }, // Path 1 Right { x: 1000, y: 2400 }, // Path 1 Bottom { x: 225, y: 1500 }, // Path 1 Left { x: 1000, y: 675 }, // Path 2 Top { x: 1675, y: 1500 }, // Path 2 Right { x: 1000, y: 2075 }, // Path 2 Bottom { x: 525, y: 1500 }, // Path 2 Left { x: 1000, y: 975 }, // Path 3 Top { x: 1024, y: 1400 } // Center area (end of spiral) ], startPos: { x: 200, y: 350 } // Start at the entrance near top-left }, // Level 2: Hypnotic Maze with Doors { walls: [ // --- Outer Borders (Solid) --- { x: 100, y: 200, width: 1848, height: 50 }, // Top//{3R} //{3M} //{3N} //{3O} //{3P} //{3Q} { x: 100, y: 2482, width: 1848, height: 50 }, // Bottom//{3Y} //{3T} //{3U} //{3V} //{3W} //{3X} { x: 100, y: 250, width: 50, height: 2232 }, // Left//{45} //{40} //{41} //{42} //{43} //{44} { x: 1898, y: 250, width: 50, height: 2232 }, // Right//{4c} //{47} //{48} //{49} //{4a} //{4b} // --- Layer 1 (Outer Square - with gaps) --- // Top Wall (Gap in center) { x: 300, y: 400, width: 800, height: 50 }, //{4e} //{4f} //{4g} { x: 1200, y: 400, width: 548, height: 50 }, //{4h} //{4i} // Bottom Wall (Gap in center) { x: 300, y: 2232, width: 800, height: 50 }, //{4l} //{4m} { x: 1200, y: 2232, width: 548, height: 50 }, //{4n} //{4o} // Left Wall (Gap in center) { x: 300, y: 450, width: 50, height: 841 }, //{4r} //{4s} //{4t} { x: 300, y: 1391, width: 50, height: 841 + 50 }, // Extend to meet bottom wall //{4u} //{4v} // Right Wall (Gap in center) { x: 1698, y: 450, width: 50, height: 841 }, //{4y} //{4z} { x: 1698, y: 1391, width: 50, height: 841 + 50 }, // Extend to meet bottom wall //{4A} //{4B} // --- Layer 2 (Middle Square - with gaps) --- // Top Wall (Gap right side) { x: 500, y: 600, width: 948, height: 50 }, //{4E} //{4F} //{4G} //{4H} //{4I} //{4J} // Bottom Wall (Gap left side) { x: 600, y: 2032, width: 948, height: 50 }, //{4L} //{4M} //{4N} //{4O} //{4P} // Left Wall (Gap bottom side) { x: 500, y: 650, width: 50, height: 1300 }, //{4R} //{4S} //{4T} //{4U} //{4V} //{4W} // Right Wall (Gap top side) { x: 1498, y: 750, width: 50, height: 1282 + 50 }, // Extend to meet bottom wall //{4Y} //{4Z} //{50} //{51} //{52} // --- Layer 3 (Inner Square - with gaps) --- // Top Wall (Gap left side) { x: 800, y: 800, width: 448, height: 50 }, //{54} //{55} //{59} //{5a} //{5b} //{56} //{57} //{58} // Fix duplicate key issue & incorrect structure // Bottom Wall (Gap right side) { x: 700, y: 1832, width: 448, height: 50 }, //{5c} //{5d} //{5e} //{5f} //{5g} //{5h} //{5i} //{5j} //{5k} //{5l} //{5m} // Left Wall (Gap top side) { x: 700, y: 900, width: 50, height: 932 }, //{5o} //{5p} //{5q} //{5r} //{5s} //{5t} //{5u} //{5v} //{5w} //{5x} //{5y} // Right Wall (Gap bottom side) { x: 1248, y: 800, width: 50, height: 932 }, //{5A} //{5B} //{5C} //{5D} //{5E} //{5F} //{5G} //{5H} //{5I} //{5J} //{5K} // --- Central Area (Smallest square - can be target) --- { x: 900, y: 1000, width: 248, height: 50 }, //{5M} //{5N} //{5O} //{5P} //{5Q} //{5R} //{6j} //{6k} //{6l} //{6m} //{6n} { x: 900, y: 1632, width: 248, height: 50 }, //{5S} //{5T} //{5U} //{5V} //{5W} //{6A} //{6B} //{6C} //{6D} //{6E} //{6F} { x: 900, y: 1050, width: 50, height: 582 }, //{5X} //{5Y} //{5Z} //{60} //{61} //{62} //{6d} //{6e} //{6f} //{6g} //{6h} { x: 1098, y: 1050, width: 50, height: 582 } //{63} //{64} //{65} //{66} //{67} //{6p} //{6q} //{6r} //{6s} //{6t} //{6u} //{6v} //{6w} //{6x} //{6y} // Remove diagonal/disorienting elements as gaps provide complexity ], //{7p} // End walls coins: [ // Place coins in accessible locations considering the gaps { x: 1024, y: 300 }, // Start area, outside first square //{7t} //{7r} { x: 200, y: 1341 }, // Outer ring left gap //{7u} //{7v} //{7w} { x: 1800, y: 1341 }, // Outer ring right gap //{7y} //{7z} //{7A} { x: 1024, y: 2350 }, // Outer ring bottom gap //{7C} //{7D} //{7E} { x: 400, y: 500 }, // Between outer/middle rings top-left //{7G} //{7H} //{7I} { x: 1600, y: 500 }, // Between outer/middle rings top-right //{7K} //{7L} //{7M} { x: 550, y: 1341 }, // Middle ring left gap //{7O} //{7P} //{7Q} { x: 1450, y: 1341 }, // Middle ring right gap //{7S} //{7T} //{7U} { x: 800, y: 900 }, // Inner ring top-left corner //{7W} //{7X} //{7Y} { x: 1024, y: 1341 } // Center target area //{80} //{81} ], // End coins startPos: { x: 1024, y: 230 } // Start just above the top outer wall gap //{83} //{84} //{85} }, // Level 3: S-Shape Path { walls: [{ x: 100, y: 200, width: 1848, height: 50 }, // Top { x: 100, y: 2482, width: 1848, height: 50 }, // Bottom { x: 100, y: 250, width: 50, height: 2232 }, // Left { x: 1898, y: 250, width: 50, height: 2232 }, // Right // S-shape walls { x: 100, y: 700, width: 1450, height: 50 }, // Top H segment (left part) { x: 500, y: 1200, width: 1448, height: 50 }, // Middle H segment (right part) { x: 100, y: 1700, width: 1450, height: 50 }, // Bottom H segment (left part) { x: 1500, y: 250, width: 50, height: 450 }, // V segment 1 (top right) { x: 500, y: 750, width: 50, height: 450 }, // V segment 2 (middle left) { x: 1500, y: 1250, width: 50, height: 450 }, // V segment 3 (middle right) { x: 500, y: 1750, width: 50, height: 732 } // V segment 4 (bottom left) ], coins: [{ x: 300, y: 300 }, { x: 1700, y: 450 }, { x: 300, y: 950 }, { x: 1700, y: 950 }, { x: 300, y: 1450 }, { x: 1700, y: 1450 }, { x: 300, y: 2000 }, { x: 1700, y: 2000 }, { x: 1000, y: 1450 }, { x: 1000, y: 950 }], startPos: { x: 200, y: 300 } }, // Level 4: Asymmetric Cross { walls: [ // --- Outer Borders --- { x: 100, y: 200, width: 1848, height: 50 }, // Top { x: 100, y: 2482, width: 1848, height: 50 }, // Bottom { x: 100, y: 250, width: 50, height: 2232 }, // Left { x: 1898, y: 250, width: 50, height: 2232 }, // Right // --- Internal Walls --- // Horizontal dividers { x: 500, y: 800, width: 1448, height: 50 }, // Top H (Gap left) { x: 100, y: 1900, width: 1448, height: 50 }, // Bottom H (Gap right) // Vertical dividers { x: 600, y: 850, width: 50, height: 1632 }, // Left V (Gap top) { x: 1400, y: 250, width: 50, height: 1600 }, // Right V (Gap bottom) // Twist/Blocking walls { x: 150, y: 1000, width: 400, height: 50 }, // Twist block top-left section { x: 1450, y: 1000, width: 400, height: 50 }, // Twist block top-right section { x: 150, y: 1700, width: 400, height: 50 }, // Twist block bottom-left section { x: 1450, y: 1700, width: 400, height: 50 } // Twist block bottom-right section ], coins: [{ x: 300, y: 500 }, // Top Left area (before twist) { x: 300, y: 1300 }, // Top Left area (after twist) { x: 1700, y: 500 }, // Top Right area (before twist) { x: 1700, y: 1300 }, // Top Right area (after twist) { x: 300, y: 2200 }, // Bottom Left area (near corner) { x: 300, y: 1800 }, // Bottom Left area (after twist) { x: 1700, y: 2200 }, // Bottom Right area (near corner) { x: 1700, y: 1800 }, // Bottom Right area (after twist) { x: 1024, y: 1000 }, // Center Top area { x: 1024, y: 1500 } // Center Bottom area ], startPos: { x: 200, y: 300 } // Start Top Left }, // Level 5: Central Hub Branching { walls: [{ x: 100, y: 200, width: 1848, height: 50 }, // Top { x: 100, y: 2482, width: 1848, height: 50 }, // Bottom { x: 100, y: 250, width: 50, height: 2232 }, // Left { x: 1898, y: 250, width: 50, height: 2232 }, // Right // Central Hub Walls (creating a box ~800x800 in center) { x: 624, y: 966, width: 800, height: 50 }, // Hub Top { x: 624, y: 1716, width: 800, height: 50 }, // Hub Bottom { x: 624, y: 1016, width: 50, height: 700 }, // Hub Left { x: 1374, y: 1016, width: 50, height: 700 }, // Hub Right // Branch Walls (connecting hub/borders to create paths) { x: 150, y: 600, width: 1700, height: 50 }, // Top Branch Divider { x: 150, y: 2066, width: 1700, height: 50 }, // Bottom Branch Divider { x: 350, y: 650, width: 50, height: 1416 }, // Left Branch Divider (Inner) { x: 1648, y: 650, width: 50, height: 1416 }, // Right Branch Divider (Inner) // Add some dead ends or twists within branches { x: 150, y: 1341, width: 150, height: 50 }, // Left branch block { x: 1748, y: 1341, width: 150, height: 50 }, // Right branch block { x: 1000, y: 250, width: 50, height: 300 }, // Top branch block { x: 1000, y: 2116, width: 50, height: 300 } // Bottom branch block ], coins: [{ x: 1024, y: 1341 }, // Center Hub { x: 250, y: 400 }, // Top Left Branch { x: 1798, y: 400 }, // Top Right Branch { x: 250, y: 2250 }, // Bottom Left Branch { x: 1798, y: 2250 }, // Bottom Right Branch { x: 250, y: 1341 }, // Mid Left Branch end { x: 1798, y: 1341 }, // Mid Right Branch end { x: 1024, y: 350 }, // Mid Top Branch end { x: 1024, y: 2300 }, // Mid Bottom Branch end { x: 800, y: 1500 } // Inside Hub offset ], startPos: { x: 1024, y: 1341 } // Start in Center Hub }, // Level 6: More complex branching/connections { walls: [{ x: 100, y: 200, width: 1848, height: 50 }, { x: 100, y: 2482, width: 1848, height: 50 }, { x: 100, y: 250, width: 50, height: 2232 }, { x: 1898, y: 250, width: 50, height: 2232 }, // Horizontal dividers { x: 100, y: 800, width: 800, height: 50 }, { x: 1148, y: 800, width: 800, height: 50 }, { x: 100, y: 1300, width: 1848, height: 50 }, { x: 100, y: 1800, width: 800, height: 50 }, { x: 1148, y: 1800, width: 800, height: 50 }, // Vertical dividers { x: 500, y: 250, width: 50, height: 500 }, { x: 500, y: 850, width: 50, height: 400 }, { x: 500, y: 1350, width: 50, height: 400 }, { x: 500, y: 1850, width: 50, height: 632 }, { x: 1500, y: 250, width: 50, height: 500 }, { x: 1500, y: 850, width: 50, height: 400 }, { x: 1500, y: 1350, width: 50, height: 400 }, { x: 1500, y: 1850, width: 50, height: 632 }], coins: [{ x: 300, y: 300 }, { x: 1024, y: 300 }, { x: 1748, y: 300 }, { x: 300, y: 1050 }, { x: 1748, y: 1050 }, { x: 1024, y: 1550 }, // Center area coin { x: 300, y: 2100 }, { x: 1748, y: 2100 }, { x: 800, y: 500 }, { x: 1248, y: 2000 }], startPos: { x: 1024, y: 1550 } // Start near center }, // Level 7: Grid with missing segments { walls: [{ x: 100, y: 200, width: 1848, height: 50 }, { x: 100, y: 2482, width: 1848, height: 50 }, { x: 100, y: 250, width: 50, height: 2232 }, { x: 1898, y: 250, width: 50, height: 2232 }, // Grid lines (approx every 450px) { x: 100, y: 650, width: 1848, height: 50 }, { x: 100, y: 1100, width: 1848, height: 50 }, { x: 100, y: 1550, width: 1848, height: 50 }, { x: 100, y: 2000, width: 1848, height: 50 }, { x: 550, y: 250, width: 50, height: 2232 }, { x: 1000, y: 250, width: 50, height: 2232 }, { x: 1450, y: 250, width: 50, height: 2232 } // Remove segments to create path // (For simplicity, just adding coins in grid cells) ], coins: [ // Place coins in different grid cells { x: 325, y: 425 }, { x: 775, y: 425 }, { x: 1225, y: 425 }, { x: 1675, y: 425 }, { x: 325, y: 875 }, { x: 1675, y: 875 }, // Skip middle cells { x: 325, y: 1325 }, { x: 1675, y: 1325 }, { x: 775, y: 1775 }, { x: 1225, y: 2225 }], startPos: { x: 325, y: 2225 } // Start bottom left }, // Level 8: Spiral (Approximation with Rectangles) { walls: [{ x: 100, y: 200, width: 1848, height: 50 }, { x: 100, y: 2482, width: 1848, height: 50 }, { x: 100, y: 250, width: 50, height: 2232 }, { x: 1898, y: 250, width: 50, height: 2232 }, // Outer spiral path { x: 100, y: 700, width: 1600, height: 50 }, // H1 { x: 1650, y: 250, width: 50, height: 900 }, // V1 { x: 300, y: 1150, width: 1400, height: 50 }, // H2 { x: 250, y: 750, width: 50, height: 850 }, // V2 { x: 250, y: 1600, width: 1200, height: 50 }, // H3 { x: 1450, y: 1150, width: 50, height: 900 }, // V3 { x: 450, y: 2050, width: 1050, height: 50 }, // H4 (inner end) { x: 400, y: 1650, width: 50, height: 400 } // V4 (inner end) ], coins: [ // Place along the spiral path { x: 200, y: 400 }, { x: 1000, y: 400 }, { x: 1800, y: 400 }, // Outer Top { x: 1800, y: 900 }, { x: 1800, y: 1400 }, // Right Down { x: 1000, y: 900 }, // Inner loop 1 { x: 400, y: 900 }, { x: 400, y: 1400 }, // Left Down/Up { x: 400, y: 1800 }, { x: 1000, y: 1800 } // Inner end area ], startPos: { x: 200, y: 300 } // Start near entrance }, // Level 9: Dense Obstacles { walls: [{ x: 100, y: 200, width: 1848, height: 50 }, { x: 100, y: 2482, width: 1848, height: 50 }, { x: 100, y: 250, width: 50, height: 2232 }, { x: 1898, y: 250, width: 50, height: 2232 }, // Many small walls creating tight paths { x: 200, y: 400, width: 200, height: 50 }, { x: 500, y: 400, width: 200, height: 50 }, { x: 800, y: 400, width: 200, height: 50 }, { x: 1100, y: 400, width: 200, height: 50 }, { x: 1400, y: 400, width: 200, height: 50 }, { x: 1700, y: 400, width: 200, height: 50 }, { x: 300, y: 600, width: 50, height: 200 }, { x: 600, y: 600, width: 50, height: 200 }, { x: 900, y: 600, width: 50, height: 200 }, { x: 1200, y: 600, width: 50, height: 200 }, { x: 1500, y: 600, width: 50, height: 200 }, { x: 1800, y: 600, width: 50, height: 200 }, // ... Continue pattern downwards ... { x: 200, y: 900, width: 200, height: 50 }, { x: 500, y: 900, width: 200, height: 50 }, // etc. { x: 300, y: 1100, width: 50, height: 200 }, { x: 600, y: 1100, width: 50, height: 200 }, // etc. { x: 200, y: 1400, width: 200, height: 50 }, { x: 500, y: 1400, width: 200, height: 50 }, // etc. { x: 300, y: 1600, width: 50, height: 200 }, { x: 600, y: 1600, width: 50, height: 200 }, // etc. { x: 200, y: 1900, width: 200, height: 50 }, { x: 500, y: 1900, width: 200, height: 50 }, // etc. { x: 300, y: 2100, width: 50, height: 200 }, { x: 600, y: 2100, width: 50, height: 200 }, // etc. // Mirror pattern on right side { x: 1100, y: 900, width: 200, height: 50 }, { x: 1400, y: 900, width: 200, height: 50 }, { x: 1700, y: 900, width: 200, height: 50 }, { x: 1200, y: 1100, width: 50, height: 200 }, { x: 1500, y: 1100, width: 50, height: 200 }, { x: 1800, y: 1100, width: 50, height: 200 }, { x: 1100, y: 1400, width: 200, height: 50 }, { x: 1400, y: 1400, width: 200, height: 50 }, { x: 1700, y: 1400, width: 200, height: 50 }, { x: 1200, y: 1600, width: 50, height: 200 }, { x: 1500, y: 1600, width: 50, height: 200 }, { x: 1800, y: 1600, width: 50, height: 200 }, { x: 1100, y: 1900, width: 200, height: 50 }, { x: 1400, y: 1900, width: 200, height: 50 }, { x: 1700, y: 1900, width: 200, height: 50 }, { x: 1200, y: 2100, width: 50, height: 200 }, { x: 1500, y: 2100, width: 50, height: 200 }, { x: 1800, y: 2100, width: 50, height: 200 }], coins: [ // Place in tricky spots within the dense grid { x: 250, y: 300 }, { x: 1800, y: 300 }, { x: 400, y: 700 }, { x: 1650, y: 700 }, { x: 750, y: 1000 }, { x: 1300, y: 1000 }, { x: 250, y: 1500 }, { x: 1800, y: 1500 }, { x: 400, y: 2200 }, { x: 1650, y: 2200 }], startPos: { x: 1024, y: 300 } // Start top center }, // Level 10: Final Challenge - Combination { walls: [{ x: 100, y: 200, width: 1848, height: 50 }, { x: 100, y: 2482, width: 1848, height: 50 }, { x: 100, y: 250, width: 50, height: 2232 }, { x: 1898, y: 250, width: 50, height: 2232 }, // Mix of grid, long paths, tight spots // Section 1 (Top Grid) { x: 100, y: 700, width: 1848, height: 50 }, { x: 550, y: 250, width: 50, height: 450 }, { x: 1000, y: 250, width: 50, height: 450 }, { x: 1450, y: 250, width: 50, height: 450 }, // Section 2 (Middle Maze) { x: 100, y: 1200, width: 800, height: 50 }, { x: 1148, y: 1200, width: 800, height: 50 }, { x: 500, y: 750, width: 50, height: 900 }, { x: 1500, y: 750, width: 50, height: 900 }, { x: 100, y: 1650, width: 1848, height: 50 }, // Section 3 (Bottom Spiral-like element) { x: 300, y: 2100, width: 1448, height: 50 }, { x: 1748, y: 1700, width: 50, height: 400 }, { x: 300, y: 1700, width: 50, height: 400 }, { x: 500, y: 1900, width: 1048, height: 50 } // Inner H ], coins: [{ x: 325, y: 400 }, { x: 1675, y: 400 }, // Top Grid { x: 200, y: 900 }, { x: 1800, y: 900 }, // Mid sides { x: 1024, y: 1400 }, // Mid center { x: 400, y: 1800 }, { x: 1600, y: 1800 }, // Lower Mid { x: 200, y: 2300 }, { x: 1800, y: 2300 }, // Bottom Corners { x: 1024, y: 2000 } // Bottom Center (inner) ], startPos: { x: 1024, y: 300 } // Start Top Center } // NOTE: Circular mazes are hard to represent with rectangular walls. // This implementation uses only rectangular walls. ]; // Game state variables var currentLevelIndex = 0; var walls = []; var coins = []; var player = null; var score = 0; var timeLeft = levelTimeLimit; var timerInterval = null; var scoreTxt = null; var timerTxt = null; var levelTxt = null; var levelComplete = false; var isDragging = false; var dragOffset = { x: 0, y: 0 }; // Offset between touch point and player center // --- Helper Functions --- // Clears current level elements function clearLevel() { walls.forEach(function (wall) { wall.destroy(); }); walls = []; coins.forEach(function (coin) { coin.destroy(); }); coins = []; if (player) { player.destroy(); player = null; } levelComplete = false; isDragging = false; } // Loads a level by index function loadLevel(levelIndex) { clearLevel(); if (levelIndex >= mazeLevels.length) { // Handle case where we run out of predefined levels but haven't reached totalLevels console.log("Warning: Ran out of predefined maze data, repeating last level."); levelIndex = mazeLevels.length - 1; // Repeat the last available level // Ideally, generate levels procedurally or add more data. if (levelIndex < 0) { // Should not happen if mazeLevels has data LK.showGameOver(); // No levels defined at all return; } } currentLevelIndex = levelIndex; // Update the global index tracker var levelData = mazeLevels[levelIndex]; // Create walls levelData.walls.forEach(function (wallData) { var wall = new Wall(wallData.width, wallData.height); wall.x = wallData.x; wall.y = wallData.y; game.addChild(wall); walls.push(wall); }); // Create coins levelData.coins.forEach(function (coinData) { var coin = new Coin(); coin.x = coinData.x; coin.y = coinData.y; game.addChild(coin); coins.push(coin); }); // Create player player = new Player(); player.x = levelData.startPos.x; player.y = levelData.startPos.y; game.addChild(player); // Reset score and timer for the new level score = 0; timeLeft = levelTimeLimit; updateScoreDisplay(); updateTimerDisplay(); updateLevelDisplay(); // Update level text startTimer(); } // Checks collision between player (at potential new position) and all walls function checkWallCollision(targetX, targetY) { if (!player) { return true; } // No player, collision is effectively true var playerRadius = player.width / 2; // Assuming player is a circle // Create a hypothetical bounding box for the player at the target position var playerBounds = { left: targetX - playerRadius, right: targetX + playerRadius, top: targetY - playerRadius, bottom: targetY + playerRadius }; for (var i = 0; i < walls.length; i++) { var wall = walls[i]; var wallBounds = { left: wall.x, right: wall.x + wall.wallWidth, // Use stored dimensions top: wall.y, bottom: wall.y + wall.wallHeight // Use stored dimensions }; // Basic AABB collision check if (playerBounds.right > wallBounds.left && playerBounds.left < wallBounds.right && playerBounds.bottom > wallBounds.top && playerBounds.top < wallBounds.bottom) { return true; // Collision detected } } return false; // No collision } // Updates the score display function updateScoreDisplay() { scoreTxt.setText("Coins: " + score + "/" + requiredCoinsPerLevel); } // Updates the timer display function updateTimerDisplay() { timerTxt.setText("Time: " + timeLeft); } // Updates the level display function updateLevelDisplay() { levelTxt.setText("Level: " + (currentLevelIndex + 1)); } // Timer tick function function handleTimerTick() { if (levelComplete) { return; } // Stop timer if level is done timeLeft--; updateTimerDisplay(); if (timeLeft <= 0) { LK.clearInterval(timerInterval); timerInterval = null; LK.showGameOver(); // LK handles the game over state } } // Starts the level timer function startTimer() { if (timerInterval) { LK.clearInterval(timerInterval); } timeLeft = levelTimeLimit; // Reset time updateTimerDisplay(); timerInterval = LK.setInterval(handleTimerTick, 1000); } // Stops the level timer function stopTimer() { if (timerInterval) { LK.clearInterval(timerInterval); timerInterval = null; } } // --- GUI Setup --- // Score display scoreTxt = new Text2('Coins: 0/' + requiredCoinsPerLevel, { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); // Anchor middle-top LK.gui.top.addChild(scoreTxt); // Add to top-center GUI area scoreTxt.y = 20; // Add some padding from the top edge // Timer display timerTxt = new Text2('Time: ' + levelTimeLimit, { size: 60, fill: 0xFFFFFF }); timerTxt.anchor.set(1, 0); // Anchor top-right LK.gui.topRight.addChild(timerTxt); // Add to top-right GUI area timerTxt.y = 20; // Match score padding timerTxt.x = -20; // Add some padding from the right edge // --- Event Handlers --- // Level display levelTxt = new Text2('Level: 1', { size: 60, fill: 0xFFFFFF }); levelTxt.anchor.set(0, 0); // Anchor top-left LK.gui.topLeft.addChild(levelTxt); // Add to top-left GUI area (near pause) levelTxt.x = 110; // Offset from the very corner (reserved area) levelTxt.y = 20; // Match other UI padding game.down = function (x, y, obj) { if (levelComplete) { // If level is complete, tap anywhere to proceed currentLevelIndex++; if (currentLevelIndex < totalLevels) { loadLevel(currentLevelIndex); } else { LK.showYouWin(); // Completed all levels } return; // Don't process drag start } // Check if the press is on the player var playerPos = player.position; var dx = x - playerPos.x; var dy = y - playerPos.y; var distSq = dx * dx + dy * dy; var playerRadius = player.width / 2; // Allow starting drag if touching the player // Add a small tolerance for easier touch if (distSq < playerRadius * playerRadius * 1.5 * 1.5) { isDragging = true; // Calculate offset from player center to touch point // The x, y arguments are already in the game's local coordinate system dragOffset.x = player.x - x; dragOffset.y = player.y - y; } else { isDragging = false; } }; game.move = function (x, y, obj) { if (!isDragging || levelComplete || !player) { return; } // The x, y arguments are already in the game's local coordinate system var targetX = x + dragOffset.x; var targetY = y + dragOffset.y; // Check for collisions *before* moving if (!checkWallCollision(targetX, targetY)) { player.x = targetX; player.y = targetY; } else { // Optional: Try moving only horizontally or vertically if diagonal move fails // Check X movement only if (!checkWallCollision(targetX, player.y)) { player.x = targetX; } // Check Y movement only if (!checkWallCollision(player.x, targetY)) { player.y = targetY; } // If both fail, the player stays put } }; game.up = function (x, y, obj) { isDragging = false; }; // --- Game Update Loop --- game.update = function () { if (levelComplete || !player) { return; } // Don't update if level is done or no player // Check for coin collection var playerRadius = player.width / 2; for (var i = coins.length - 1; i >= 0; i--) { var coin = coins[i]; var dx = player.x - coin.x; var dy = player.y - coin.y; var distance = Math.sqrt(dx * dx + dy * dy); var coinRadius = coin.width / 2; if (distance < playerRadius + coinRadius) { // Collision detected - collect coin score++; updateScoreDisplay(); coin.destroy(); coins.splice(i, 1); // Check for level completion if (score >= requiredCoinsPerLevel) { levelComplete = true; stopTimer(); // Optionally show a "Level Clear! Tap to continue" message // For now, just rely on the game.down handler checking levelComplete console.log("Level " + (currentLevelIndex + 1) + " Complete!"); // Note: LK engine might handle transitions, but the prompt asks for tap to continue. if (currentLevelIndex + 1 >= totalLevels) { // If this was the last level according to totalLevels count LK.showYouWin(); } // Otherwise, wait for tap in game.down break; // Exit loop after collecting a coin and potentially completing level } } } }; // --- Start Game --- loadLevel(currentLevelIndex);
===================================================================
--- original.js
+++ change.js
@@ -55,10 +55,10 @@
/****
* Game Code
****/
-// Define assets used in the game. These will be automatically created and loaded.
// Game constants and variables
+// Define assets used in the game. These will be automatically created and loaded.
function _typeof2(o) {
"@babel/helpers - typeof";
return _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
@@ -353,332 +353,255 @@
x: 200,
y: 350
} // Start at the entrance near top-left
},
-// Level 2: Hypnotic Maze
+// Level 2: Hypnotic Maze with Doors
{
walls: [
- // --- Outer Borders ---
+ // --- Outer Borders (Solid) ---
{
x: 100,
y: 200,
width: 1848,
height: 50
},
- // Top
+ // Top//{3R} //{3M} //{3N} //{3O} //{3P} //{3Q}
{
x: 100,
y: 2482,
width: 1848,
height: 50
},
- // Bottom
+ // Bottom//{3Y} //{3T} //{3U} //{3V} //{3W} //{3X}
{
x: 100,
y: 250,
width: 50,
height: 2232
},
- // Left
+ // Left//{45} //{40} //{41} //{42} //{43} //{44}
{
x: 1898,
y: 250,
width: 50,
height: 2232
},
- // Right
- // --- Hypnotic Concentric Squares ---
- // Outer square (layer 1)
+ // Right//{4c} //{47} //{48} //{49} //{4a} //{4b}
+ // --- Layer 1 (Outer Square - with gaps) ---
+ // Top Wall (Gap in center)
{
x: 300,
y: 400,
- width: 1448,
+ width: 800,
height: 50
},
- // Top
+ //{4e} //{4f} //{4g}
{
+ x: 1200,
+ y: 400,
+ width: 548,
+ height: 50
+ },
+ //{4h} //{4i}
+ // Bottom Wall (Gap in center)
+ {
x: 300,
y: 2232,
- width: 1448,
+ width: 800,
height: 50
},
- // Bottom
+ //{4l} //{4m}
{
+ x: 1200,
+ y: 2232,
+ width: 548,
+ height: 50
+ },
+ //{4n} //{4o}
+ // Left Wall (Gap in center)
+ {
x: 300,
y: 450,
width: 50,
- height: 1782
+ height: 841
},
- // Left
+ //{4r} //{4s} //{4t}
{
+ x: 300,
+ y: 1391,
+ width: 50,
+ height: 841 + 50
+ },
+ // Extend to meet bottom wall //{4u} //{4v}
+ // Right Wall (Gap in center)
+ {
x: 1698,
y: 450,
width: 50,
- height: 1782
+ height: 841
},
- // Right
- // Middle square (layer 2)
+ //{4y} //{4z}
{
+ x: 1698,
+ y: 1391,
+ width: 50,
+ height: 841 + 50
+ },
+ // Extend to meet bottom wall //{4A} //{4B}
+ // --- Layer 2 (Middle Square - with gaps) ---
+ // Top Wall (Gap right side)
+ {
x: 500,
y: 600,
- width: 1048,
+ width: 948,
height: 50
},
- // Top
+ //{4E} //{4F} //{4G} //{4H} //{4I} //{4J}
+ // Bottom Wall (Gap left side)
{
- x: 500,
+ x: 600,
y: 2032,
- width: 1048,
+ width: 948,
height: 50
},
- // Bottom
+ //{4L} //{4M} //{4N} //{4O} //{4P}
+ // Left Wall (Gap bottom side)
{
x: 500,
y: 650,
width: 50,
- height: 1382
+ height: 1300
},
- // Left
+ //{4R} //{4S} //{4T} //{4U} //{4V} //{4W}
+ // Right Wall (Gap top side)
{
x: 1498,
- y: 650,
+ y: 750,
width: 50,
- height: 1382
+ height: 1282 + 50
},
- // Right
- // Inner square (layer 3)
- _defineProperty2(_defineProperty2({
- x: 700,
- y: 800,
- width: 648
- }, "width", 50), "height", 200),
- // Top-left segment
+ // Extend to meet bottom wall //{4Y} //{4Z} //{50} //{51} //{52}
+ // --- Layer 3 (Inner Square - with gaps) ---
+ // Top Wall (Gap left side)
{
- x: 950,
+ x: 800,
y: 800,
- width: 648,
+ width: 448,
height: 50
},
- // Top-right segment
+ //{54} //{55} //{59} //{5a} //{5b} //{56} //{57} //{58} // Fix duplicate key issue & incorrect structure
+ // Bottom Wall (Gap right side)
{
x: 700,
y: 1832,
- width: 648,
+ width: 448,
height: 50
},
- // Bottom-left segment
+ //{5c} //{5d} //{5e} //{5f} //{5g} //{5h} //{5i} //{5j} //{5k} //{5l} //{5m}
+ // Left Wall (Gap top side)
{
- x: 950,
- y: 1832,
- width: 648,
- height: 50
- },
- // Bottom-right segment
- {
x: 700,
- y: 850,
+ y: 900,
width: 50,
- height: 982
+ height: 932
},
- // Left (top segment)
+ //{5o} //{5p} //{5q} //{5r} //{5s} //{5t} //{5u} //{5v} //{5w} //{5x} //{5y}
+ // Right Wall (Gap bottom side)
{
- x: 700,
- y: 1150,
+ x: 1248,
+ y: 800,
width: 50,
- height: 682
+ height: 932
},
- // Left (bottom segment with gap)
+ //{5A} //{5B} //{5C} //{5D} //{5E} //{5F} //{5G} //{5H} //{5I} //{5J} //{5K}
+ // --- Central Area (Smallest square - can be target) ---
{
- x: 1298,
- y: 850,
- width: 50,
- height: 682
- },
- // Right (top segment with gap)
- {
- x: 1298,
- y: 1150,
- width: 50,
- height: 982
- },
- // Right (bottom segment)
- // Spiral elements - connecting passages with intentional gaps to create a confusing path
- {
- x: 750,
+ x: 900,
y: 1000,
- width: 500,
+ width: 248,
height: 50
},
- // Horizontal bridge 1
+ //{5M} //{5N} //{5O} //{5P} //{5Q} //{5R} //{6j} //{6k} //{6l} //{6m} //{6n}
{
- x: 750,
+ x: 900,
y: 1632,
- width: 500,
+ width: 248,
height: 50
},
- // Horizontal bridge 2
+ //{5S} //{5T} //{5U} //{5V} //{5W} //{6A} //{6B} //{6C} //{6D} //{6E} //{6F}
{
- x: 750,
+ x: 900,
y: 1050,
width: 50,
- height: 100
+ height: 582
},
- // Vertical connector 1
+ //{5X} //{5Y} //{5Z} //{60} //{61} //{62} //{6d} //{6e} //{6f} //{6g} //{6h}
{
- x: 1200,
+ x: 1098,
y: 1050,
width: 50,
height: 582
- },
- // Vertical connector 2
+ } //{63} //{64} //{65} //{66} //{67} //{6p} //{6q} //{6r} //{6s} //{6t} //{6u} //{6v} //{6w} //{6x} //{6y}
+ // Remove diagonal/disorienting elements as gaps provide complexity
+ ],
+ //{7p} // End walls
+ coins: [
+ // Place coins in accessible locations considering the gaps
{
- x: 850,
- y: 1300,
- width: 300,
- height: 50
+ x: 1024,
+ y: 300
},
- // Inner horizontal bridge
+ // Start area, outside first square //{7t} //{7r}
{
- x: 850,
- y: 1350,
- width: 50,
- height: 200
+ x: 200,
+ y: 1341
},
- // Inner vertical bridge
- // Central eye - inner most shape with special pattern
+ // Outer ring left gap //{7u} //{7v} //{7w}
{
- x: 900,
- y: 1250,
- width: 100,
- height: 50
+ x: 1800,
+ y: 1341
},
- // Central eye segment 1
+ // Outer ring right gap //{7y} //{7z} //{7A}
{
- x: 1000,
- y: 1250,
- width: 50,
- height: 100
+ x: 1024,
+ y: 2350
},
- // Central eye segment 2
+ // Outer ring bottom gap //{7C} //{7D} //{7E}
{
- x: 950,
- y: 1350,
- width: 100,
- height: 50
- },
- // Central eye segment 3
- {
- x: 950,
- y: 1300,
- width: 50,
- height: 50
- },
- // Central eye segment 4
- // Diagonal/angular elements to add hypnotic effect
- {
x: 400,
- y: 500,
- width: 250,
- height: 50
- },
- // Top-left angular segment
- {
- x: 1350,
- y: 500,
- width: 250,
- height: 50
- },
- // Top-right angular segment
- {
- x: 400,
- y: 2132,
- width: 250,
- height: 50
- },
- // Bottom-left angular segment
- {
- x: 1350,
- y: 2132,
- width: 250,
- height: 50
- },
- // Bottom-right angular segment
- // Disorienting path breaks
- {
- x: 600,
- y: 700,
- width: 150,
- height: 50
- }, {
- x: 1250,
- y: 700,
- width: 150,
- height: 50
- }, {
- x: 600,
- y: 1932,
- width: 150,
- height: 50
- }, {
- x: 1250,
- y: 1932,
- width: 150,
- height: 50
- }],
- coins: [{
- x: 200,
- y: 300
- },
- // Entry coin
- {
- x: 1800,
- y: 300
- },
- // Far top right
- {
- x: 400,
y: 500
},
- // Outer ring top left
+ // Between outer/middle rings top-left //{7G} //{7H} //{7I}
{
x: 1600,
y: 500
},
- // Outer ring top right
+ // Between outer/middle rings top-right //{7K} //{7L} //{7M}
{
- x: 600,
- y: 700
+ x: 550,
+ y: 1341
},
- // Middle ring top left
+ // Middle ring left gap //{7O} //{7P} //{7Q}
{
- x: 1400,
- y: 700
+ x: 1450,
+ y: 1341
},
- // Middle ring top right
+ // Middle ring right gap //{7S} //{7T} //{7U}
{
- x: 1000,
- y: 1000
+ x: 800,
+ y: 900
},
- // Inner path
+ // Inner ring top-left corner //{7W} //{7X} //{7Y}
{
- x: 1000,
- y: 1600
- },
- // Inner path lower
- {
- x: 400,
- y: 2100
- },
- // Bottom outer
- {
- x: 1600,
- y: 2100
- }],
- // Bottom outer right
+ x: 1024,
+ y: 1341
+ } // Center target area //{80} //{81}
+ ],
+ // End coins
startPos: {
- x: 200,
- y: 300
- }
+ x: 1024,
+ y: 230
+ } // Start just above the top outer wall gap //{83} //{84} //{85}
},
// Level 3: S-Shape Path
{
walls: [{