User prompt
make boom sound for every elemnt like treasure, key, diamond and obstacle
User prompt
when the exlporer touches the elements every time change the random places of all elements
User prompt
display in random places all elements like diamond, key, treasure and less amount of obstacles
User prompt
treasure- 75 points , diamond 40 ppoints, key 20 points when it score cross every 500 show the congration message with blast
User prompt
when the explorer is exact below of treasure , key, diamond is equal to the explorer touch it display same output for both actions
User prompt
when the explorer is exact below of treasure , key, diamond then automatically these element are disappear and get points
User prompt
some elements are in the air when the explorer are in the floor the elements are up side of the explorer then also make boom sound and give me points
User prompt
some elements are in the air (flying) soo display that element in the floor only
User prompt
display all the elements ( treasure, key and diamond) in the floor only
User prompt
i need all the elements ( treasure, key and diamond) in the floor of the game only some are on the wall
User prompt
when the explorer touch any of 4 without obstacles then produces some more treasure ,key and diamond and less amount of obstacles
User prompt
if the explorer touches the treasure - 50 points, diamond- 15 points and key - 10 points but when it touches the obstacle then game will end
User prompt
Please fix the bug: 'obstacles is not defined' in or related to this line: 'obstacles.push(obstacle);' Line Number: 408
User prompt
when i start the game then automatically show treasure, key ,diamond and obstacles in random places in the game floor always
User prompt
show some obstacles and keys also in the game
User prompt
my game concept is i have a explorer in the puzzle and also i have treasure ,key and diamond when the explorer touch these this then i will get points and explorer should not move should jump every time in the path when obstacles assets will comes in the way then it will also jump if it touches the obstacles then the game end other wise it will continuing
User prompt
Jump-based Movement – The explorer moves only by jumping from one grid position to another.
User prompt
add some obstacles in the game and also add obstacle asset
User prompt
add obstacles in the game and asset
User prompt
when the explorer once collect the treasuere key and diamond in level 1 then add same treasure key diamond element in random places in the game
Code edit (1 edits merged)
Please save this source code
User prompt
no its not change jump mechanism still the explorer moving
User prompt
change the game mechanism instead of explorer moving add jumping mechanism when click on left mouse button
Code edit (3 edits merged)
Please save this source code
User prompt
change the game mechanism instead of explorer moving add jumping mechanism
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { level: 1, collectedKeys: 0, lives: 3 }); /**** * Classes ****/ var Boom = Container.expand(function () { var self = Container.call(this); var boomGraphics = self.attachAsset('boom', { anchorX: 0.5, anchorY: 0.5 }); self.explode = function () { tween(boomGraphics, { scaleX: 2, scaleY: 2, alpha: 0 }, { duration: 500, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); var Diamond = Container.expand(function () { var self = Container.call(this); var diamondGraphics = self.attachAsset('diamond', { anchorX: 0.5, anchorY: 0.5 }); self.isCollected = false; self.collect = function () { if (!self.isCollected) { self.isCollected = true; tween(diamondGraphics, { scaleX: 1.3, scaleY: 1.3 }, { duration: 300, onFinish: function onFinish() { self.destroy(); } }); LK.setScore(LK.getScore() + 30); // Diamonds give 30 points LK.getSound('collect').play(); } }; self.update = function () { if (!self.isCollected) { // Shine animation var glowIntensity = (Math.sin(LK.ticks / 30) + 1) / 2; diamondGraphics.alpha = 0.7 + glowIntensity * 0.3; } }; return self; }); var Explorer = Container.expand(function () { var self = Container.call(this); self.moveFreely = function (direction) { if (direction === 'fly') { self.y -= tileSize; // Move up by one tile size return; } if (!self.isMoving) { var currentGridPos = getGridPosition(self.x, self.y); var targetGridPos = { x: currentGridPos.x, y: currentGridPos.y }; switch (direction) { case 'up': targetGridPos.y -= 1; break; case 'down': targetGridPos.y += 1; break; case 'left': targetGridPos.x -= 1; break; case 'right': targetGridPos.x += 1; break; } if (isWalkable(targetGridPos.x, targetGridPos.y)) { var cellCenterX = targetGridPos.x * tileSize + tileSize / 2; var cellCenterY = targetGridPos.y * tileSize + tileSize / 2; self.moveToward(cellCenterX, cellCenterY); } } }; var explorerGraphics = self.attachAsset('explorer', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 10; self.isMoving = false; self.direction = null; self.targetX = 0; self.targetY = 0; self.hasKey = false; self.moveToward = function (x, y) { self.isMoving = true; self.targetX = x; self.targetY = y; // Calculate direction var dx = self.targetX - self.x; var dy = self.targetY - self.y; // Determine primary direction based on larger delta if (Math.abs(dx) > Math.abs(dy)) { self.direction = dx > 0 ? 'right' : 'left'; } else { self.direction = dy > 0 ? 'down' : 'up'; } }; self.stopMoving = function () { self.isMoving = false; self.direction = null; }; self.update = function () { if (self.isMoving) { var dx = self.targetX - self.x; var dy = self.targetY - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < self.speed) { self.x = self.targetX; self.y = self.targetY; self.stopMoving(); } else { var ratio = self.speed / distance; self.x += dx * ratio; self.y += dy * ratio; } } }; self.collectKey = function () { self.hasKey = true; tween(explorerGraphics, { tint: 0xFFD700 }, { duration: 300, onFinish: function onFinish() { tween(explorerGraphics, { tint: 0xFFFFFF }, { duration: 300 }); } }); }; self.useKey = function () { self.hasKey = false; storage.collectedKeys++; }; self.takeDamage = function () { LK.effects.flashObject(self, 0xFF0000, 500); storage.lives--; LK.getSound('damage').play(); if (storage.lives <= 0) { LK.showGameOver(); } }; return self; }); var Key = Container.expand(function () { var self = Container.call(this); var keyGraphics = self.attachAsset('key', { anchorX: 0.5, anchorY: 0.5 }); self.isCollected = false; self.collect = function () { if (!self.isCollected) { self.isCollected = true; tween(keyGraphics, { scaleX: 1.3, scaleY: 1.3 }, { duration: 300, onFinish: function onFinish() { self.destroy(); } }); LK.setScore(LK.getScore() + 10); // Keys give 10 points LK.getSound('collect').play(); } }; self.update = function () { if (!self.isCollected) { var glowIntensity = (Math.sin(LK.ticks / 30) + 1) / 2; keyGraphics.alpha = 0.7 + glowIntensity * 0.3; } }; return self; }); var Obstacle = Container.expand(function () { var self = Container.call(this); var obstacleGraphics = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); return self; }); var Treasure = Container.expand(function () { var self = Container.call(this); var treasureGraphics = self.attachAsset('treasure', { anchorX: 0.5, anchorY: 0.5 }); self.isCollected = false; self.collect = function () { if (!self.isCollected) { self.isCollected = true; tween(treasureGraphics, { scaleX: 1.3, scaleY: 1.3 }, { duration: 300, onFinish: function onFinish() { self.destroy(); } }); LK.setScore(LK.getScore() + 50); LK.getSound('collectTreasure').play(); LK.getSound('boom').play(); // Check if all treasures are collected var allCollected = true; for (var i = 0; i < treasures.length; i++) { if (!treasures[i].isCollected) { allCollected = false; break; } } // Removed game end condition when all treasures are collected } }; self.update = function () { if (!self.isCollected) { // Shine animation var glowIntensity = (Math.sin(LK.ticks / 30) + 1) / 2; treasureGraphics.alpha = 0.7 + glowIntensity * 0.3; } }; return self; }); var Wall = Container.expand(function () { var self = Container.call(this); var wallGraphics = self.attachAsset('wall', { anchorX: 0.5, anchorY: 0.5 }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x808080 // Gray/Concrete color for the floor }); /**** * Game Code ****/ function spawnAdditionalItems() { // Define possible positions for new items var possiblePositions = []; for (var i = 0; i < 10; i++) { possiblePositions.push({ x: Math.floor(Math.random() * gridWidth), y: Math.floor(Math.random() * gridHeight) }); } // Randomly select positions for new items possiblePositions.forEach(function (pos) { var randomValue = Math.random(); if (randomValue < 0.4) { // Spawn a key var key = new Key(); key.x = pos.x * tileSize + tileSize / 2; key.y = pos.y * tileSize + tileSize / 2; game.addChild(key); keys.push(key); } else if (randomValue < 0.8) { // Spawn a treasure var treasure = new Treasure(); treasure.x = pos.x * tileSize + tileSize / 2; treasure.y = pos.y * tileSize + tileSize / 2; game.addChild(treasure); treasures.push(treasure); } else { // Spawn a diamond var diamond = new Diamond(); diamond.x = pos.x * tileSize + tileSize / 2; diamond.y = pos.y * tileSize + tileSize / 2; game.addChild(diamond); diamonds.push(diamond); } }); // Spawn fewer obstacles for (var i = 0; i < 3; i++) { var obstaclePos = { x: Math.floor(Math.random() * gridWidth), y: Math.floor(Math.random() * gridHeight) }; var obstacle = new Obstacle(); obstacle.x = obstaclePos.x * tileSize + tileSize / 2; obstacle.y = obstaclePos.y * tileSize + tileSize / 2; game.addChild(obstacle); obstacles.push(obstacle); } } function spawnAdditionalKeysAndTreasures() { // Define possible positions for new keys and treasures var possiblePositions = [{ x: 3, y: 3 }, { x: 7, y: 7 }, { x: 12, y: 12 }, { x: 15, y: 15 } // Add more positions as needed ]; // Randomly select positions for new keys and treasures possiblePositions.forEach(function (pos) { if (Math.random() > 0.5) { // Spawn a key var key = new Key(); key.x = pos.x * tileSize + tileSize / 2; key.y = pos.y * tileSize + tileSize / 2; key.y = explorer.y; // Ensure key is on the same floor level as the explorer game.addChild(key); keys.push(key); } else { // Spawn a treasure var treasure = new Treasure(); treasure.x = pos.x * tileSize + tileSize / 2; treasure.y = pos.y * tileSize + tileSize / 2; treasure.y = explorer.y; // Ensure treasure is on the same floor level as the explorer game.addChild(treasure); treasures.push(treasure); } }); } function shouldRemoveWall(x, y) { // Define conditions to remove walls, e.g., based on position // Example: Remove walls at specific coordinates var removablePositions = [{ x: 5, y: 5 }, { x: 10, y: 10 } // Add more positions as needed ]; return removablePositions.some(function (pos) { return pos.x === x && pos.y === y; }); } // New diamond asset // Game variables var keys = []; var lastCelebratedScore = 0; var tileSize = 100; var gridWidth = 20; var gridHeight = 27; var explorer; var walls = []; var diamonds = []; var obstacles = []; var doors = []; var treasures = []; var spikes = []; var diamonds = []; var fallingRocks = []; var levelGrid = []; var gameStarted = false; // UI Elements var scoreTxt = new Text2('0', { size: 80, fill: 0xFFFFFF }); var levelTxt = new Text2('Level: ' + storage.level, { size: 60, fill: 0xFFFFFF }); var keysTxt = new Text2('Keys: ' + storage.collectedKeys, { size: 60, fill: 0xFFD700 }); var livesTxt = new Text2('Lives: ' + storage.lives, { size: 60, fill: 0xFF5252 }); // Initialize game function initializeGame() { // Clear previous game elements resetGameElements(); // Generate level based on current level generateLevel(storage.level); // Initialize explorer createExplorer(); // Setup UI setupUI(); // Randomly place treasures, keys, diamonds, and obstacles on the game floor for (var i = 0; i < 5; i++) { var treasure = new Treasure(); treasure.x = Math.random() * gridWidth * tileSize; treasure.y = Math.random() * gridHeight * tileSize; game.addChild(treasure); treasures.push(treasure); var key = new Key(); key.x = Math.random() * gridWidth * tileSize; key.y = Math.random() * gridHeight * tileSize; game.addChild(key); keys.push(key); var diamond = new Diamond(); diamond.x = Math.random() * gridWidth * tileSize; diamond.y = Math.random() * gridHeight * tileSize; game.addChild(diamond); diamonds.push(diamond); var obstacle = new Obstacle(); obstacle.x = Math.random() * gridWidth * tileSize; obstacle.y = Math.random() * gridHeight * tileSize; game.addChild(obstacle); obstacles.push(obstacle); } // Start game gameStarted = true; // Play background music with fade-in effect LK.playMusic('caveMusic', { fade: { start: 0, end: 0.5, duration: 1000 } }); } function resetGameElements() { // Remove all existing game elements for (var i = 0; i < walls.length; i++) { walls[i].destroy(); } walls = []; for (var i = 0; i < diamonds.length; i++) { diamonds[i].destroy(); } diamonds = []; for (var i = 0; i < treasures.length; i++) { treasures[i].destroy(); } treasures = []; for (var i = 0; i < fallingRocks.length; i++) { fallingRocks[i].destroy(); } fallingRocks = []; levelGrid = []; if (explorer) { explorer.destroy(); explorer = null; } } function createExplorer() { explorer = new Explorer(); game.addChild(explorer); // Position explorer at start position for (var y = 0; y < gridHeight; y++) { for (var x = 0; x < gridWidth; x++) { if (levelGrid[y][x] === 'S') { explorer.x = x * tileSize + tileSize / 2; explorer.y = y * tileSize + tileSize / 2; break; } } } } function setupUI() { // Setup collection title var collectionTitleTxt = new Text2('Collection:', { size: 60, fill: 0xFFD700, // Gold color fontWeight: 'bold' // Add bold font }); collectionTitleTxt.anchor.set(1, 0); LK.gui.topRight.addChild(collectionTitleTxt); scoreTxt.setText(LK.getScore()); scoreTxt.anchor.set(1, 0); scoreTxt.y = 60; // Adjust position to be below the title LK.gui.topRight.addChild(scoreTxt); // Setup level text levelTxt.setText('Level: ' + storage.level); levelTxt.anchor.set(0.5, 0); levelTxt.y = 80; LK.gui.top.addChild(levelTxt); // Setup keys text keysTxt.setText('Keys: ' + storage.collectedKeys); keysTxt.anchor.set(0, 0); keysTxt.y = 80; LK.gui.topRight.addChild(keysTxt); // Setup lives text livesTxt.setText('Lives: ' + storage.lives); livesTxt.anchor.set(0, 0); LK.gui.topRight.addChild(livesTxt); } function generateLevel(level) { // Define different level layouts var layouts = []; // Level 1: Simple tutorial level layouts[1] = ["WWWWWWWWWWWWWWWWWWWW", "W W W", "W WWWWWW W WWWWWWW W", "W W K W W", "W W WWWWWWWWWWWW W W", "W W W W W", "W W W WWWWWWWWWW W W", "W W W W W W W", "W W W W WWWWWW W W W", "W W W W W W W W W", "W W W W W WW W W W W", "W W W W W W W W", "W WWWWW WWWWWWWW W W", "W W W", "W WWWWWWWWWWWWWWWW W", "W W", "W WWWWWWWW WWWWWWW W", "W W W W W", "W W WWWW WWWWWWW W W", "W W W W W W", "W W W WWWWWWWWW W W W", "W W W W W W W", "W W WWWWWWWWW W W W W", " DW W W W W", "TST ", "W W W", "WWWWWWWWWWWWWWWWWWWWW"]; var currentLayout = layouts[1]; // Parse level layout for (var y = 0; y < currentLayout.length; y++) { levelGrid[y] = []; for (var x = 0; x < currentLayout[y].length; x++) { var cellType = currentLayout[y][x]; levelGrid[y][x] = cellType; var xPos = x * tileSize + tileSize / 2; var Pos = xPos; // Define Pos variable var yPos = y * tileSize + tileSize / 2; switch (cellType) { case 'W': // Wall if (!shouldRemoveWall(x, y)) { var wall = new Wall(); wall.x = Pos; wall.y = yPos; game.addChild(wall); walls.push(wall); } else { // Log or handle the removal of the wall for debugging or game design purposes console.log("Wall at (".concat(x, ", ").concat(y, ") removed to clear the path.")); } break; case 'K': // Diamond var diamond = new Diamond(); diamond.x = xPos; diamond.y = yPos; game.addChild(diamond); diamonds.push(diamond); break; case 'T': // Treasure var treasure = new Treasure(); treasure.x = xPos; treasure.y = yPos; game.addChild(treasure); treasures.push(treasure); break; case 'K': // Key var key = new Key(); key.x = xPos; key.y = yPos; game.addChild(key); keys.push(key); break; case 'D': // Diamond var diamond = new Diamond(); diamond.x = xPos; diamond.y = yPos; game.addChild(diamond); diamonds.push(diamond); break; case 'O': // Obstacle var obstacle = new Obstacle(); obstacle.x = xPos; obstacle.y = yPos; game.addChild(obstacle); obstacles.push(obstacle); break; } } } } function getGridPosition(x, y) { var gridX = Math.floor(x / tileSize); var gridY = Math.floor(y / tileSize); if (gridX >= 0 && gridX < gridWidth && gridY >= 0 && gridY < gridHeight) { return { x: gridX, y: gridY }; } return null; } function isWalkable(gridX, gridY) { if (gridX < 0 || gridX >= gridWidth || gridY < 0 || gridY >= gridHeight) { return false; } var cellType = levelGrid[gridY][gridX]; // Check if cell is walkable if (cellType === 'W') { return false; } return true; } function getDoorAt(gridX, gridY) { for (var i = 0; i < doors.length; i++) { var doorPos = getGridPosition(doors[i].x, doors[i].y); if (doorPos && doorPos.x === gridX && doorPos.y === gridY) { return doors[i]; } } return null; } function getRiverAt(gridX, gridY) { for (var i = 0; i < rivers.length; i++) { var riverPos = getGridPosition(rivers[i].x, rivers[i].y); if (riverPos && riverPos.x === gridX && riverPos.y === gridY) { return rivers[i]; } } return null; } // Update UI function updateUI() { scoreTxt.setText(LK.getScore()); levelTxt.setText('Level: ' + storage.level); keysTxt.setText('Keys: ' + storage.collectedKeys); livesTxt.setText('Lives: ' + storage.lives); } // Check for collisions function checkCollisions() { if (!explorer) { return; } var explorerPos = getGridPosition(explorer.x, explorer.y); if (!explorerPos) { return; } var cellType = levelGrid[explorerPos.y][explorerPos.x]; // Check diamond collision if (cellType === 'K') { for (var i = 0; i < diamonds.length; i++) { var diamondPos = getGridPosition(diamonds[i].x, diamonds[i].y); if (diamondPos && diamondPos.x === explorerPos.x && diamondPos.y === explorerPos.y && !diamonds[i].isCollected) { diamonds[i].collect(); spawnAdditionalItems(); break; } } } // Check treasure collision if (cellType === 'T') { for (var i = 0; i < treasures.length; i++) { var treasurePos = getGridPosition(treasures[i].x, treasures[i].y); if (treasurePos && treasurePos.x === explorerPos.x && treasurePos.y === explorerPos.y && !treasures[i].isCollected) { treasures[i].collect(); spawnAdditionalItems(); break; } } } // Check key collision for (var i = 0; i < keys.length; i++) { var keyPos = getGridPosition(keys[i].x, keys[i].y); if (keyPos && keyPos.x === explorerPos.x && keyPos.y === explorerPos.y && !keys[i].isCollected) { keys[i].collect(); spawnAdditionalItems(); break; } } // Check obstacle collision for (var i = 0; i < obstacles.length; i++) { var obstaclePos = getGridPosition(obstacles[i].x, obstacles[i].y); if (obstaclePos && obstaclePos.x === explorerPos.x && obstaclePos.y === explorerPos.y) { LK.showGameOver(); break; } } } function moveExplorer(targetX, targetY) { if (!explorer || explorer.isjumping) { return; } var currentGridPos = getGridPosition(explorer.x, explorer.y); var targetGridPos = getGridPosition(targetX, targetY); if (!currentGridPos || !targetGridPos) { return; } // Use pathfinding to find a path to the target var path = findPath(currentGridPos, targetGridPos); if (path && path.length > 0) { var nextStep = path[0]; var cellCenterX = nextStep.x * tileSize + tileSize / 2; var cellCenterY = nextStep.y * tileSize + tileSize / 2; explorer.moveToward(cellCenterX, cellCenterY); } // Check if the explorer is at the diamond's position if (levelGrid[currentGridPos.y][currentGridPos.x] === 'K') { explorer.collectKey(); for (var i = 0; i < diamonds.length; i++) { var diamondPos = getGridPosition(diamonds[i].x, diamonds[i].y); if (diamondPos && diamondPos.x === currentGridPos.x && diamondPos.y === currentGridPos.y) { diamonds[i].destroy(); diamonds.splice(i, 1); levelGrid[currentGridPos.y][currentGridPos.x] = ' '; LK.getSound('collect').play(); break; } } } } function findPath(start, end) { // Implement a simple pathfinding algorithm, e.g., A* or BFS // This is a placeholder for the pathfinding logic // Return an array of grid positions from start to end return []; } // Handle touch/mouse events function handleGameInput(x, y, obj) { if (!gameStarted) { return; } var direction = null; var currentGridPos = getGridPosition(explorer.x, explorer.y); var targetGridPos = getGridPosition(x, y); if (targetGridPos) { if (targetGridPos.x < currentGridPos.x) { direction = 'left'; } else if (targetGridPos.x > currentGridPos.x) { direction = 'right'; } else if (targetGridPos.y < currentGridPos.y) { direction = 'up'; } else if (targetGridPos.y > currentGridPos.y) { direction = 'down'; } if (direction) { if (direction === 'up' && targetGridPos.y < currentGridPos.y - 1) { direction = 'fly'; } explorer.moveFreely(direction); } // Check for left mouse button click to make the explorer jump if (obj.event && obj.event.button === 0) { // Left mouse button if (!explorer.isMoving) { var currentGridPos = getGridPosition(explorer.x, explorer.y); var targetGridPos = { x: currentGridPos.x, y: currentGridPos.y - 2 // Jump up two tiles }; if (isWalkable(targetGridPos.x, targetGridPos.y)) { var cellCenterX = targetGridPos.x * tileSize + tileSize / 2; var cellCenterY = targetGridPos.y * tileSize + tileSize / 2; explorer.moveToward(cellCenterX, cellCenterY); } } } } // Check for left mouse button click to make the explorer jump if (obj.event && obj.event.button === 0) { // Left mouse button if (!explorer.isMoving) { var currentGridPos = getGridPosition(explorer.x, explorer.y); var targetGridPos = { x: currentGridPos.x, y: currentGridPos.y - 2 // Jump up two tiles }; if (isWalkable(targetGridPos.x, targetGridPos.y)) { var cellCenterX = targetGridPos.x * tileSize + tileSize / 2; var cellCenterY = targetGridPos.y * tileSize + tileSize / 2; explorer.moveToward(cellCenterX, cellCenterY); } } } } // Start game when page loads initializeGame(); // Handle touch/mouse events game.down = handleGameInput; // Game update loop game.update = function () { if (!gameStarted) { return; } // Update UI updateUI(); // Check collisions checkCollisions(); // Check for score milestones and trigger celebration var currentScore = LK.getScore(); if (currentScore % 100 === 0 && currentScore !== 0 && currentScore !== lastCelebratedScore) { lastCelebratedScore = currentScore; // Play boom sound LK.getSound('boom').play(); // Display congratulations message var message = new Text2("Congratulations! You crossed ".concat(currentScore, "!"), { size: 100, fill: 0xFFD700, fontWeight: 'bold' }); message.anchor.set(0.5, 0.5); message.x = 2048 / 2; message.y = 2732 / 2; game.addChild(message); // Remove message after 4 seconds LK.setTimeout(function () { message.destroy(); }, 4000); // Trigger color paper blast effect in big size var color = 0xFFD700; // Gold color var paper = new Container(); var paperGraphics = paper.attachAsset('boom', { anchorX: 0.5, anchorY: 0.5 }); paperGraphics.tint = color; paper.x = 2048 / 2; paper.y = 2732 / 2; game.addChild(paper); tween(paperGraphics, { scaleX: 20, // Increase size for a much bigger effect scaleY: 20, // Increase size for a much bigger effect // Increase size for a bigger effect // Increase size for a bigger effect alpha: 0 }, { duration: 4000, onFinish: function onFinish() { paper.destroy(); } }); } };
===================================================================
--- original.js
+++ change.js
@@ -269,8 +269,56 @@
/****
* Game Code
****/
+function spawnAdditionalItems() {
+ // Define possible positions for new items
+ var possiblePositions = [];
+ for (var i = 0; i < 10; i++) {
+ possiblePositions.push({
+ x: Math.floor(Math.random() * gridWidth),
+ y: Math.floor(Math.random() * gridHeight)
+ });
+ }
+ // Randomly select positions for new items
+ possiblePositions.forEach(function (pos) {
+ var randomValue = Math.random();
+ if (randomValue < 0.4) {
+ // Spawn a key
+ var key = new Key();
+ key.x = pos.x * tileSize + tileSize / 2;
+ key.y = pos.y * tileSize + tileSize / 2;
+ game.addChild(key);
+ keys.push(key);
+ } else if (randomValue < 0.8) {
+ // Spawn a treasure
+ var treasure = new Treasure();
+ treasure.x = pos.x * tileSize + tileSize / 2;
+ treasure.y = pos.y * tileSize + tileSize / 2;
+ game.addChild(treasure);
+ treasures.push(treasure);
+ } else {
+ // Spawn a diamond
+ var diamond = new Diamond();
+ diamond.x = pos.x * tileSize + tileSize / 2;
+ diamond.y = pos.y * tileSize + tileSize / 2;
+ game.addChild(diamond);
+ diamonds.push(diamond);
+ }
+ });
+ // Spawn fewer obstacles
+ for (var i = 0; i < 3; i++) {
+ var obstaclePos = {
+ x: Math.floor(Math.random() * gridWidth),
+ y: Math.floor(Math.random() * gridHeight)
+ };
+ var obstacle = new Obstacle();
+ obstacle.x = obstaclePos.x * tileSize + tileSize / 2;
+ obstacle.y = obstaclePos.y * tileSize + tileSize / 2;
+ game.addChild(obstacle);
+ obstacles.push(obstacle);
+ }
+}
function spawnAdditionalKeysAndTreasures() {
// Define possible positions for new keys and treasures
var possiblePositions = [{
x: 3,
@@ -605,8 +653,9 @@
for (var i = 0; i < diamonds.length; i++) {
var diamondPos = getGridPosition(diamonds[i].x, diamonds[i].y);
if (diamondPos && diamondPos.x === explorerPos.x && diamondPos.y === explorerPos.y && !diamonds[i].isCollected) {
diamonds[i].collect();
+ spawnAdditionalItems();
break;
}
}
}
@@ -615,8 +664,9 @@
for (var i = 0; i < treasures.length; i++) {
var treasurePos = getGridPosition(treasures[i].x, treasures[i].y);
if (treasurePos && treasurePos.x === explorerPos.x && treasurePos.y === explorerPos.y && !treasures[i].isCollected) {
treasures[i].collect();
+ spawnAdditionalItems();
break;
}
}
}
@@ -624,8 +674,9 @@
for (var i = 0; i < keys.length; i++) {
var keyPos = getGridPosition(keys[i].x, keys[i].y);
if (keyPos && keyPos.x === explorerPos.x && keyPos.y === explorerPos.y && !keys[i].isCollected) {
keys[i].collect();
+ spawnAdditionalItems();
break;
}
}
// Check obstacle collision
small rock. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
a magic crackers boom effect. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
create a glod color key. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows