User prompt
Atış hakkım 0 olduğunda kaybedeyim oyunu
User prompt
Kuşa çarpınca atış hakkım azalsın+ oyunda saat emojisi görüyorum ve dünya emojisini kaldır
User prompt
Oyuna kuş ekleyebilir miyiz? Havada uçan ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Arkaplan müzik ismi angrybirds add
User prompt
Müzik çalmıyor arka plan
User prompt
Angrybirds add sound
User prompt
Ekle
User prompt
Ekle
User prompt
Start menü ekranına bölümler yazısının Altına nasıl oynanır butonu ekle tıkladığında oyunu anlat
User prompt
Oyun game over olmuyor
User prompt
6 atış hakkım olsun ve de hakkım bitince game över olsun
User prompt
Bazen kutular ekran dışında oluyor onları düzelt
User prompt
Atış hakkım bitince start ekranına dön
User prompt
Fix
User prompt
5 kutu yaptık ama hala çok gözüküyor
User prompt
Kutu sayısını azalt 5 tane kalsın
User prompt
Oyunda kasmalar mevcut düzelt
User prompt
Atış yaparken zorlanıyorum topu tutarken
User prompt
Ekle
User prompt
Topu tutup atması zor oluyor düzelt arka doğru atmasın topu kutulara doğru sadece
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'toGlobal')' in or related to this line: 'var localPos = self.toLocal(obj.parent.toGlobal(obj.position));' Line Number: 234
User prompt
Hepsini ekle + oyuna giriş bölümü de ekle. ↪💡 Consider importing and using the following plugins: @upit/tween.v1, @upit/storage.v1
User prompt
Düzelt
User prompt
Tasarımları öner Türkçe
User prompt
Zemini çimen yap
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Player = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 1 }); self.isReady = true; self.celebrate = function () { // More dramatic celebration animation tween(self, { scaleX: 1.3, scaleY: 1.3, rotation: 0.2 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1.2, scaleY: 1.2, rotation: 0 }, { duration: 200, easing: tween.bounceOut }); } }); }; self.aim = function () { // More pronounced aiming stance tween(self, { rotation: 0.15, scaleX: 1.1, scaleY: 1.1 }, { duration: 150, easing: tween.easeOut }); }; self.resetPose = function () { // Return to normal stance with bounce tween(self, { rotation: 0, scaleX: 1.2, scaleY: 1.2 }, { duration: 300, easing: tween.elasticOut }); }; return self; }); var Projectile = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('projectile', { anchorX: 0.5, anchorY: 0.5 }); self.velocityX = 0; self.velocityY = 0; self.gravity = GRAVITY; self.launched = false; self.destroyed = false; self.spinSpeed = 0; self.lastX = 0; self.lastY = 0; self.launch = function (vx, vy) { self.velocityX = vx; self.velocityY = vy; self.launched = true; // Calculate spin speed based on velocity self.spinSpeed = Math.sqrt(vx * vx + vy * vy) * 0.02; // Add launch scale animation tween(self, { scaleX: 1.3, scaleY: 1.3 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 150, easing: tween.easeIn }); } }); LK.getSound('launch').play(); }; self.update = function () { if (self.launched && !self.destroyed) { self.x += self.velocityX; self.y += self.velocityY; self.velocityY += self.gravity; // Add spinning animation during flight graphics.rotation += self.spinSpeed; // Add slight scale pulsing for trail effect var speed = Math.sqrt(self.velocityX * self.velocityX + self.velocityY * self.velocityY); var scaleEffect = 1 + Math.sin(LK.ticks * 0.3) * 0.1 * (speed / 20); graphics.scaleX = scaleEffect; graphics.scaleY = scaleEffect; // Check ground collision with transition detection if (self.lastY < groundY - 30 && self.y >= groundY - 30) { self.y = groundY - 30; self.velocityY = -self.velocityY * 0.3; self.velocityX *= 0.8; self.spinSpeed *= 0.8; LK.getSound('impact').play(); // Add bounce animation tween(self, { scaleX: 1.5, scaleY: 0.7 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.bounceOut }); } }); if (Math.abs(self.velocityY) < 2 && Math.abs(self.velocityX) < 1) { self.launched = false; self.spinSpeed = 0; } } // Update last position for transition detection self.lastX = self.x; self.lastY = self.y; // Check screen bounds if (self.x > 2200 || self.x < -100 || self.y > 2800) { self.destroyed = true; } } }; return self; }); var Slingshot = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('slingshot', { anchorX: 0.5, anchorY: 1 }); self.stretched = false; self.originalRotation = 0; self.stretch = function (deltaX, deltaY, distance) { // Calculate stretch angle based on pull direction var stretchAngle = Math.atan2(deltaY, deltaX) * 0.1; var stretchAmount = Math.min(distance / 150, 1) * 0.2; // Animate slingshot stretch tween(self, { rotation: stretchAngle, scaleX: 1 + stretchAmount, scaleY: 1 - stretchAmount * 0.5 }, { duration: 50, easing: tween.easeOut }); self.stretched = true; }; self.release = function () { // Dramatic release animation with bounce back tween(self, { rotation: self.originalRotation - 0.3, scaleX: 0.8, scaleY: 1.3 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { rotation: self.originalRotation, scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.elasticOut }); } }); self.stretched = false; }; self.reset = function () { // Return to normal state tween(self, { rotation: self.originalRotation, scaleX: 1, scaleY: 1 }, { duration: 150, easing: tween.easeOut }); self.stretched = false; }; return self; }); var TargetBlock = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('targetBlock', { anchorX: 0.5, anchorY: 0.5 }); self.health = 1; self.destroyed = false; self.takeDamage = function () { self.health--; if (self.health <= 0) { self.destroyed = true; LK.getSound('destroy').play(); LK.setScore(LK.getScore() + 100); LK.effects.flashObject(self, 0xFFFFFF, 200); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game constants var GRAVITY = 0.3; var MAX_DRAG_DISTANCE = 150; var VELOCITY_MULTIPLIER = 0.3; var GROUND_Y = 2550; var INITIAL_SHOTS = 5; var BLOCK_POINTS = 100; // Game variables var slingshot; var slingshotBase; var player; var currentProjectile = null; var isAiming = false; var aimStartX = 0; var aimStartY = 0; var trajectoryDots = []; var targetBlocks = []; var projectiles = []; var shotsRemaining = INITIAL_SHOTS; var level = 1; var groundY = GROUND_Y; // UI elements var shotsText = new Text2('Atış: 5', { size: 80, fill: 0x000000 }); shotsText.anchor.set(0, 0); LK.gui.topRight.addChild(shotsText); shotsText.x = -300; shotsText.y = 100; var scoreText = new Text2('Puan: 0', { size: 80, fill: 0x000000 }); scoreText.anchor.set(0, 0); LK.gui.top.addChild(scoreText); scoreText.y = 100; // Create grass ground var ground = game.addChild(LK.getAsset('grass', { anchorX: 0.5, anchorY: 0.5 })); ground.x = 1024; ground.y = GROUND_Y + 100; // Position grass lower for better visual effect ground.scaleY = 1.5; // Make grass thicker // Create slingshot slingshotBase = game.addChild(LK.getAsset('slingshotBase', { anchorX: 0.5, anchorY: 1 })); slingshotBase.x = 200; slingshotBase.y = GROUND_Y; slingshot = game.addChild(new Slingshot()); slingshot.x = 200; slingshot.y = GROUND_Y; // Create player character player = game.addChild(new Player()); player.x = 80; // Position further behind slingshot player.y = GROUND_Y; player.scaleX = 1.2; // Make player more visible player.scaleY = 1.2; // Add slingshot asset to player's hand var playerSlingshot = player.addChild(LK.getAsset('Sapan', { anchorX: 0.5, anchorY: 0.8 })); playerSlingshot.x = 50; // Offset from player center to hand position playerSlingshot.y = -100; // Offset upward to hand level playerSlingshot.scaleX = 0.8; // Scale down for better proportion playerSlingshot.scaleY = 0.8; // Create trajectory dots for (var i = 0; i < 15; i++) { var dot = game.addChild(LK.getAsset('trajectoryDot', { anchorX: 0.5, anchorY: 0.5 })); dot.visible = false; trajectoryDots.push(dot); } // Create target structures function createLevel() { // Clear existing targets for (var i = targetBlocks.length - 1; i >= 0; i--) { if (targetBlocks[i].destroyed) { targetBlocks[i].destroy(); targetBlocks.splice(i, 1); } } targetBlocks = []; // Create target blocks in tower formation var startX = 1400; var startY = GROUND_Y - 50; // Bottom row for (var i = 0; i < 4; i++) { var block = game.addChild(new TargetBlock()); block.x = startX + i * 110; block.y = startY; targetBlocks.push(block); } // Middle row for (var i = 0; i < 3; i++) { var block = game.addChild(new TargetBlock()); block.x = startX + 55 + i * 110; block.y = startY - 110; targetBlocks.push(block); } // Top row for (var i = 0; i < 2; i++) { var block = game.addChild(new TargetBlock()); block.x = startX + 110 + i * 110; block.y = startY - 220; targetBlocks.push(block); } // Top block var block = game.addChild(new TargetBlock()); block.x = startX + 165; block.y = startY - 330; targetBlocks.push(block); } // Initialize first level createLevel(); // Helper functions function calculateTrajectory(startX, startY, velocityX, velocityY) { var points = []; var x = startX; var y = startY; var vx = velocityX; var vy = velocityY; var timeStep = 2; var gravity = GRAVITY * timeStep; for (var i = 0; i < 15; i++) { points.push({ x: x, y: y }); x += vx * timeStep; y += vy * timeStep; vy += gravity; if (y >= GROUND_Y - 30) break; } return points; } function updateTrajectoryDisplay(points) { for (var i = 0; i < trajectoryDots.length; i++) { if (i < points.length) { trajectoryDots[i].x = points[i].x; trajectoryDots[i].y = points[i].y; trajectoryDots[i].visible = true; } else { trajectoryDots[i].visible = false; } } } function hideTrajectoryDisplay() { for (var i = 0; i < trajectoryDots.length; i++) { trajectoryDots[i].visible = false; } } function checkProjectileCollisions(projectile) { for (var i = 0; i < targetBlocks.length; i++) { var block = targetBlocks[i]; if (!block.destroyed && projectile.intersects(block)) { block.takeDamage(); LK.getSound('impact').play(); // Reduce projectile velocity but make it more realistic projectile.velocityX *= -0.2; projectile.velocityY *= -0.2; // Add some randomness to bounce projectile.velocityX += (Math.random() - 0.5) * 2; projectile.velocityY += (Math.random() - 0.5) * 2; if (block.destroyed) { player.celebrate(); // Player celebrates when destroying a block } return true; } } return false; } function checkLevelComplete() { var remainingBlocks = 0; for (var i = 0; i < targetBlocks.length; i++) { if (!targetBlocks[i].destroyed) { remainingBlocks++; } } if (remainingBlocks === 0) { // Level complete - restart with new level level++; shotsRemaining = INITIAL_SHOTS; shotsText.setText('Atış: ' + shotsRemaining); LK.setTimeout(function () { createLevel(); }, 1000); return true; } if (shotsRemaining <= 0 && projectiles.length === 0) { // Game over LK.showGameOver(); return true; } return false; } // Event handlers game.down = function (x, y, obj) { if (!currentProjectile && shotsRemaining > 0) { var distance = Math.sqrt((x - slingshot.x) * (x - slingshot.x) + (y - slingshot.y) * (y - slingshot.y)); if (distance < 150) { isAiming = true; aimStartX = x; aimStartY = y; currentProjectile = game.addChild(new Projectile()); currentProjectile.x = slingshot.x; currentProjectile.y = slingshot.y - 100; player.aim(); // Player leans forward when aiming } } }; game.move = function (x, y, obj) { if (isAiming && currentProjectile) { var deltaX = aimStartX - x; var deltaY = aimStartY - y; // Limit drag distance var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); if (distance > MAX_DRAG_DISTANCE) { deltaX = deltaX / distance * MAX_DRAG_DISTANCE; deltaY = deltaY / distance * MAX_DRAG_DISTANCE; distance = MAX_DRAG_DISTANCE; } currentProjectile.x = slingshot.x - deltaX * 0.5; currentProjectile.y = slingshot.y - 100 - deltaY * 0.5; // Animate slingshot stretch slingshot.stretch(deltaX, deltaY, distance); // Calculate and show trajectory var velocityX = deltaX * VELOCITY_MULTIPLIER; var velocityY = deltaY * VELOCITY_MULTIPLIER; var trajectoryPoints = calculateTrajectory(currentProjectile.x, currentProjectile.y, velocityX, velocityY); updateTrajectoryDisplay(trajectoryPoints); } }; game.up = function (x, y, obj) { if (isAiming && currentProjectile) { var deltaX = aimStartX - x; var deltaY = aimStartY - y; // Limit drag distance var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); if (distance > MAX_DRAG_DISTANCE) { deltaX = deltaX / distance * MAX_DRAG_DISTANCE; deltaY = deltaY / distance * MAX_DRAG_DISTANCE; } if (distance > 20) { var velocityX = deltaX * VELOCITY_MULTIPLIER; var velocityY = deltaY * VELOCITY_MULTIPLIER; // Animate slingshot release slingshot.release(); // Add screen flash effect for dramatic launch LK.effects.flashScreen(0xFFFFFF, 200); currentProjectile.launch(velocityX, velocityY); currentProjectile.lastX = currentProjectile.x; currentProjectile.lastY = currentProjectile.y; projectiles.push(currentProjectile); shotsRemaining--; shotsText.setText('Atış: ' + shotsRemaining); player.celebrate(); // Player celebrates the shot } else { currentProjectile.destroy(); slingshot.reset(); // Reset slingshot if no shot } currentProjectile = null; isAiming = false; hideTrajectoryDisplay(); player.resetPose(); // Player returns to normal stance } }; game.update = function () { // Update score display scoreText.setText('Puan: ' + LK.getScore()); // Update projectiles for (var i = projectiles.length - 1; i >= 0; i--) { var projectile = projectiles[i]; if (projectile.destroyed) { projectile.destroy(); projectiles.splice(i, 1); continue; } if (projectile.launched) { checkProjectileCollisions(projectile); } } // Remove destroyed blocks for (var i = targetBlocks.length - 1; i >= 0; i--) { if (targetBlocks[i].destroyed) { targetBlocks[i].destroy(); targetBlocks.splice(i, 1); } } // Check level completion checkLevelComplete(); };
===================================================================
--- original.js
+++ change.js
@@ -65,12 +65,14 @@
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
- self.gravity = 0.3;
+ self.gravity = GRAVITY;
self.launched = false;
self.destroyed = false;
self.spinSpeed = 0;
+ self.lastX = 0;
+ self.lastY = 0;
self.launch = function (vx, vy) {
self.velocityX = vx;
self.velocityY = vy;
self.launched = true;
@@ -106,14 +108,15 @@
var speed = Math.sqrt(self.velocityX * self.velocityX + self.velocityY * self.velocityY);
var scaleEffect = 1 + Math.sin(LK.ticks * 0.3) * 0.1 * (speed / 20);
graphics.scaleX = scaleEffect;
graphics.scaleY = scaleEffect;
- // Check ground collision
- if (self.y >= groundY - 30) {
+ // Check ground collision with transition detection
+ if (self.lastY < groundY - 30 && self.y >= groundY - 30) {
self.y = groundY - 30;
self.velocityY = -self.velocityY * 0.3;
self.velocityX *= 0.8;
self.spinSpeed *= 0.8;
+ LK.getSound('impact').play();
// Add bounce animation
tween(self, {
scaleX: 1.5,
scaleY: 0.7
@@ -129,13 +132,16 @@
easing: tween.bounceOut
});
}
});
- if (Math.abs(self.velocityY) < 2) {
+ if (Math.abs(self.velocityY) < 2 && Math.abs(self.velocityX) < 1) {
self.launched = false;
self.spinSpeed = 0;
}
}
+ // Update last position for transition detection
+ self.lastX = self.x;
+ self.lastY = self.y;
// Check screen bounds
if (self.x > 2200 || self.x < -100 || self.y > 2800) {
self.destroyed = true;
}
@@ -231,8 +237,15 @@
/****
* Game Code
****/
+// Game constants
+var GRAVITY = 0.3;
+var MAX_DRAG_DISTANCE = 150;
+var VELOCITY_MULTIPLIER = 0.3;
+var GROUND_Y = 2550;
+var INITIAL_SHOTS = 5;
+var BLOCK_POINTS = 100;
// Game variables
var slingshot;
var slingshotBase;
var player;
@@ -242,11 +255,11 @@
var aimStartY = 0;
var trajectoryDots = [];
var targetBlocks = [];
var projectiles = [];
-var shotsRemaining = 5;
+var shotsRemaining = INITIAL_SHOTS;
var level = 1;
-var groundY = 2550;
+var groundY = GROUND_Y;
// UI elements
var shotsText = new Text2('Atış: 5', {
size: 80,
fill: 0x000000
@@ -267,24 +280,24 @@
anchorX: 0.5,
anchorY: 0.5
}));
ground.x = 1024;
-ground.y = groundY + 100; // Position grass lower for better visual effect
+ground.y = GROUND_Y + 100; // Position grass lower for better visual effect
ground.scaleY = 1.5; // Make grass thicker
// Create slingshot
slingshotBase = game.addChild(LK.getAsset('slingshotBase', {
anchorX: 0.5,
anchorY: 1
}));
slingshotBase.x = 200;
-slingshotBase.y = groundY;
+slingshotBase.y = GROUND_Y;
slingshot = game.addChild(new Slingshot());
slingshot.x = 200;
-slingshot.y = groundY;
+slingshot.y = GROUND_Y;
// Create player character
player = game.addChild(new Player());
player.x = 80; // Position further behind slingshot
-player.y = groundY;
+player.y = GROUND_Y;
player.scaleX = 1.2; // Make player more visible
player.scaleY = 1.2;
// Add slingshot asset to player's hand
var playerSlingshot = player.addChild(LK.getAsset('Sapan', {
@@ -315,9 +328,9 @@
}
targetBlocks = [];
// Create target blocks in tower formation
var startX = 1400;
- var startY = groundY - 50;
+ var startY = GROUND_Y - 50;
// Bottom row
for (var i = 0; i < 4; i++) {
var block = game.addChild(new TargetBlock());
block.x = startX + i * 110;
@@ -352,17 +365,19 @@
var x = startX;
var y = startY;
var vx = velocityX;
var vy = velocityY;
+ var timeStep = 2;
+ var gravity = GRAVITY * timeStep;
for (var i = 0; i < 15; i++) {
points.push({
x: x,
y: y
});
- x += vx * 2;
- y += vy * 2;
- vy += 0.5 * 2;
- if (y >= groundY - 30) break;
+ x += vx * timeStep;
+ y += vy * timeStep;
+ vy += gravity;
+ if (y >= GROUND_Y - 30) break;
}
return points;
}
function updateTrajectoryDisplay(points) {
@@ -410,9 +425,9 @@
}
if (remainingBlocks === 0) {
// Level complete - restart with new level
level++;
- shotsRemaining = 5;
+ shotsRemaining = INITIAL_SHOTS;
shotsText.setText('Atış: ' + shotsRemaining);
LK.setTimeout(function () {
createLevel();
}, 1000);
@@ -444,21 +459,21 @@
if (isAiming && currentProjectile) {
var deltaX = aimStartX - x;
var deltaY = aimStartY - y;
// Limit drag distance
- var maxDistance = 150;
var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
- if (distance > maxDistance) {
- deltaX = deltaX / distance * maxDistance;
- deltaY = deltaY / distance * maxDistance;
+ if (distance > MAX_DRAG_DISTANCE) {
+ deltaX = deltaX / distance * MAX_DRAG_DISTANCE;
+ deltaY = deltaY / distance * MAX_DRAG_DISTANCE;
+ distance = MAX_DRAG_DISTANCE;
}
currentProjectile.x = slingshot.x - deltaX * 0.5;
currentProjectile.y = slingshot.y - 100 - deltaY * 0.5;
// Animate slingshot stretch
slingshot.stretch(deltaX, deltaY, distance);
// Calculate and show trajectory
- var velocityX = deltaX * 0.3;
- var velocityY = deltaY * 0.3;
+ var velocityX = deltaX * VELOCITY_MULTIPLIER;
+ var velocityY = deltaY * VELOCITY_MULTIPLIER;
var trajectoryPoints = calculateTrajectory(currentProjectile.x, currentProjectile.y, velocityX, velocityY);
updateTrajectoryDisplay(trajectoryPoints);
}
};
@@ -466,22 +481,23 @@
if (isAiming && currentProjectile) {
var deltaX = aimStartX - x;
var deltaY = aimStartY - y;
// Limit drag distance
- var maxDistance = 150;
var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
- if (distance > maxDistance) {
- deltaX = deltaX / distance * maxDistance;
- deltaY = deltaY / distance * maxDistance;
+ if (distance > MAX_DRAG_DISTANCE) {
+ deltaX = deltaX / distance * MAX_DRAG_DISTANCE;
+ deltaY = deltaY / distance * MAX_DRAG_DISTANCE;
}
if (distance > 20) {
- var velocityX = deltaX * 0.3;
- var velocityY = deltaY * 0.3;
+ var velocityX = deltaX * VELOCITY_MULTIPLIER;
+ var velocityY = deltaY * VELOCITY_MULTIPLIER;
// Animate slingshot release
slingshot.release();
// Add screen flash effect for dramatic launch
LK.effects.flashScreen(0xFFFFFF, 200);
currentProjectile.launch(velocityX, velocityY);
+ currentProjectile.lastX = currentProjectile.x;
+ currentProjectile.lastY = currentProjectile.y;
projectiles.push(currentProjectile);
shotsRemaining--;
shotsText.setText('Atış: ' + shotsRemaining);
player.celebrate(); // Player celebrates the shot