/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Gun = Container.expand(function (tier) { var self = Container.call(this); self.tier = tier || 1; self.income = self.tier * 10; self.value = self.tier * 100; self.lastIncomeTime = Date.now(); var gunAssetId = 'gun' + Math.min(self.tier, 5); self.gunGraphics = self.attachAsset(gunAssetId, { anchorX: 0.5, anchorY: 0.5 }); self.tierText = new Text2(self.tier.toString(), { size: 24, fill: 0xFFFFFF }); self.tierText.anchor.set(0.5, 0.5); self.tierText.x = 0; self.tierText.y = -50; self.addChild(self.tierText); self.isDragging = false; self.startDragPos = { x: 0, y: 0 }; self.originalSlot = null; self.generateIncome = function () { var now = Date.now(); if (now - self.lastIncomeTime >= 2000) { money += self.income; self.lastIncomeTime = now; LK.getSound('earnMoney').play(); var incomeText = new Text2('+$' + self.income, { size: 20, fill: 0x00FF00 }); incomeText.anchor.set(0.5, 0.5); incomeText.x = self.x; incomeText.y = self.y - 60; game.addChild(incomeText); tween(incomeText, { y: incomeText.y - 50, alpha: 0 }, { duration: 1500, onFinish: function onFinish() { incomeText.destroy(); } }); } }; self.update = function () { self.generateIncome(); }; self.down = function (x, y, obj) { self.isDragging = true; self.startDragPos = { x: x, y: y }; self.alpha = 0.7; draggedGun = self; if (self.originalSlot) { self.originalSlot.occupiedBy = null; self.originalSlot = null; } }; return self; }); var GunSlot = Container.expand(function (slotX, slotY) { var self = Container.call(this); self.x = slotX; self.y = slotY; self.occupiedBy = null; self.slotGraphics = self.attachAsset('gunSlot', { anchorX: 0.5, anchorY: 0.5, alpha: 0.3 }); self.canAcceptGun = function (gun) { return self.occupiedBy === null; }; self.placeGun = function (gun) { if (self.canAcceptGun(gun)) { self.occupiedBy = gun; gun.originalSlot = self; gun.x = self.x; gun.y = self.y; gun.alpha = 1.0; return true; } return false; }; self.checkForMerge = function (newGun) { if (self.occupiedBy && self.occupiedBy.tier === newGun.tier) { var oldGun = self.occupiedBy; self.occupiedBy = null; var mergedTier = oldGun.tier + 1; var mergedGun = new Gun(mergedTier); oldGun.destroy(); newGun.destroy(); self.placeGun(mergedGun); game.addChild(mergedGun); var mergeEffect = LK.getAsset('mergeEffect', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8 }); mergeEffect.x = self.x; mergeEffect.y = self.y; game.addChild(mergeEffect); tween(mergeEffect, { scaleX: 1.5, scaleY: 1.5, alpha: 0 }, { duration: 800, onFinish: function onFinish() { mergeEffect.destroy(); } }); LK.getSound('mergeGun').play(); return true; } return false; }; return self; }); var ShopButton = Container.expand(function () { var self = Container.call(this); self.buttonGraphics = self.attachAsset('shopButton', { anchorX: 0.5, anchorY: 0.5 }); self.buttonText = new Text2('Buy Gun\n$100', { size: 28, fill: 0xFFFFFF }); self.buttonText.anchor.set(0.5, 0.5); self.addChild(self.buttonText); self.updatePrice = function () { var price = 100 * Math.pow(1.5, gunsOwned); self.buttonText.setText('Buy Gun\n$' + Math.floor(price)); if (money >= price) { self.alpha = 1.0; } else { self.alpha = 0.6; } }; self.down = function (x, y, obj) { var price = 100 * Math.pow(1.5, gunsOwned); if (money >= price) { money -= price; gunsOwned++; var newGun = new Gun(1); var placed = false; for (var i = 0; i < gunSlots.length; i++) { if (gunSlots[i].placeGun(newGun)) { game.addChild(newGun); placed = true; break; } } if (placed) { LK.getSound('buyGun').play(); self.updatePrice(); tween(newGun, { scaleX: 1.2, scaleY: 1.2 }, { duration: 300, onFinish: function onFinish() { tween(newGun, { scaleX: 1.0, scaleY: 1.0 }, { duration: 200 }); } }); } else { money += price; gunsOwned--; newGun.destroy(); } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ var money = storage.money || 500; var gunsOwned = storage.gunsOwned || 0; var gunSlots = []; var draggedGun = null; var moneyText = new Text2('$' + money, { size: 60, fill: 0xFFD700 }); moneyText.anchor.set(0.5, 0); LK.gui.top.addChild(moneyText); var titleText = new Text2('Gun Merger Tycoon', { size: 48, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0); titleText.x = 2048 / 2; titleText.y = 100; game.addChild(titleText); for (var row = 0; row < 4; row++) { for (var col = 0; col < 5; col++) { var slotX = 300 + col * 160; var slotY = 400 + row * 120; var slot = new GunSlot(slotX, slotY); gunSlots.push(slot); game.addChild(slot); } } var shopButton = new ShopButton(); shopButton.x = 2048 / 2; shopButton.y = 900; game.addChild(shopButton); if (gunsOwned === 0) { for (var i = 0; i < 3; i++) { var starterGun = new Gun(1); if (gunSlots[i].placeGun(starterGun)) { game.addChild(starterGun); gunsOwned++; } } } game.move = function (x, y, obj) { if (draggedGun) { draggedGun.x = x; draggedGun.y = y; } }; game.up = function (x, y, obj) { if (draggedGun) { var gun = draggedGun; var placed = false; for (var i = 0; i < gunSlots.length; i++) { var slot = gunSlots[i]; var distance = Math.sqrt(Math.pow(gun.x - slot.x, 2) + Math.pow(gun.y - slot.y, 2)); if (distance < 80) { if (slot.checkForMerge(gun)) { placed = true; break; } else if (slot.placeGun(gun)) { placed = true; break; } } } if (!placed && gun.originalSlot && gun.originalSlot.canAcceptGun(gun)) { gun.originalSlot.placeGun(gun); placed = true; } if (!placed) { var nearestSlot = null; var nearestDistance = Infinity; for (var i = 0; i < gunSlots.length; i++) { if (gunSlots[i].canAcceptGun(gun)) { var distance = Math.sqrt(Math.pow(gun.x - gunSlots[i].x, 2) + Math.pow(gun.y - gunSlots[i].y, 2)); if (distance < nearestDistance) { nearestDistance = distance; nearestSlot = gunSlots[i]; } } } if (nearestSlot) { nearestSlot.placeGun(gun); } } gun.alpha = 1.0; gun.isDragging = false; draggedGun = null; } }; game.update = function () { moneyText.setText('$' + Math.floor(money)); shopButton.updatePrice(); storage.money = money; storage.gunsOwned = gunsOwned; if (LK.ticks % 120 === 0) { money += 5; } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,305 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var Gun = Container.expand(function (tier) {
+ var self = Container.call(this);
+ self.tier = tier || 1;
+ self.income = self.tier * 10;
+ self.value = self.tier * 100;
+ self.lastIncomeTime = Date.now();
+ var gunAssetId = 'gun' + Math.min(self.tier, 5);
+ self.gunGraphics = self.attachAsset(gunAssetId, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.tierText = new Text2(self.tier.toString(), {
+ size: 24,
+ fill: 0xFFFFFF
+ });
+ self.tierText.anchor.set(0.5, 0.5);
+ self.tierText.x = 0;
+ self.tierText.y = -50;
+ self.addChild(self.tierText);
+ self.isDragging = false;
+ self.startDragPos = {
+ x: 0,
+ y: 0
+ };
+ self.originalSlot = null;
+ self.generateIncome = function () {
+ var now = Date.now();
+ if (now - self.lastIncomeTime >= 2000) {
+ money += self.income;
+ self.lastIncomeTime = now;
+ LK.getSound('earnMoney').play();
+ var incomeText = new Text2('+$' + self.income, {
+ size: 20,
+ fill: 0x00FF00
+ });
+ incomeText.anchor.set(0.5, 0.5);
+ incomeText.x = self.x;
+ incomeText.y = self.y - 60;
+ game.addChild(incomeText);
+ tween(incomeText, {
+ y: incomeText.y - 50,
+ alpha: 0
+ }, {
+ duration: 1500,
+ onFinish: function onFinish() {
+ incomeText.destroy();
+ }
+ });
+ }
+ };
+ self.update = function () {
+ self.generateIncome();
+ };
+ self.down = function (x, y, obj) {
+ self.isDragging = true;
+ self.startDragPos = {
+ x: x,
+ y: y
+ };
+ self.alpha = 0.7;
+ draggedGun = self;
+ if (self.originalSlot) {
+ self.originalSlot.occupiedBy = null;
+ self.originalSlot = null;
+ }
+ };
+ return self;
+});
+var GunSlot = Container.expand(function (slotX, slotY) {
+ var self = Container.call(this);
+ self.x = slotX;
+ self.y = slotY;
+ self.occupiedBy = null;
+ self.slotGraphics = self.attachAsset('gunSlot', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0.3
+ });
+ self.canAcceptGun = function (gun) {
+ return self.occupiedBy === null;
+ };
+ self.placeGun = function (gun) {
+ if (self.canAcceptGun(gun)) {
+ self.occupiedBy = gun;
+ gun.originalSlot = self;
+ gun.x = self.x;
+ gun.y = self.y;
+ gun.alpha = 1.0;
+ return true;
+ }
+ return false;
+ };
+ self.checkForMerge = function (newGun) {
+ if (self.occupiedBy && self.occupiedBy.tier === newGun.tier) {
+ var oldGun = self.occupiedBy;
+ self.occupiedBy = null;
+ var mergedTier = oldGun.tier + 1;
+ var mergedGun = new Gun(mergedTier);
+ oldGun.destroy();
+ newGun.destroy();
+ self.placeGun(mergedGun);
+ game.addChild(mergedGun);
+ var mergeEffect = LK.getAsset('mergeEffect', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0.8
+ });
+ mergeEffect.x = self.x;
+ mergeEffect.y = self.y;
+ game.addChild(mergeEffect);
+ tween(mergeEffect, {
+ scaleX: 1.5,
+ scaleY: 1.5,
+ alpha: 0
+ }, {
+ duration: 800,
+ onFinish: function onFinish() {
+ mergeEffect.destroy();
+ }
+ });
+ LK.getSound('mergeGun').play();
+ return true;
+ }
+ return false;
+ };
+ return self;
+});
+var ShopButton = Container.expand(function () {
+ var self = Container.call(this);
+ self.buttonGraphics = self.attachAsset('shopButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.buttonText = new Text2('Buy Gun\n$100', {
+ size: 28,
+ fill: 0xFFFFFF
+ });
+ self.buttonText.anchor.set(0.5, 0.5);
+ self.addChild(self.buttonText);
+ self.updatePrice = function () {
+ var price = 100 * Math.pow(1.5, gunsOwned);
+ self.buttonText.setText('Buy Gun\n$' + Math.floor(price));
+ if (money >= price) {
+ self.alpha = 1.0;
+ } else {
+ self.alpha = 0.6;
+ }
+ };
+ self.down = function (x, y, obj) {
+ var price = 100 * Math.pow(1.5, gunsOwned);
+ if (money >= price) {
+ money -= price;
+ gunsOwned++;
+ var newGun = new Gun(1);
+ var placed = false;
+ for (var i = 0; i < gunSlots.length; i++) {
+ if (gunSlots[i].placeGun(newGun)) {
+ game.addChild(newGun);
+ placed = true;
+ break;
+ }
+ }
+ if (placed) {
+ LK.getSound('buyGun').play();
+ self.updatePrice();
+ tween(newGun, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ tween(newGun, {
+ scaleX: 1.0,
+ scaleY: 1.0
+ }, {
+ duration: 200
+ });
+ }
+ });
+ } else {
+ money += price;
+ gunsOwned--;
+ newGun.destroy();
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a2e
+});
+
+/****
+* Game Code
+****/
+var money = storage.money || 500;
+var gunsOwned = storage.gunsOwned || 0;
+var gunSlots = [];
+var draggedGun = null;
+var moneyText = new Text2('$' + money, {
+ size: 60,
+ fill: 0xFFD700
+});
+moneyText.anchor.set(0.5, 0);
+LK.gui.top.addChild(moneyText);
+var titleText = new Text2('Gun Merger Tycoon', {
+ size: 48,
+ fill: 0xFFFFFF
+});
+titleText.anchor.set(0.5, 0);
+titleText.x = 2048 / 2;
+titleText.y = 100;
+game.addChild(titleText);
+for (var row = 0; row < 4; row++) {
+ for (var col = 0; col < 5; col++) {
+ var slotX = 300 + col * 160;
+ var slotY = 400 + row * 120;
+ var slot = new GunSlot(slotX, slotY);
+ gunSlots.push(slot);
+ game.addChild(slot);
+ }
+}
+var shopButton = new ShopButton();
+shopButton.x = 2048 / 2;
+shopButton.y = 900;
+game.addChild(shopButton);
+if (gunsOwned === 0) {
+ for (var i = 0; i < 3; i++) {
+ var starterGun = new Gun(1);
+ if (gunSlots[i].placeGun(starterGun)) {
+ game.addChild(starterGun);
+ gunsOwned++;
+ }
+ }
+}
+game.move = function (x, y, obj) {
+ if (draggedGun) {
+ draggedGun.x = x;
+ draggedGun.y = y;
+ }
+};
+game.up = function (x, y, obj) {
+ if (draggedGun) {
+ var gun = draggedGun;
+ var placed = false;
+ for (var i = 0; i < gunSlots.length; i++) {
+ var slot = gunSlots[i];
+ var distance = Math.sqrt(Math.pow(gun.x - slot.x, 2) + Math.pow(gun.y - slot.y, 2));
+ if (distance < 80) {
+ if (slot.checkForMerge(gun)) {
+ placed = true;
+ break;
+ } else if (slot.placeGun(gun)) {
+ placed = true;
+ break;
+ }
+ }
+ }
+ if (!placed && gun.originalSlot && gun.originalSlot.canAcceptGun(gun)) {
+ gun.originalSlot.placeGun(gun);
+ placed = true;
+ }
+ if (!placed) {
+ var nearestSlot = null;
+ var nearestDistance = Infinity;
+ for (var i = 0; i < gunSlots.length; i++) {
+ if (gunSlots[i].canAcceptGun(gun)) {
+ var distance = Math.sqrt(Math.pow(gun.x - gunSlots[i].x, 2) + Math.pow(gun.y - gunSlots[i].y, 2));
+ if (distance < nearestDistance) {
+ nearestDistance = distance;
+ nearestSlot = gunSlots[i];
+ }
+ }
+ }
+ if (nearestSlot) {
+ nearestSlot.placeGun(gun);
+ }
+ }
+ gun.alpha = 1.0;
+ gun.isDragging = false;
+ draggedGun = null;
+ }
+};
+game.update = function () {
+ moneyText.setText('$' + Math.floor(money));
+ shopButton.updatePrice();
+ storage.money = money;
+ storage.gunsOwned = gunsOwned;
+ if (LK.ticks % 120 === 0) {
+ money += 5;
+ }
+};
\ No newline at end of file