User prompt
There should be no tower on the field at the start of the game
User prompt
The appearance of the tower takes 100 money
User prompt
When you click the mouse, place the tower at the click location
User prompt
Add 10 money for killed monster
User prompt
The amount of money is not visible
User prompt
Add money to the game with an initial amount of 100, show its amount in the lower left corner of the screen
Code edit (1 edits merged)
Please save this source code
/**** * Classes ****/ // Bullet class for projectiles fired by towers var Bullet = Container.expand(function (startX, startY, target) { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 10; self.target = target; self.x = startX; self.y = startY; self.update = function () { var dx = self.target.x - self.x; var dy = self.target.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 10) { self.destroy(); self.target.hit(); } else { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; // Calculate the angle to the target var angle = Math.atan2(dy, dx); // Rotate the bullet towards the target bulletGraphics.rotation = angle + 90; } }; }); // Enemy class for the creatures attacking the realm var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self.health = 100; self.path = [{ x: 2010, y: 2600 }, { x: 1000, y: 2600 }, { x: 1000, y: 200 }, { x: 0, y: 200 }]; self.pathIndex = 0; self.update = function () { var target = self.path[self.pathIndex]; var dx = target.x - self.x; var dy = target.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < self.speed) { self.x = target.x; self.y = target.y; self.pathIndex++; if (self.pathIndex >= self.path.length) { // Enemy reached the end, game over logic LK.showGameOver(); } } else { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } }; self.hit = function () { self.health -= 50; if (self.health <= 0) { self.destroy(); if (enemies.indexOf(self) != -1) { enemies.splice(enemies.indexOf(self), 1); money += 10; // Add 10 money for killed monster } } }; }); //<Assets used in the game will automatically appear here> //<Write imports for supported plugins here> // Tower class to represent defense towers var Tower = Container.expand(function () { var self = Container.call(this); var towerGraphics = self.attachAsset('tower', { anchorX: 0.5, anchorY: 0.5 }); self.range = 600; self.fireRate = 60; // Fire every 60 frames self.fireCooldown = 0; // The turret's firing range is hidden and not displayed on the game screen self.update = function () { if (self.fireCooldown < 0) { self.fireCooldown = 0; } if (self.fireCooldown > 0) { self.fireCooldown--; } }; self.canFire = function () { return self.fireCooldown === 0; }; self.fire = function (target) { if (self.canFire()) { var bullet = new Bullet(self.x, self.y, target); game.addChild(bullet); bullets.push(bullet); self.fireCooldown = self.fireRate; } else if (self.fireCooldown > 0) { self.fireCooldown--; } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000, //Init game with black background fps: 60 }); /**** * Game Code ****/ game.down = function (x, y, obj) { if (money >= 100) { var tower = new Tower(); tower.x = x; tower.y = y; game.addChild(tower); towers.push(tower); money -= 100; } }; var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366 }); game.addChild(background); // Initialize arrays and variables var towers = []; var bullets = []; var enemies = []; var money = 100; // Create and position towers function createTowers() { var tower1 = new Tower(); tower1.x = 500; tower1.y = 1366; game.addChild(tower1); towers.push(tower1); var tower2 = new Tower(); tower2.x = 1500; tower2.y = 1366; game.addChild(tower2); towers.push(tower2); } // Spawn enemies at intervals function spawnEnemy() { var enemy = new Enemy(); enemy.x = 2010; enemy.y = 200; game.addChild(enemy); enemies.push(enemy); } // Create a road for the enemies to follow function createRoad(x, y) { if (Array.isArray(x)) { for (var i = x[0]; i < x[1]; i += 100) { var roadBlock = LK.getAsset('road', { anchorX: 0.5, anchorY: 0.5, x: i, y: y }); game.addChild(roadBlock); } } else { for (var i = y[0]; i < y[1]; i += 100) { var roadBlock = LK.getAsset('road', { anchorX: 0.5, anchorY: 0.5, x: x, y: i }); game.addChild(roadBlock); } } } createRoad(2000, [200, 2601]); createRoad([1000, 2000], 2601); createRoad(1000, [200, 2601]); createRoad([0, 1000], 200); // Game update loop game.update = function () { // Update towers towers.forEach(function (tower) { tower.update(); enemies.forEach(function (enemy) { var dx = tower.x - enemy.x; var dy = tower.y - enemy.y; var distance = Math.sqrt(dx * dx + dy * dy); if (tower.canFire() && distance < tower.range) { tower.fire(enemy); } }); }); // Update bullets bullets.forEach(function (bullet) { bullet.update(); }); // Update enemies enemies.forEach(function (enemy) { enemy.update(); }); // Spawn enemies every 120 frames if (LK.ticks % 120 === 0) { spawnEnemy(); } // Update the money text moneyText.setText('Money: ' + money); }; // Initialize game elements createTowers(); // Create a text object to display the amount of money var moneyText = new Text2('Money: ' + money, { size: 50, fill: 0xFFFFFF }); moneyText.anchor.set(0, 1); // Sets anchor to the bottom left corner of the text. // Add the money text to the GUI overlay at the bottom left corner of the screen LK.gui.bottomLeft.addChild(moneyText);
===================================================================
--- original.js
+++ change.js
@@ -129,13 +129,16 @@
/****
* Game Code
****/
game.down = function (x, y, obj) {
- var tower = new Tower();
- tower.x = x;
- tower.y = y;
- game.addChild(tower);
- towers.push(tower);
+ if (money >= 100) {
+ var tower = new Tower();
+ tower.x = x;
+ tower.y = y;
+ game.addChild(tower);
+ towers.push(tower);
+ money -= 100;
+ }
};
var background = LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat. Goblin. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat. Tower with ballista. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
One bow arrow facing upwards. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
texture of the road made of large stones like tiles for a game. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Top view. Texture for 2D games. Green meadow.