/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
coins: 0,
pickLevel: 1
});
/****
* Classes
****/
var Digger = Container.expand(function () {
var self = Container.call(this);
var diggerGraphics = self.attachAsset('digger', {
anchorX: 0.5,
anchorY: 0.5
});
self.digging = false;
self.digStrength = 1;
self.startDig = function (targetX, targetY) {
self.digging = true;
self.x = targetX;
self.y = targetY;
// Make digger appear to dig with animation
tween(diggerGraphics, {
rotation: Math.PI * 2
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
diggerGraphics.rotation = 0;
self.digging = false;
}
});
};
self.upgrade = function (level) {
self.digStrength = level;
// Visual indication of upgraded digger
diggerGraphics.scaleX = 1 + level * 0.1;
diggerGraphics.scaleY = 1 + level * 0.1;
};
return self;
});
var Dirt = Container.expand(function (type, gemType) {
var self = Container.call(this);
var assetType = type === 'hard' ? 'hardDirt' : 'normalDirt';
var dirtGraphics = self.attachAsset(assetType, {
anchorX: 0.5,
anchorY: 0.5
});
self.health = type === 'hard' ? 3 : 1;
self.originalHealth = self.health;
self.hasGem = gemType > 0;
self.gemType = gemType;
// Reveal gem if this dirt has one
if (self.hasGem) {
var gemAsset = 'gem' + gemType;
var gemGraphics = self.attachAsset(gemAsset, {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0 // Hidden initially
});
self.gem = gemGraphics;
}
self.dig = function (strength) {
self.health -= strength;
if (self.health <= 0) {
// Dirt is completely dug
dirtGraphics.alpha = 0;
// Reveal gem if exists
if (self.hasGem && self.gem) {
self.gem.alpha = 1;
return true;
}
} else {
// Visual feedback that dirt is being dug
dirtGraphics.alpha = self.health / self.originalHealth;
}
return false;
};
self.collectGem = function () {
if (self.hasGem && self.gem && self.gem.alpha > 0) {
self.gem.alpha = 0;
return self.gemType;
}
return 0;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Game constants
var GRID_WIDTH = 6;
var GRID_HEIGHT = 8;
var CELL_SIZE = 120;
var GRID_PADDING_X = (2048 - GRID_WIDTH * CELL_SIZE) / 2;
var GRID_PADDING_Y = 500;
// Game variables
var digger;
var grid = [];
var score = 0;
var level = 1;
var coinsCollected = 0;
var pickLevel = storage.pickLevel || 1;
var coins = storage.coins || 0;
// UI elements
var scoreTxt;
var levelTxt;
var coinsTxt;
var upgradeBtn;
// Initialize game
function initGame() {
game.setBackgroundColor(0x333333);
// Create header UI
createUI();
// Create digger
digger = new Digger();
digger.x = 2048 / 2;
digger.y = 300;
digger.upgrade(pickLevel);
game.addChild(digger);
// Create initial grid
createGrid();
// Play background music
LK.playMusic('bgmusic');
}
function createUI() {
// Score text
scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
scoreTxt.x = 150;
scoreTxt.y = 50;
LK.gui.addChild(scoreTxt);
// Level text
levelTxt = new Text2('Level: 1', {
size: 60,
fill: 0xFFFFFF
});
levelTxt.anchor.set(0.5, 0);
levelTxt.x = 2048 / 2;
levelTxt.y = 50;
LK.gui.addChild(levelTxt);
// Coins text
coinsTxt = new Text2('Coins: ' + coins, {
size: 60,
fill: 0xFFFF00
});
coinsTxt.anchor.set(1, 0);
coinsTxt.x = 2048 - 150;
coinsTxt.y = 50;
LK.gui.addChild(coinsTxt);
// Upgrade button
var buttonText = 'Upgrade Pick: ' + pickLevel * 50 + ' coins';
upgradeBtn = new Text2(buttonText, {
size: 50,
fill: 0x00FF00
});
upgradeBtn.anchor.set(0.5, 0);
upgradeBtn.x = 2048 / 2;
upgradeBtn.y = 150;
upgradeBtn.interactive = true;
upgradeBtn.down = function () {
upgradePick();
};
LK.gui.addChild(upgradeBtn);
}
function createGrid() {
// Clear existing grid if any
for (var i = 0; i < grid.length; i++) {
for (var j = 0; j < grid[i].length; j++) {
if (grid[i][j]) {
grid[i][j].destroy();
}
}
}
// Create new grid
grid = [];
for (var row = 0; row < GRID_HEIGHT; row++) {
grid[row] = [];
for (var col = 0; col < GRID_WIDTH; col++) {
// Determine dirt type - more hard dirt in higher levels
var isHard = Math.random() < 0.1 * level;
var dirtType = isHard ? 'hard' : 'normal';
// Determine if this cell has a gem - more valuable gems in deeper rows
var gemChance = 0.2 + row / GRID_HEIGHT * 0.3;
var hasGem = Math.random() < gemChance;
var gemType = 0;
if (hasGem) {
// Gems range from 1-3, with better gems having a higher chance in deeper levels
var gemRoll = Math.random();
if (gemRoll < 0.6 - level * 0.05) {
gemType = 1; // Common gem
} else if (gemRoll < 0.9 - level * 0.03) {
gemType = 2; // Uncommon gem
} else {
gemType = 3; // Rare gem
}
}
var dirt = new Dirt(dirtType, gemType);
dirt.x = GRID_PADDING_X + col * CELL_SIZE + CELL_SIZE / 2;
dirt.y = GRID_PADDING_Y + row * CELL_SIZE + CELL_SIZE / 2;
grid[row][col] = dirt;
game.addChild(dirt);
}
}
}
function attemptDig(x, y) {
if (digger.digging) {
return;
}
// Find the grid cell that was clicked
for (var row = 0; row < grid.length; row++) {
for (var col = 0; col < grid[row].length; col++) {
var cell = grid[row][col];
// Check if click is within this cell
if (Math.abs(x - cell.x) < CELL_SIZE / 2 && Math.abs(y - cell.y) < CELL_SIZE / 2) {
// Move digger to this cell
digger.startDig(cell.x, cell.y);
// Play dig sound
LK.getSound('dig').play();
// Attempt to dig the dirt
var gemRevealed = cell.dig(digger.digStrength);
if (gemRevealed) {
// Check if all gems have been collected to advance level
checkLevelComplete();
}
return;
}
}
}
}
function collectGem(x, y) {
// Find the grid cell that was clicked
for (var row = 0; row < grid.length; row++) {
for (var col = 0; col < grid[row].length; col++) {
var cell = grid[row][col];
// Check if click is within this cell
if (Math.abs(x - cell.x) < CELL_SIZE / 2 && Math.abs(y - cell.y) < CELL_SIZE / 2) {
// Try to collect gem
var gemType = cell.collectGem();
if (gemType > 0) {
// Play collect sound
LK.getSound('collect').play();
// Award points based on gem type
var points = gemType * gemType * 10;
score += points;
// Award coins
coinsCollected += gemType;
coins += gemType;
// Update score display
updateUI();
// Check if all gems have been collected
checkLevelComplete();
return true;
}
}
}
}
return false;
}
function checkLevelComplete() {
// Count remaining gems
var gemsLeft = 0;
for (var row = 0; row < grid.length; row++) {
for (var col = 0; col < grid[row].length; col++) {
var cell = grid[row][col];
if (cell.hasGem && cell.gem && cell.gem.alpha > 0) {
gemsLeft++;
}
}
}
// If no gems left, advance to next level
if (gemsLeft === 0) {
level++;
levelTxt.setText('Level: ' + level);
// Save progress
saveGame();
// Create new grid for next level
createGrid();
}
}
function upgradePick() {
var upgradeCost = pickLevel * 50;
if (coins >= upgradeCost) {
coins -= upgradeCost;
pickLevel++;
digger.upgrade(pickLevel);
// Update UI
upgradeBtn.setText('Upgrade Pick: ' + pickLevel * 50 + ' coins');
coinsTxt.setText('Coins: ' + coins);
// Save upgrade
saveGame();
}
}
function updateUI() {
scoreTxt.setText('Score: ' + score);
coinsTxt.setText('Coins: ' + coins);
}
function saveGame() {
storage.coins = coins;
storage.pickLevel = pickLevel;
}
// Game event handlers
game.down = function (x, y, obj) {
// If player clicks on a gem, collect it
if (!collectGem(x, y)) {
// Otherwise try to dig
attemptDig(x, y);
}
};
// Initialize the game
initGame(); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,325 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1", {
+ coins: 0,
+ pickLevel: 1
+});
+
+/****
+* Classes
+****/
+var Digger = Container.expand(function () {
+ var self = Container.call(this);
+ var diggerGraphics = self.attachAsset('digger', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.digging = false;
+ self.digStrength = 1;
+ self.startDig = function (targetX, targetY) {
+ self.digging = true;
+ self.x = targetX;
+ self.y = targetY;
+ // Make digger appear to dig with animation
+ tween(diggerGraphics, {
+ rotation: Math.PI * 2
+ }, {
+ duration: 500,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ diggerGraphics.rotation = 0;
+ self.digging = false;
+ }
+ });
+ };
+ self.upgrade = function (level) {
+ self.digStrength = level;
+ // Visual indication of upgraded digger
+ diggerGraphics.scaleX = 1 + level * 0.1;
+ diggerGraphics.scaleY = 1 + level * 0.1;
+ };
+ return self;
+});
+var Dirt = Container.expand(function (type, gemType) {
+ var self = Container.call(this);
+ var assetType = type === 'hard' ? 'hardDirt' : 'normalDirt';
+ var dirtGraphics = self.attachAsset(assetType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = type === 'hard' ? 3 : 1;
+ self.originalHealth = self.health;
+ self.hasGem = gemType > 0;
+ self.gemType = gemType;
+ // Reveal gem if this dirt has one
+ if (self.hasGem) {
+ var gemAsset = 'gem' + gemType;
+ var gemGraphics = self.attachAsset(gemAsset, {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0 // Hidden initially
+ });
+ self.gem = gemGraphics;
+ }
+ self.dig = function (strength) {
+ self.health -= strength;
+ if (self.health <= 0) {
+ // Dirt is completely dug
+ dirtGraphics.alpha = 0;
+ // Reveal gem if exists
+ if (self.hasGem && self.gem) {
+ self.gem.alpha = 1;
+ return true;
+ }
+ } else {
+ // Visual feedback that dirt is being dug
+ dirtGraphics.alpha = self.health / self.originalHealth;
+ }
+ return false;
+ };
+ self.collectGem = function () {
+ if (self.hasGem && self.gem && self.gem.alpha > 0) {
+ self.gem.alpha = 0;
+ return self.gemType;
+ }
+ return 0;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
backgroundColor: 0x000000
-});
\ No newline at end of file
+});
+
+/****
+* Game Code
+****/
+// Game constants
+var GRID_WIDTH = 6;
+var GRID_HEIGHT = 8;
+var CELL_SIZE = 120;
+var GRID_PADDING_X = (2048 - GRID_WIDTH * CELL_SIZE) / 2;
+var GRID_PADDING_Y = 500;
+// Game variables
+var digger;
+var grid = [];
+var score = 0;
+var level = 1;
+var coinsCollected = 0;
+var pickLevel = storage.pickLevel || 1;
+var coins = storage.coins || 0;
+// UI elements
+var scoreTxt;
+var levelTxt;
+var coinsTxt;
+var upgradeBtn;
+// Initialize game
+function initGame() {
+ game.setBackgroundColor(0x333333);
+ // Create header UI
+ createUI();
+ // Create digger
+ digger = new Digger();
+ digger.x = 2048 / 2;
+ digger.y = 300;
+ digger.upgrade(pickLevel);
+ game.addChild(digger);
+ // Create initial grid
+ createGrid();
+ // Play background music
+ LK.playMusic('bgmusic');
+}
+function createUI() {
+ // Score text
+ scoreTxt = new Text2('Score: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ scoreTxt.anchor.set(0, 0);
+ scoreTxt.x = 150;
+ scoreTxt.y = 50;
+ LK.gui.addChild(scoreTxt);
+ // Level text
+ levelTxt = new Text2('Level: 1', {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ levelTxt.anchor.set(0.5, 0);
+ levelTxt.x = 2048 / 2;
+ levelTxt.y = 50;
+ LK.gui.addChild(levelTxt);
+ // Coins text
+ coinsTxt = new Text2('Coins: ' + coins, {
+ size: 60,
+ fill: 0xFFFF00
+ });
+ coinsTxt.anchor.set(1, 0);
+ coinsTxt.x = 2048 - 150;
+ coinsTxt.y = 50;
+ LK.gui.addChild(coinsTxt);
+ // Upgrade button
+ var buttonText = 'Upgrade Pick: ' + pickLevel * 50 + ' coins';
+ upgradeBtn = new Text2(buttonText, {
+ size: 50,
+ fill: 0x00FF00
+ });
+ upgradeBtn.anchor.set(0.5, 0);
+ upgradeBtn.x = 2048 / 2;
+ upgradeBtn.y = 150;
+ upgradeBtn.interactive = true;
+ upgradeBtn.down = function () {
+ upgradePick();
+ };
+ LK.gui.addChild(upgradeBtn);
+}
+function createGrid() {
+ // Clear existing grid if any
+ for (var i = 0; i < grid.length; i++) {
+ for (var j = 0; j < grid[i].length; j++) {
+ if (grid[i][j]) {
+ grid[i][j].destroy();
+ }
+ }
+ }
+ // Create new grid
+ grid = [];
+ for (var row = 0; row < GRID_HEIGHT; row++) {
+ grid[row] = [];
+ for (var col = 0; col < GRID_WIDTH; col++) {
+ // Determine dirt type - more hard dirt in higher levels
+ var isHard = Math.random() < 0.1 * level;
+ var dirtType = isHard ? 'hard' : 'normal';
+ // Determine if this cell has a gem - more valuable gems in deeper rows
+ var gemChance = 0.2 + row / GRID_HEIGHT * 0.3;
+ var hasGem = Math.random() < gemChance;
+ var gemType = 0;
+ if (hasGem) {
+ // Gems range from 1-3, with better gems having a higher chance in deeper levels
+ var gemRoll = Math.random();
+ if (gemRoll < 0.6 - level * 0.05) {
+ gemType = 1; // Common gem
+ } else if (gemRoll < 0.9 - level * 0.03) {
+ gemType = 2; // Uncommon gem
+ } else {
+ gemType = 3; // Rare gem
+ }
+ }
+ var dirt = new Dirt(dirtType, gemType);
+ dirt.x = GRID_PADDING_X + col * CELL_SIZE + CELL_SIZE / 2;
+ dirt.y = GRID_PADDING_Y + row * CELL_SIZE + CELL_SIZE / 2;
+ grid[row][col] = dirt;
+ game.addChild(dirt);
+ }
+ }
+}
+function attemptDig(x, y) {
+ if (digger.digging) {
+ return;
+ }
+ // Find the grid cell that was clicked
+ for (var row = 0; row < grid.length; row++) {
+ for (var col = 0; col < grid[row].length; col++) {
+ var cell = grid[row][col];
+ // Check if click is within this cell
+ if (Math.abs(x - cell.x) < CELL_SIZE / 2 && Math.abs(y - cell.y) < CELL_SIZE / 2) {
+ // Move digger to this cell
+ digger.startDig(cell.x, cell.y);
+ // Play dig sound
+ LK.getSound('dig').play();
+ // Attempt to dig the dirt
+ var gemRevealed = cell.dig(digger.digStrength);
+ if (gemRevealed) {
+ // Check if all gems have been collected to advance level
+ checkLevelComplete();
+ }
+ return;
+ }
+ }
+ }
+}
+function collectGem(x, y) {
+ // Find the grid cell that was clicked
+ for (var row = 0; row < grid.length; row++) {
+ for (var col = 0; col < grid[row].length; col++) {
+ var cell = grid[row][col];
+ // Check if click is within this cell
+ if (Math.abs(x - cell.x) < CELL_SIZE / 2 && Math.abs(y - cell.y) < CELL_SIZE / 2) {
+ // Try to collect gem
+ var gemType = cell.collectGem();
+ if (gemType > 0) {
+ // Play collect sound
+ LK.getSound('collect').play();
+ // Award points based on gem type
+ var points = gemType * gemType * 10;
+ score += points;
+ // Award coins
+ coinsCollected += gemType;
+ coins += gemType;
+ // Update score display
+ updateUI();
+ // Check if all gems have been collected
+ checkLevelComplete();
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
+function checkLevelComplete() {
+ // Count remaining gems
+ var gemsLeft = 0;
+ for (var row = 0; row < grid.length; row++) {
+ for (var col = 0; col < grid[row].length; col++) {
+ var cell = grid[row][col];
+ if (cell.hasGem && cell.gem && cell.gem.alpha > 0) {
+ gemsLeft++;
+ }
+ }
+ }
+ // If no gems left, advance to next level
+ if (gemsLeft === 0) {
+ level++;
+ levelTxt.setText('Level: ' + level);
+ // Save progress
+ saveGame();
+ // Create new grid for next level
+ createGrid();
+ }
+}
+function upgradePick() {
+ var upgradeCost = pickLevel * 50;
+ if (coins >= upgradeCost) {
+ coins -= upgradeCost;
+ pickLevel++;
+ digger.upgrade(pickLevel);
+ // Update UI
+ upgradeBtn.setText('Upgrade Pick: ' + pickLevel * 50 + ' coins');
+ coinsTxt.setText('Coins: ' + coins);
+ // Save upgrade
+ saveGame();
+ }
+}
+function updateUI() {
+ scoreTxt.setText('Score: ' + score);
+ coinsTxt.setText('Coins: ' + coins);
+}
+function saveGame() {
+ storage.coins = coins;
+ storage.pickLevel = pickLevel;
+}
+// Game event handlers
+game.down = function (x, y, obj) {
+ // If player clicks on a gem, collect it
+ if (!collectGem(x, y)) {
+ // Otherwise try to dig
+ attemptDig(x, y);
+ }
+};
+// Initialize the game
+initGame();
\ No newline at end of file