User prompt
1 times the speed of artificial intelligence
User prompt
Speed up the speed of the ball by 1x
User prompt
Speed up the speed of the ball
Code edit (1 edits merged)
Please save this source code
User prompt
AI Pong Challenge
Initial prompt
Master, make me a pong game, let the other side play with artificial intelligence
/****
* Classes
****/
// var tween = LK.import("@upit/tween.v1");
var Ball = Container.expand(function () {
var self = Container.call(this);
var ballGraphics = self.attachAsset('ball', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.speed = 24;
self.reset = function () {
self.x = 2048 / 2;
self.y = 2732 / 2;
// Random direction
var angle = (Math.random() - 0.5) * Math.PI / 3; // -30 to 30 degrees
var direction = Math.random() > 0.5 ? 1 : -1;
self.velocityX = Math.cos(angle) * self.speed * direction;
self.velocityY = Math.sin(angle) * self.speed;
};
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
// Bounce off top and bottom walls
if (self.y <= 10 || self.y >= 2732 - 10) {
self.velocityY = -self.velocityY;
self.y = self.y <= 10 ? 10 : 2732 - 10;
LK.getSound('wallHit').play();
}
// Check if ball went off screen (scoring)
if (self.x < -50) {
// AI scores
aiScore++;
updateScore();
LK.getSound('score').play();
checkWinCondition();
if (!gameEnded) {
self.reset();
}
} else if (self.x > 2048 + 50) {
// Player scores
playerScore++;
updateScore();
LK.getSound('score').play();
checkWinCondition();
if (!gameEnded) {
self.reset();
}
}
};
return self;
});
var Paddle = Container.expand(function () {
var self = Container.call(this);
var paddleGraphics = self.attachAsset('paddle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 16;
self.targetY = 0;
self.isPlayer = false;
self.update = function () {
if (!self.isPlayer) {
// AI paddle movement
var diff = self.targetY - self.y;
if (Math.abs(diff) > 5) {
self.y += diff > 0 ? self.speed : -self.speed;
}
// Keep AI paddle within bounds
var halfHeight = paddleGraphics.height / 2;
if (self.y < halfHeight) {
self.y = halfHeight;
} else if (self.y > 2732 - halfHeight) {
self.y = 2732 - halfHeight;
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var playerPaddle;
var aiPaddle;
var ball;
var centerLine;
var playerScore = 0;
var aiScore = 0;
var scoreText;
var gameEnded = false;
var winningScore = 5;
var isDragging = false;
// Create center line
centerLine = game.addChild(LK.getAsset('centerLine', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
}));
// Create player paddle (left side)
playerPaddle = game.addChild(new Paddle());
playerPaddle.x = 100;
playerPaddle.y = 2732 / 2;
playerPaddle.isPlayer = true;
// Create AI paddle (right side)
aiPaddle = game.addChild(new Paddle());
aiPaddle.x = 2048 - 100;
aiPaddle.y = 2732 / 2;
aiPaddle.isPlayer = false;
// Create ball
ball = game.addChild(new Ball());
ball.reset();
// Create score display
scoreText = new Text2('0 - 0', {
size: 100,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
function updateScore() {
scoreText.setText(playerScore + ' - ' + aiScore);
}
function checkWinCondition() {
if (playerScore >= winningScore) {
gameEnded = true;
LK.showYouWin();
} else if (aiScore >= winningScore) {
gameEnded = true;
LK.showGameOver();
}
}
function checkBallPaddleCollision() {
var ballBounds = ball.getBounds();
var playerBounds = playerPaddle.getBounds();
var aiBounds = aiPaddle.getBounds();
// Check collision with player paddle
if (ball.intersects(playerPaddle) && ball.velocityX < 0) {
var relativeIntersectY = (ball.y - playerPaddle.y) / (150 / 2);
var bounceAngle = relativeIntersectY * Math.PI / 4; // Max 45 degrees
ball.velocityX = Math.abs(ball.velocityX);
ball.velocityY = Math.sin(bounceAngle) * ball.speed;
// Increase speed slightly
ball.speed += 0.2;
var magnitude = Math.sqrt(ball.velocityX * ball.velocityX + ball.velocityY * ball.velocityY);
ball.velocityX = ball.velocityX / magnitude * ball.speed;
ball.velocityY = ball.velocityY / magnitude * ball.speed;
LK.getSound('paddleHit').play();
}
// Check collision with AI paddle
if (ball.intersects(aiPaddle) && ball.velocityX > 0) {
var relativeIntersectY = (ball.y - aiPaddle.y) / (150 / 2);
var bounceAngle = relativeIntersectY * Math.PI / 4;
ball.velocityX = -Math.abs(ball.velocityX);
ball.velocityY = Math.sin(bounceAngle) * ball.speed;
// Increase speed slightly
ball.speed += 0.2;
var magnitude = Math.sqrt(ball.velocityX * ball.velocityX + ball.velocityY * ball.velocityY);
ball.velocityX = ball.velocityX / magnitude * ball.speed;
ball.velocityY = ball.velocityY / magnitude * ball.speed;
LK.getSound('paddleHit').play();
}
}
// Touch controls for player paddle
game.down = function (x, y, obj) {
// Only respond to touches on the left half of the screen
if (x < 2048 / 2) {
isDragging = true;
playerPaddle.y = y;
// Keep paddle within bounds
var halfHeight = 75; // Half of paddle height
if (playerPaddle.y < halfHeight) {
playerPaddle.y = halfHeight;
} else if (playerPaddle.y > 2732 - halfHeight) {
playerPaddle.y = 2732 - halfHeight;
}
}
};
game.move = function (x, y, obj) {
if (isDragging && x < 2048 / 2) {
playerPaddle.y = y;
// Keep paddle within bounds
var halfHeight = 75;
if (playerPaddle.y < halfHeight) {
playerPaddle.y = halfHeight;
} else if (playerPaddle.y > 2732 - halfHeight) {
playerPaddle.y = 2732 - halfHeight;
}
}
};
game.up = function (x, y, obj) {
isDragging = false;
};
game.update = function () {
if (gameEnded) {
return;
}
// Update AI paddle target based on ball position
aiPaddle.targetY = ball.y;
// Check ball-paddle collisions
checkBallPaddleCollision();
}; ===================================================================
--- original.js
+++ change.js
@@ -57,9 +57,9 @@
var paddleGraphics = self.attachAsset('paddle', {
anchorX: 0.5,
anchorY: 0.5
});
- self.speed = 8;
+ self.speed = 16;
self.targetY = 0;
self.isPlayer = false;
self.update = function () {
if (!self.isPlayer) {