User prompt
make it when ever the same item collides with another of the same item it upgrades โช๐ก Consider importing and using the following plugins: @upit/tween.v1
User prompt
make the stone/wood spawn every 2 seconds
User prompt
make the stone/wood spawn every .5 seconds
User prompt
make grid 6x8
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'to')' in or related to this line: 'tween(self).to({' Line Number: 59 โช๐ก Consider importing and using the following plugins: @upit/tween.v1
User prompt
make the dag n drop feters better
User prompt
make only stone and wood spawn randomely
User prompt
make a all new items apear on any grid cells
User prompt
make the grid 12x12
User prompt
make the items apear on a 3x3 grid
User prompt
its not working
Code edit (1 edits merged)
Please save this source code
User prompt
Fanatic Craft
Initial prompt
ifanate craft
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var CraftItem = Container.expand(function (itemType) { var self = Container.call(this); self.itemType = itemType; self.gridX = -1; self.gridY = -1; self.isDragging = false; self.startX = 0; self.startY = 0; // Create visual representation var itemGraphics = self.attachAsset(itemType, { anchorX: 0.5, anchorY: 0.5 }); // Add item type text var itemText = new Text2(getItemDisplayName(itemType), { size: 16, fill: 0xFFFFFF }); itemText.anchor.set(0.5, 0.5); itemText.y = 50; self.addChild(itemText); self.down = function (x, y, obj) { self.startX = self.x; self.startY = self.y; if (self.gridX !== -1 && self.gridY !== -1) { // Remove from grid grid[self.gridY][self.gridX] = null; } self.isDragging = true; // Bring to front self.parent.addChild(self); }; return self; }); var GridCell = Container.expand(function (gridX, gridY) { var self = Container.call(this); self.gridX = gridX; self.gridY = gridY; var cellGraphics = self.attachAsset('grid_cell', { anchorX: 0.5, anchorY: 0.5 }); cellGraphics.alpha = 0.3; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a1a }); /**** * Game Code ****/ // Sounds // Grid cell // Magical artifacts // Advanced items // Tools // Basic materials // Game constants var GRID_WIDTH = 12; var GRID_HEIGHT = 12; var CELL_SIZE = 85; var GRID_START_X = 2048 / 2 - GRID_WIDTH * CELL_SIZE / 2; var GRID_START_Y = 600; // Game state var grid = []; var items = []; var draggedItem = null; var score = 0; // Crafting recipes var recipes = { 'wood': 'stick', 'stick': 'axe', 'stone': 'iron', 'iron': 'pickaxe', 'axe': 'sword', 'pickaxe': 'shield', 'sword': 'crystal', 'shield': 'crystal', 'crystal': 'enchanted_sword' }; // Item values var itemValues = { 'wood': 1, 'stone': 1, 'stick': 3, 'iron': 3, 'axe': 10, 'pickaxe': 10, 'sword': 25, 'shield': 25, 'crystal': 50, 'enchanted_sword': 100 }; // Initialize grid for (var y = 0; y < GRID_HEIGHT; y++) { grid[y] = []; for (var x = 0; x < GRID_WIDTH; x++) { grid[y][x] = null; // Create visual grid cell var cell = new GridCell(x, y); cell.x = GRID_START_X + x * CELL_SIZE; cell.y = GRID_START_Y + y * CELL_SIZE; game.addChild(cell); } } // Score display var scoreTxt = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Instructions var instructionTxt = new Text2('Drag identical items together to combine them!', { size: 40, fill: 0xFFFF00 }); instructionTxt.anchor.set(0.5, 0); instructionTxt.y = 100; game.addChild(instructionTxt); function getItemDisplayName(itemType) { var names = { 'wood': 'Wood', 'stone': 'Stone', 'stick': 'Stick', 'iron': 'Iron', 'axe': 'Axe', 'pickaxe': 'Pick', 'sword': 'Sword', 'shield': 'Shield', 'crystal': 'Crystal', 'enchanted_sword': 'Magic' }; return names[itemType] || itemType; } function getGridPosition(x, y) { var gridX = Math.round((x - GRID_START_X) / CELL_SIZE); var gridY = Math.round((y - GRID_START_Y) / CELL_SIZE); if (gridX >= 0 && gridX < GRID_WIDTH && gridY >= 0 && gridY < GRID_HEIGHT) { return { x: gridX, y: gridY }; } return null; } function isValidGridPosition(gridX, gridY) { return gridX >= 0 && gridX < GRID_WIDTH && gridY >= 0 && gridY < GRID_HEIGHT; } function placeItemInGrid(item, gridX, gridY) { if (!isValidGridPosition(gridX, gridY) || grid[gridY][gridX] !== null) { return false; } grid[gridY][gridX] = item; item.gridX = gridX; item.gridY = gridY; item.x = GRID_START_X + gridX * CELL_SIZE + CELL_SIZE / 2; item.y = GRID_START_Y + gridY * CELL_SIZE + CELL_SIZE / 2; return true; } function findEmptyGridSlot() { for (var y = 0; y < GRID_HEIGHT; y++) { for (var x = 0; x < GRID_WIDTH; x++) { if (grid[y][x] === null) { return { x: x, y: y }; } } } return null; } function spawnRandomItem() { var itemTypes = ['wood', 'stone']; var randomType = itemTypes[Math.floor(Math.random() * itemTypes.length)]; var emptySlot = findEmptyGridSlot(); if (emptySlot) { var newItem = new CraftItem(randomType); game.addChild(newItem); items.push(newItem); placeItemInGrid(newItem, emptySlot.x, emptySlot.y); LK.getSound('place').play(); } } function checkForCombinations(item) { if (item.gridX === -1 || item.gridY === -1) return false; var itemType = item.itemType; var gridX = item.gridX; var gridY = item.gridY; // Check adjacent cells for same item type var directions = [{ dx: 0, dy: -1 }, // up { dx: 1, dy: 0 }, // right { dx: 0, dy: 1 }, // down { dx: -1, dy: 0 } // left ]; for (var i = 0; i < directions.length; i++) { var dir = directions[i]; var checkX = gridX + dir.dx; var checkY = gridY + dir.dy; if (isValidGridPosition(checkX, checkY) && grid[checkY][checkX]) { var otherItem = grid[checkY][checkX]; if (otherItem.itemType === itemType && recipes[itemType]) { // Combine items var newItemType = recipes[itemType]; // Remove both items grid[gridY][gridX] = null; grid[checkY][checkX] = null; // Remove from items array var itemIndex = items.indexOf(item); if (itemIndex !== -1) items.splice(itemIndex, 1); var otherIndex = items.indexOf(otherItem); if (otherIndex !== -1) items.splice(otherIndex, 1); // Destroy old items item.destroy(); otherItem.destroy(); // Create new item var newItem = new CraftItem(newItemType); game.addChild(newItem); items.push(newItem); placeItemInGrid(newItem, gridX, gridY); // Update score score += itemValues[newItemType] || 1; scoreTxt.setText('Score: ' + score); // Play sound LK.getSound('combine').play(); // Flash effect LK.effects.flashObject(newItem, 0x00ff00, 500); return true; } } } return false; } // Spawn initial items for (var i = 0; i < 8; i++) { spawnRandomItem(); } // Game event handlers game.move = function (x, y, obj) { if (draggedItem) { draggedItem.x = x; draggedItem.y = y; } }; game.down = function (x, y, obj) { // Find if we clicked on an item for (var i = items.length - 1; i >= 0; i--) { var item = items[i]; // Check if click is within item bounds (using center-anchored 60x60 items) var itemLeft = item.x - 30; var itemRight = item.x + 30; var itemTop = item.y - 30; var itemBottom = item.y + 30; if (x >= itemLeft && x <= itemRight && y >= itemTop && y <= itemBottom) { draggedItem = item; item.down(x, y, obj); break; } } }; game.up = function (x, y, obj) { if (draggedItem) { var gridPos = getGridPosition(x, y); var placed = false; if (gridPos && grid[gridPos.y][gridPos.x] === null) { // Place in grid placed = placeItemInGrid(draggedItem, gridPos.x, gridPos.y); if (placed) { // Check for combinations checkForCombinations(draggedItem); LK.getSound('place').play(); } } if (!placed) { // Return to original position or find empty slot var emptySlot = findEmptyGridSlot(); if (emptySlot) { placeItemInGrid(draggedItem, emptySlot.x, emptySlot.y); } else { // Return to start position draggedItem.x = draggedItem.startX; draggedItem.y = draggedItem.startY; } } draggedItem.isDragging = false; draggedItem = null; } }; // Spawn timer var spawnTimer = 0; var spawnInterval = 300; // 5 seconds at 60fps game.update = function () { spawnTimer++; if (spawnTimer >= spawnInterval) { spawnRandomItem(); spawnTimer = 0; // Gradually increase spawn rate if (spawnInterval > 60) { spawnInterval--; } } // Check for game over (grid full) var gridFull = true; for (var y = 0; y < GRID_HEIGHT && gridFull; y++) { for (var x = 0; x < GRID_WIDTH && gridFull; x++) { if (grid[y][x] === null) { gridFull = false; } } } if (gridFull) { LK.showGameOver(); } // Win condition - score threshold if (score >= 1000) { LK.showYouWin(); } };
===================================================================
--- original.js
+++ change.js
@@ -68,13 +68,13 @@
// Advanced items
// Tools
// Basic materials
// Game constants
-var GRID_WIDTH = 3;
-var GRID_HEIGHT = 3;
-var CELL_SIZE = 120;
+var GRID_WIDTH = 12;
+var GRID_HEIGHT = 12;
+var CELL_SIZE = 85;
var GRID_START_X = 2048 / 2 - GRID_WIDTH * CELL_SIZE / 2;
-var GRID_START_Y = 800;
+var GRID_START_Y = 600;
// Game state
var grid = [];
var items = [];
var draggedItem = null;
@@ -260,9 +260,9 @@
}
return false;
}
// Spawn initial items
-for (var i = 0; i < 2; i++) {
+for (var i = 0; i < 8; i++) {
spawnRandomItem();
}
// Game event handlers
game.move = function (x, y, obj) {
@@ -274,13 +274,13 @@
game.down = function (x, y, obj) {
// Find if we clicked on an item
for (var i = items.length - 1; i >= 0; i--) {
var item = items[i];
- // Check if click is within item bounds (using center-anchored 80x80 items)
- var itemLeft = item.x - 40;
- var itemRight = item.x + 40;
- var itemTop = item.y - 40;
- var itemBottom = item.y + 40;
+ // Check if click is within item bounds (using center-anchored 60x60 items)
+ var itemLeft = item.x - 30;
+ var itemRight = item.x + 30;
+ var itemTop = item.y - 30;
+ var itemBottom = item.y + 30;
if (x >= itemLeft && x <= itemRight && y >= itemTop && y <= itemBottom) {
draggedItem = item;
item.down(x, y, obj);
break;
iron ingot. In-Game asset. 2d. High contrast. No shadows
christal. In-Game asset. 2d. High contrast. No shadows
sheild. In-Game asset. 2d. High contrast. No shadows
pickaxe. In-Game asset. 2d. High contrast. No shadows
stone. In-Game asset. 2d. High contrast. No shadows
netherite sword. In-Game asset. 2d. High contrast. No shadows