User prompt
ad boudnries of movement for enemywave0
Code edit (2 edits merged)
Please save this source code
User prompt
limit the movement area of enemywave1
User prompt
limit the movement of enemywave0 to restrain within the limits of the goal size
User prompt
limit enemywave1 movement within goal
Code edit (6 edits merged)
Please save this source code
User prompt
create enemywave0
Code edit (1 edits merged)
Please save this source code
User prompt
add goalie to tick
User prompt
goalie should move towards hero
Code edit (1 edits merged)
Please save this source code
User prompt
add tik event to move golie towards hero
User prompt
Fix Bug: 'TypeError: bullets.forEach is not a function' in this line: 'bullets.forEach(function (bullet) {' Line Number: 7
User prompt
Fix Bug: 'TypeError: bullets.forEach is not a function' in this line: 'bullets.forEach(function (bullet) {' Line Number: 7
User prompt
goalie should move towards closest hero bullet
User prompt
goalie should also move towards closer ball
User prompt
add goalie movement on tik
User prompt
make goalie move
User prompt
goalie should move towards hero withing its current limits
User prompt
goalie should only move inside the goal
User prompt
goalie should move towards herobullet
User prompt
hero shoot should go towards goal
User prompt
goalie should move towards the hero but stay in the limits of the goal
User prompt
create goalie asset. goalie asset will be created inside goal asset
Code edit (1 edits merged)
Please save this source code
var Goalie = Container.expand(function () { var self = Container.call(this); var goalieGraphics = self.createAsset('goalie', 'Goalie asset', 0.5, 0.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; this.y += dy / magnitude; }; }); 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 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); this.x += dx / magnitude * 2; this.y += dy / magnitude * 2; }; }); 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); this.x += dx / magnitude * 2; this.y += dy / magnitude * 2; }; }); 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); this.x += dx / magnitude * 2; this.y += dy / magnitude * 2; }; }); 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); this.x += dx / magnitude * 2; this.y += dy / magnitude * 2; }; }); 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); this.x += dx / magnitude * 2; this.y += dy / magnitude * 2; }; }); 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 % 5) { case 0: return 10; case 1: return 3; case 2: return 4; case 3: return 20; case 4: 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; var goalie = new Goalie(); goal.addChild(goalie); self.addChild(goal); var hero = self.addChild(new Hero()); var enemies = []; var waveIndex = 0; var maxWaveCount = 5; 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) { for (var i = 0; i < self.getEnemyCountForWave(waveIndex); i++) { var newEnemy; var enemyCount = self.getEnemyCountForWave(waveIndex); switch (waveIndex % 5) { case 0: newEnemy = new EnemyWave1(enemyCount); newEnemy.x = Math.random() * 2048; newEnemy.y = 0; break; case 1: newEnemy = new EnemyWave2(enemyCount); newEnemy.x = Math.random() * 2048; newEnemy.y = 2732; break; case 2: newEnemy = new EnemyWave3(enemyCount); newEnemy.x = 2048; newEnemy.y = Math.random() * 2732; break; case 3: newEnemy = new EnemyWave4(enemyCount); newEnemy.x = 0; newEnemy.y = Math.random() * 2732; break; case 4: newEnemy = new EnemyWave5(enemyCount); newEnemy.x = Math.random() * -1000; newEnemy.y = Math.random() * -1000; 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); var moveX = hero.x - enemy.x; var moveY = hero.y - enemy.y; var moveMagnitude = Math.sqrt(moveX * moveX + moveY * moveY); enemy.x += moveX / moveMagnitude; enemy.y += moveY / moveMagnitude; 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 = 0; i < heroBullets.length; i++) { heroBullets[i].move(goal.x, goal.y); for (var j = 0; j < enemies.length; j++) { if (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
@@ -1,19 +1,13 @@
var Goalie = Container.expand(function () {
var self = Container.call(this);
var goalieGraphics = self.createAsset('goalie', 'Goalie asset', 0.5, 0.5);
- self.move = function (goalWidth, goalHeight, heroX, heroY) {
- var minX = 0;
- var maxX = goalWidth - this.width;
- var minY = 0;
- var maxY = goalHeight - this.height;
+ 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;
this.y += dy / magnitude;
- this.x = Math.max(minX, Math.min(this.x, maxX));
- this.y = Math.max(minY, Math.min(this.y, maxY));
};
});
var SpatialGrid = Container.expand(function (cellSize) {
var self = Container.call(this);
@@ -163,9 +157,8 @@
hero.y = 2732 / 2;
var bulletTimer = 0;
var bulletInterval = 100;
LK.on('tick', function () {
- goalie.move(hero.x, hero.y);
hero.move();
bulletTimer++;
if (bulletTimer >= bulletInterval) {
var newBullet = new HeroBullet();