User prompt
align score texxt and score icon
Code edit (4 edits merged)
Please save this source code
User prompt
add icon attached to score
Code edit (1 edits merged)
Please save this source code
User prompt
move score to the upper left corner but 200 pixels from each corner
Code edit (12 edits merged)
Please save this source code
User prompt
increase hero speed by 100%
User prompt
For hero movent it should move towards the next touch on screen
Code edit (1 edits merged)
Please save this source code
User prompt
add the option to hardcode a different position for every different wavemessage
User prompt
add option to hardcode the position of every wave message
User prompt
Fix Bug: 'ReferenceError: x is not defined' in this line: 'waveMessage.x = x;' Line Number: 214
User prompt
add the posibility to define where each wavemessage and waveimage will be positioned when they appear
User prompt
modiffy game to start waves0 and wave1 together and also share a unique wavemessage
Code edit (2 edits merged)
Please save this source code
User prompt
enemywave0 and evemywave1 should start at the same time and share a wavemessage
Code edit (2 edits merged)
Please save this source code
User prompt
hero should start 200 pixels from the bottom of the screen
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: Cannot read properties of null (reading 'x')' in this line: 'var dx = closestBullet.x - this.x;' Line Number: 56
User prompt
Fix Bug: 'TypeError: Cannot read properties of null (reading 'x')' in this line: 'var dx = closestBullet.x - this.x;' Line Number: 56
User prompt
Fix Bug: 'TypeError: heroBullets.reduce is not a function' in this line: 'var closestBullet = heroBullets.reduce((function (prev, curr) {' Line Number: 51
User prompt
Fix Bug: 'TypeError: heroBullets.reduce is not a function' in this line: 'var closestBullet = heroBullets.reduce((function (prev, curr) {' Line Number: 51
User prompt
enemywave0 should move towards de closest hero bullet
User prompt
Fix Bug: 'ReferenceError: enemySpeedIncrease is not defined' in this line: 'var speed = 1 + enemySpeedIncrease;' Line Number: 53
var enemySpeedIncrease = 0; var WaveMessage = Container.expand(function (waveIndex) { var self = Container.call(this); var messageImage = self.createAsset('wave' + waveIndex, 'Wave ' + (waveIndex + 1) + ' Image', .5, .5); self.addChild(messageImage); this.setMessage = function (customMessage) { var messageText = new Text2(customMessage, { size: 50, fill: "#ffffff" }); messageText.anchor.set(.5, .5); messageText.y = messageImage.height; self.addChild(messageText); }; }); var SpatialGrid = Container.expand(function (cellSize) { var self = Container.call(this); self.cellSize = cellSize; self.grid = {}; self._cellKey = function (x, y) { var cellX = Math.floor(x / self.cellSize); var cellY = Math.floor(y / self.cellSize); return cellX + ':' + cellY; }; self.insert = function (object) { var key = self._cellKey(object.x, object.y); if (!self.grid[key]) { self.grid[key] = []; } self.grid[key].push(object); }; self.retrieve = function (x, y) { var key = self._cellKey(x, y); return self.grid[key] || []; }; self.clear = function () { self.grid = {}; }; }); var Hero = Container.expand(function () { var self = Container.call(this); var heroGraphics = self.createAsset('hero', 'Hero character', .5, .5); self.move = function () {}; self.shoot = function () {}; }); var EnemyWave0 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 1; var enemyGraphics = self.createAsset('enemyWave0', 'Enemy Wave 0 character', .5, .5); self.move = function (heroBullets) { var closestBullet = heroBullets && heroBullets.length ? heroBullets.reduce((function (prev, curr) { var prevDist = Math.sqrt(Math.pow(prev.x - this.x, 2) + Math.pow(prev.y - this.y, 2)); var currDist = Math.sqrt(Math.pow(curr.x - this.x, 2) + Math.pow(curr.y - this.y, 2)); return prevDist < currDist ? prev : curr; }).bind(this), heroBullets[0]) : null; var dx = closestBullet.x - this.x; var dy = closestBullet.y - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); var speed = 1 + enemySpeedIncrease; this.x += dx / magnitude * speed; this.y += dy / magnitude * speed; }; }); var EnemyWave1 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 10; var enemyGraphics = self.createAsset('enemyWave1', 'Enemy Wave 1 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); var speed = 2.5 + enemySpeedIncrease; this.x += dx / magnitude * speed; this.y += dy / magnitude * speed; }; }); var EnemyWave2 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 3; var enemyGraphics = self.createAsset('enemyWave2', 'Enemy Wave 2 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); var speed = 2 + enemySpeedIncrease; this.x += dx / magnitude * speed; this.y += dy / magnitude * speed; }; }); var EnemyWave3 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 4; var enemyGraphics = self.createAsset('enemyWave3', 'Enemy Wave 3 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); var speed = 1.8 + enemySpeedIncrease; this.x += dx / magnitude * speed; this.y += dy / magnitude * speed; }; }); var EnemyWave4 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 20; var enemyGraphics = self.createAsset('enemyWave4', 'Enemy Wave 4 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); var speed = 3 + enemySpeedIncrease; this.x += dx / magnitude * speed; this.y += dy / magnitude * speed; }; }); var EnemyWave5 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 1; var enemyGraphics = self.createAsset('enemyWave5', 'Enemy Wave 5 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); var speed = 10 + enemySpeedIncrease; this.x += dx / magnitude * speed; this.y += dy / magnitude * speed; }; }); var HeroBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.createAsset('heroBullet', 'Hero Bullet', .5, .5); self.move = function (goalX, goalY) { var dx = goalX - this.x; var dy = goalY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); this.x += dx / magnitude * 5; this.y += dy / magnitude * 5; }; }); var EnemyBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.createAsset('enemyBullet', 'Enemy Bullet', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); this.x += dx / magnitude * 2; this.y += dy / magnitude * 2; }; }); var Game = Container.expand(function () { var self = Container.call(this); self.getEnemyCountForWave = function (waveIndex) { switch (waveIndex % 6) { case 0: return 1; case 1: return 10; case 2: return 3; case 3: return 4; case 4: return 20; case 5: return 1; } }; var goal = self.createAsset('goal', 'Goal asset', 0.5, 0.5); goal.width = 900; goal.height = 200; goal.x = 2048 / 2; goal.y = goal.height / 2; self.addChild(goal); var hero = self.addChild(new Hero()); var score = 0; var scoreTxt = new Text2(score.toString(), { size: 150, fill: "#ffffff" }); scoreTxt.anchor.set(.5, 0); LK.gui.topCenter.addChild(scoreTxt); var enemies = []; var waveIndex = 0; var maxWaveCount = 6; var waveTimer = 500; var waveInterval = 500; var heroBullets = []; var enemyBullets = []; hero.x = 2048 / 2; hero.y = 2732 / 2; var bulletTimer = 0; var bulletInterval = 100; LK.on('tick', function () { hero.move(); bulletTimer++; if (bulletTimer >= bulletInterval) { var newBullet = new HeroBullet(); newBullet.x = hero.x; newBullet.y = hero.y; heroBullets.push(newBullet); self.addChild(newBullet); bulletTimer = 0; } if (waveIndex < maxWaveCount) { waveTimer++; } if (waveTimer >= waveInterval && waveIndex < maxWaveCount) { var waveMessages = ['Prepare for battle!', 'Enemies approaching!', 'Brace yourself!', 'The fight intensifies!', 'This is the ultimate test!', 'Final wave incoming!']; var waveMessage = new WaveMessage(waveIndex); waveMessage.setMessage(waveMessages[waveIndex % waveMessages.length]); waveMessage.x = 2048 / 3; waveMessage.y = 2732 / 3; LK.gui.addChild(waveMessage); LK.setTimeout(function () { waveMessage.destroy(); }, 2000); for (var i = 0; i < self.getEnemyCountForWave(waveIndex); i++) { var newEnemy; var enemyCount = self.getEnemyCountForWave(waveIndex); switch (waveIndex % 6) { case 0: newEnemy = new EnemyWave0(enemyCount); newEnemy.x = 1000; newEnemy.y = 0; break; case 1: newEnemy = new EnemyWave1(enemyCount); newEnemy.x = Math.random() * 2048; newEnemy.y = 0; break; case 2: newEnemy = new EnemyWave2(enemyCount); newEnemy.x = Math.random() * 2048; newEnemy.y = 2732; break; case 3: newEnemy = new EnemyWave3(enemyCount); newEnemy.x = 2048; newEnemy.y = Math.random() * 2732; break; case 4: newEnemy = new EnemyWave4(enemyCount); newEnemy.x = 0; newEnemy.y = Math.random() * 2732; break; case 5: newEnemy = new EnemyWave5(enemyCount); newEnemy.x = 1000; newEnemy.y = 0; break; } enemies.push(newEnemy); self.addChild(newEnemy); } waveIndex++; waveTimer = 0; } var spatialGrid = new SpatialGrid(100); for (var i = 0; i < enemies.length; i++) { spatialGrid.insert(enemies[i]); } for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; var nearbyEnemies = spatialGrid.retrieve(enemy.x, enemy.y); enemy.move(hero.x, hero.y); if (enemy.intersects(hero)) { LK.showGameOver(); return; } for (var j = 0; j < nearbyEnemies.length; j++) { var otherEnemy = nearbyEnemies[j]; if (otherEnemy !== enemy && enemy.intersects(otherEnemy)) { var overlapX = enemy.x - otherEnemy.x; var overlapY = enemy.y - otherEnemy.y; var overlapMagnitude = Math.sqrt(overlapX * overlapX + overlapY * overlapY); if (overlapMagnitude < 50) { enemy.x += overlapX / overlapMagnitude; enemy.y += overlapY / overlapMagnitude; } } } } spatialGrid.clear(); for (var i = heroBullets.length - 1; i >= 0; i--) { heroBullets[i].move(goal.x, goal.y); if (heroBullets[i].intersects(goal)) { var successAsset = self.createAsset('success', 'Success Asset', .5, .5); var dx = goal.x - heroBullets[i].x; var dy = goal.y - heroBullets[i].y; var magnitude = Math.sqrt(dx * dx + dy * dy); successAsset.x = heroBullets[i].x + dx / magnitude * 75; successAsset.y = heroBullets[i].y + dy / magnitude * 75; self.addChild(successAsset); LK.setTimeout(function () { successAsset.destroy(); }, 1000); heroBullets[i].destroy(); heroBullets.splice(i, 1); score++; enemySpeedIncrease += 0.1; scoreTxt.setText(score.toString()); continue; } for (var j = 0; j < enemies.length; j++) { if (heroBullets[i] && heroBullets[i].intersects(enemies[j])) { heroBullets[i].destroy(); heroBullets.splice(i, 1); break; } } } for (var i = 0; i < enemyBullets.length; i++) { enemyBullets[i].move(); } }); stage.on('move', function (obj) { var pos = obj.event.getLocalPosition(self); hero.x = pos.x; hero.y = pos.y; }); });
===================================================================
--- original.js
+++ change.js
@@ -47,13 +47,13 @@
var self = Container.call(this);
self.enemyCount = 1;
var enemyGraphics = self.createAsset('enemyWave0', 'Enemy Wave 0 character', .5, .5);
self.move = function (heroBullets) {
- var closestBullet = Array.isArray(heroBullets) ? heroBullets.reduce((function (prev, curr) {
+ var closestBullet = heroBullets && heroBullets.length ? heroBullets.reduce((function (prev, curr) {
var prevDist = Math.sqrt(Math.pow(prev.x - this.x, 2) + Math.pow(prev.y - this.y, 2));
var currDist = Math.sqrt(Math.pow(curr.x - this.x, 2) + Math.pow(curr.y - this.y, 2));
return prevDist < currDist ? prev : curr;
- }).bind(this)) : null;
+ }).bind(this), heroBullets[0]) : null;
var dx = closestBullet.x - this.x;
var dy = closestBullet.y - this.y;
var magnitude = Math.sqrt(dx * dx + dy * dy);
var speed = 1 + enemySpeedIncrease;