User prompt
Make a spawn button to spawn more dodgeballs
User prompt
Whenever the ball bounces on the screen, add another ball so there are more dangers
Code edit (1 edits merged)
Please save this source code
User prompt
Dodgeball Dash
Initial prompt
Make a game where the player can move around using four buttons forward down left right and they’re being a ball that bounces around the screen and hurts you whenever it touches you and and when it
/****
* Classes
****/
// Ball class
var Ball = Container.expand(function () {
var self = Container.call(this);
var ballGfx = self.attachAsset('ball', {
anchorX: 0.5,
anchorY: 0.5
});
// Ball velocity
self.vx = 13;
self.vy = 15;
// Ball update: move and bounce
self.update = function () {
self.x += self.vx;
self.y += self.vy;
// Bounce off left/right
if (self.x - self.width / 2 <= 0 && self.vx < 0) {
self.x = self.width / 2;
self.vx *= -1;
}
if (self.x + self.width / 2 >= 2048 && self.vx > 0) {
self.x = 2048 - self.width / 2;
self.vx *= -1;
}
// Bounce off top/bottom
if (self.y - self.height / 2 <= 0 && self.vy < 0) {
self.y = self.height / 2;
self.vy *= -1;
}
if (self.y + self.height / 2 >= 2732 && self.vy > 0) {
self.y = 2732 - self.height / 2;
self.vy *= -1;
}
};
return self;
});
// Directional Button class
var DirButton = Container.expand(function () {
var self = Container.call(this);
// assetId: btn_up, btn_down, btn_left, btn_right
// arrowText: "↑", "↓", "←", "→"
self.init = function (assetId, arrowText) {
var btnGfx = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
var arrow = new Text2(arrowText, {
size: 110,
fill: 0xFFFFFF
});
arrow.anchor.set(0.5, 0.5);
arrow.x = 0;
arrow.y = 0;
self.addChild(arrow);
};
return self;
});
// No plugins needed for MVP
// Player class
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGfx = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
// For collision, use self.width/self.height
self.speed = 18; // Movement speed per tick when button held
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xf7f7f7
});
/****
* Game Code
****/
// Directional buttons: gray boxes with arrows
// Ball: red ellipse
// Player character: blue box
// Center play area
var playWidth = 2048;
var playHeight = 2732;
// Create player
var player = new Player();
game.addChild(player);
player.x = playWidth / 2;
player.y = playHeight - 400;
// Create ball
var ball = new Ball();
game.addChild(ball);
ball.x = playWidth / 2;
ball.y = playHeight / 2;
// Track which directions are pressed
var moveDir = {
up: false,
down: false,
left: false,
right: false
};
// Create directional buttons and add to GUI
var btnSize = 180;
var btnMargin = 60;
var btnY = LK.gui.height - btnSize / 2 - btnMargin; // bottom row
var btnXCenter = LK.gui.width / 2;
var btns = {};
// Up button
btns.up = new DirButton();
btns.up.init('btn_up', "↑");
btns.up.x = btnXCenter;
btns.up.y = LK.gui.height - btnSize * 2 - btnMargin * 2;
LK.gui.addChild(btns.up);
// Down button
btns.down = new DirButton();
btns.down.init('btn_down', "↓");
btns.down.x = btnXCenter;
btns.down.y = btnY;
LK.gui.addChild(btns.down);
// Left button
btns.left = new DirButton();
btns.left.init('btn_left', "←");
btns.left.x = btnXCenter - btnSize - btnMargin;
btns.left.y = LK.gui.height - btnSize - btnMargin;
LK.gui.addChild(btns.left);
// Right button
btns.right = new DirButton();
btns.right.init('btn_right', "→");
btns.right.x = btnXCenter + btnSize + btnMargin;
btns.right.y = LK.gui.height - btnSize - btnMargin;
LK.gui.addChild(btns.right);
// Button event handlers
function btnDown(dir) {
moveDir[dir] = true;
}
function btnUp(dir) {
moveDir[dir] = false;
}
// Attach events to buttons
btns.up.down = function (x, y, obj) {
btnDown('up');
};
btns.up.up = function (x, y, obj) {
btnUp('up');
};
btns.down.down = function (x, y, obj) {
btnDown('down');
};
btns.down.up = function (x, y, obj) {
btnUp('down');
};
btns.left.down = function (x, y, obj) {
btnDown('left');
};
btns.left.up = function (x, y, obj) {
btnUp('left');
};
btns.right.down = function (x, y, obj) {
btnDown('right');
};
btns.right.up = function (x, y, obj) {
btnUp('right');
};
// Timer text (shows survival time)
var timerTxt = new Text2("0.00", {
size: 110,
fill: 0x222222
});
timerTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(timerTxt);
// Timer variables
var startTime = Date.now();
var lastSurvival = 0;
// Game update
game.update = function () {
// Move player
var dx = 0,
dy = 0;
if (moveDir.up) dy -= 1;
if (moveDir.down) dy += 1;
if (moveDir.left) dx -= 1;
if (moveDir.right) dx += 1;
if (dx !== 0 || dy !== 0) {
// Normalize diagonal movement
var mag = Math.sqrt(dx * dx + dy * dy);
dx /= mag;
dy /= mag;
player.x += dx * player.speed;
player.y += dy * player.speed;
// Clamp to play area
var halfW = player.width / 2,
halfH = player.height / 2;
if (player.x < halfW) player.x = halfW;
if (player.x > playWidth - halfW) player.x = playWidth - halfW;
if (player.y < halfH) player.y = halfH;
if (player.y > playHeight - halfH) player.y = playHeight - halfH;
}
// Update ball
ball.update();
// Collision: player & ball
if (player.intersects(ball)) {
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
// Update timer
var now = Date.now();
var survival = (now - startTime) / 1000;
if (Math.floor(survival * 100) !== Math.floor(lastSurvival * 100)) {
timerTxt.setText(survival.toFixed(2));
lastSurvival = survival;
}
};
// Reset timer on game start
startTime = Date.now();
lastSurvival = 0;
timerTxt.setText("0.00"); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,221 @@
-/****
+/****
+* Classes
+****/
+// Ball class
+var Ball = Container.expand(function () {
+ var self = Container.call(this);
+ var ballGfx = self.attachAsset('ball', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Ball velocity
+ self.vx = 13;
+ self.vy = 15;
+ // Ball update: move and bounce
+ self.update = function () {
+ self.x += self.vx;
+ self.y += self.vy;
+ // Bounce off left/right
+ if (self.x - self.width / 2 <= 0 && self.vx < 0) {
+ self.x = self.width / 2;
+ self.vx *= -1;
+ }
+ if (self.x + self.width / 2 >= 2048 && self.vx > 0) {
+ self.x = 2048 - self.width / 2;
+ self.vx *= -1;
+ }
+ // Bounce off top/bottom
+ if (self.y - self.height / 2 <= 0 && self.vy < 0) {
+ self.y = self.height / 2;
+ self.vy *= -1;
+ }
+ if (self.y + self.height / 2 >= 2732 && self.vy > 0) {
+ self.y = 2732 - self.height / 2;
+ self.vy *= -1;
+ }
+ };
+ return self;
+});
+// Directional Button class
+var DirButton = Container.expand(function () {
+ var self = Container.call(this);
+ // assetId: btn_up, btn_down, btn_left, btn_right
+ // arrowText: "↑", "↓", "←", "→"
+ self.init = function (assetId, arrowText) {
+ var btnGfx = self.attachAsset(assetId, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var arrow = new Text2(arrowText, {
+ size: 110,
+ fill: 0xFFFFFF
+ });
+ arrow.anchor.set(0.5, 0.5);
+ arrow.x = 0;
+ arrow.y = 0;
+ self.addChild(arrow);
+ };
+ return self;
+});
+// No plugins needed for MVP
+// Player class
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGfx = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // For collision, use self.width/self.height
+ self.speed = 18; // Movement speed per tick when button held
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0xf7f7f7
+});
+
+/****
+* Game Code
+****/
+// Directional buttons: gray boxes with arrows
+// Ball: red ellipse
+// Player character: blue box
+// Center play area
+var playWidth = 2048;
+var playHeight = 2732;
+// Create player
+var player = new Player();
+game.addChild(player);
+player.x = playWidth / 2;
+player.y = playHeight - 400;
+// Create ball
+var ball = new Ball();
+game.addChild(ball);
+ball.x = playWidth / 2;
+ball.y = playHeight / 2;
+// Track which directions are pressed
+var moveDir = {
+ up: false,
+ down: false,
+ left: false,
+ right: false
+};
+// Create directional buttons and add to GUI
+var btnSize = 180;
+var btnMargin = 60;
+var btnY = LK.gui.height - btnSize / 2 - btnMargin; // bottom row
+var btnXCenter = LK.gui.width / 2;
+var btns = {};
+// Up button
+btns.up = new DirButton();
+btns.up.init('btn_up', "↑");
+btns.up.x = btnXCenter;
+btns.up.y = LK.gui.height - btnSize * 2 - btnMargin * 2;
+LK.gui.addChild(btns.up);
+// Down button
+btns.down = new DirButton();
+btns.down.init('btn_down', "↓");
+btns.down.x = btnXCenter;
+btns.down.y = btnY;
+LK.gui.addChild(btns.down);
+// Left button
+btns.left = new DirButton();
+btns.left.init('btn_left', "←");
+btns.left.x = btnXCenter - btnSize - btnMargin;
+btns.left.y = LK.gui.height - btnSize - btnMargin;
+LK.gui.addChild(btns.left);
+// Right button
+btns.right = new DirButton();
+btns.right.init('btn_right', "→");
+btns.right.x = btnXCenter + btnSize + btnMargin;
+btns.right.y = LK.gui.height - btnSize - btnMargin;
+LK.gui.addChild(btns.right);
+// Button event handlers
+function btnDown(dir) {
+ moveDir[dir] = true;
+}
+function btnUp(dir) {
+ moveDir[dir] = false;
+}
+// Attach events to buttons
+btns.up.down = function (x, y, obj) {
+ btnDown('up');
+};
+btns.up.up = function (x, y, obj) {
+ btnUp('up');
+};
+btns.down.down = function (x, y, obj) {
+ btnDown('down');
+};
+btns.down.up = function (x, y, obj) {
+ btnUp('down');
+};
+btns.left.down = function (x, y, obj) {
+ btnDown('left');
+};
+btns.left.up = function (x, y, obj) {
+ btnUp('left');
+};
+btns.right.down = function (x, y, obj) {
+ btnDown('right');
+};
+btns.right.up = function (x, y, obj) {
+ btnUp('right');
+};
+// Timer text (shows survival time)
+var timerTxt = new Text2("0.00", {
+ size: 110,
+ fill: 0x222222
+});
+timerTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(timerTxt);
+// Timer variables
+var startTime = Date.now();
+var lastSurvival = 0;
+// Game update
+game.update = function () {
+ // Move player
+ var dx = 0,
+ dy = 0;
+ if (moveDir.up) dy -= 1;
+ if (moveDir.down) dy += 1;
+ if (moveDir.left) dx -= 1;
+ if (moveDir.right) dx += 1;
+ if (dx !== 0 || dy !== 0) {
+ // Normalize diagonal movement
+ var mag = Math.sqrt(dx * dx + dy * dy);
+ dx /= mag;
+ dy /= mag;
+ player.x += dx * player.speed;
+ player.y += dy * player.speed;
+ // Clamp to play area
+ var halfW = player.width / 2,
+ halfH = player.height / 2;
+ if (player.x < halfW) player.x = halfW;
+ if (player.x > playWidth - halfW) player.x = playWidth - halfW;
+ if (player.y < halfH) player.y = halfH;
+ if (player.y > playHeight - halfH) player.y = playHeight - halfH;
+ }
+ // Update ball
+ ball.update();
+ // Collision: player & ball
+ if (player.intersects(ball)) {
+ LK.effects.flashScreen(0xff0000, 800);
+ LK.showGameOver();
+ return;
+ }
+ // Update timer
+ var now = Date.now();
+ var survival = (now - startTime) / 1000;
+ if (Math.floor(survival * 100) !== Math.floor(lastSurvival * 100)) {
+ timerTxt.setText(survival.toFixed(2));
+ lastSurvival = survival;
+ }
+};
+// Reset timer on game start
+startTime = Date.now();
+lastSurvival = 0;
+timerTxt.setText("0.00");
\ No newline at end of file