User prompt
Bıçağı daha hızlı at
User prompt
Her leveli biraz dah zorlaştır hızlı dönme her level bir daha hızlı olsun ve her 5 level de boos daire olsun daha güçlü ve dah değişik özellikleri olsun ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'shop.refreshItems();' Line Number: 320
User prompt
Shop yap shop da kılıç kozmetikleri yap ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Çalkı birahdaha özenli yap ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Çarkı birah daha belirgin yap ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'ReferenceError: Can't find variable: showLevelComplete' in or related to this line: 'showLevelComplete();' Line Number: 81
User prompt
Bölüm bittinde yeni bölüme geç
User prompt
Bölüm bittinde çark yap çark ta para birimi yap ve bölüm bittinde sahne yap ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Biraz daha hızlı at
User prompt
Bıçakı göndediğin de yavaş atmasın bıçağı
User prompt
Düz bıçak olsun
Code edit (1 edits merged)
Please save this source code
User prompt
Knife Throw Challenge
Initial prompt
Oyunun amacı 8 bıçak var ve daire ye bıçak batırman gerek eğer bıçak bıçağa çalparsa kaybeder
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Circle = Container.expand(function () { var self = Container.call(this); var circleGraphics = self.attachAsset('circle', { anchorX: 0.5, anchorY: 0.5 }); self.rotationSpeed = 0.02; self.update = function () { self.rotation += self.rotationSpeed; }; return self; }); var Knife = Container.expand(function () { var self = Container.call(this); // Create knife blade var blade = self.attachAsset('knife', { anchorX: 0.5, anchorY: 0.5, rotation: Math.PI / 2 }); // Create knife handle var handle = self.attachAsset('handle', { anchorX: 0.5, anchorY: 0.5, y: 50, rotation: Math.PI / 2 }); self.isThrown = false; self.isStuck = false; self.speed = 40; self.targetDistance = 0; self.stuckAngle = 0; self.update = function () { if (self.isThrown && !self.isStuck) { self.y -= self.speed; // Check if knife reached the circle var distanceToCenter = Math.sqrt(Math.pow(self.x - circle.x, 2) + Math.pow(self.y - circle.y, 2)); if (distanceToCenter <= 200) { self.stickToCircle(); } } else if (self.isStuck) { // Rotate with the circle var angle = self.stuckAngle + circle.rotation; self.x = circle.x + Math.cos(angle) * self.targetDistance; self.y = circle.y + Math.sin(angle) * self.targetDistance; self.rotation = angle + Math.PI / 2; } }; self.stickToCircle = function () { self.isStuck = true; var angle = Math.atan2(self.y - circle.y, self.x - circle.x); self.stuckAngle = angle - circle.rotation; self.targetDistance = Math.sqrt(Math.pow(self.x - circle.x, 2) + Math.pow(self.y - circle.y, 2)); self.rotation = angle + Math.PI / 2; knivesStuck++; LK.setScore(knivesStuck); scoreText.setText('Knives: ' + knivesStuck + '/8'); if (knivesStuck >= 8) { showLevelComplete(); } LK.getSound('hit').play(); }; return self; }); var LevelComplete = Container.expand(function () { var self = Container.call(this); // Semi-transparent background var bg = LK.getAsset('background', { width: 2048, height: 2732, color: 0x000000, shape: 'box', alpha: 0.8 }); self.addChild(bg); // Level complete text var titleText = new Text2('LEVEL ' + currentLevel + ' COMPLETE!', { size: 100, fill: 0xFFD700 }); titleText.anchor.set(0.5, 0.5); titleText.x = 1024; titleText.y = 600; self.addChild(titleText); // Create wheel with entrance animation self.wheel = new WheelReward(); self.wheel.x = 1024; self.wheel.y = 1366; self.wheel.alpha = 0; self.wheel.scaleX = 0.3; self.wheel.scaleY = 0.3; self.addChild(self.wheel); // Animate wheel entrance tween(self.wheel, { alpha: 1, scaleX: 1.0, scaleY: 1.0 }, { duration: 800, easing: tween.easeOut }); // Spin button var spinText = new Text2('TAP TO SPIN!', { size: 60, fill: 0xFFFFFF }); spinText.anchor.set(0.5, 0.5); spinText.x = 1024; spinText.y = 1800; self.addChild(spinText); // Continue button (appears after spin) self.continueText = new Text2('TAP TO CONTINUE', { size: 50, fill: 0x4ECDC4 }); self.continueText.anchor.set(0.5, 0.5); self.continueText.x = 1024; self.continueText.y = 2100; self.continueText.alpha = 0; self.addChild(self.continueText); self.hasSpun = false; self.down = function (x, y, obj) { if (!self.hasSpun && !self.wheel.isSpinning) { self.wheel.spin(); self.hasSpun = true; spinText.alpha = 0; // Show continue button after spin completes LK.setTimeout(function () { tween(self.continueText, { alpha: 1 }, { duration: 500 }); }, 3500); } else if (self.hasSpun && !self.wheel.isSpinning) { // Continue to next level self.destroy(); nextLevel(); } }; return self; }); var WheelReward = Container.expand(function () { var self = Container.call(this); // Create wheel outer ring for better definition var outerRing = self.attachAsset('wheel', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.6, scaleY: 1.6 }); outerRing.tint = 0x2C3E50; // Create wheel background var wheelBg = self.attachAsset('wheel', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.4, scaleY: 1.4 }); wheelBg.tint = 0x34495E; // Create inner circle for depth var innerCircle = self.attachAsset('wheel', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 0.3 }); innerCircle.tint = 0x1A252F; // Create wheel sections self.sections = []; self.rewards = [500, 100, 1000, 200, 750, 50, 1500, 25]; var sectionColors = [0xFF6B6B, 0x4ECDC4, 0x45B7D1, 0x96CEB4, 0xFECA57, 0xFF9FF3, 0x54A0FF, 0x5F27CD]; for (var i = 0; i < 8; i++) { var section = self.attachAsset('wheelSection', { anchorX: 0, anchorY: 0.5, x: 0, y: 0, scaleX: 2.0, scaleY: 4, rotation: i * Math.PI * 2 / 8 }); section.tint = sectionColors[i]; self.sections.push(section); // Add coin icon for each section var coinIcon = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8 }); coinIcon.x = Math.cos(i * Math.PI * 2 / 8) * 150; coinIcon.y = Math.sin(i * Math.PI * 2 / 8) * 150; self.addChild(coinIcon); // Add reward text with better styling var rewardText = new Text2(self.rewards[i].toString(), { size: 50, fill: 0xFFFFFF }); rewardText.anchor.set(0.5, 0.5); rewardText.x = Math.cos(i * Math.PI * 2 / 8) * 220; rewardText.y = Math.sin(i * Math.PI * 2 / 8) * 220; self.addChild(rewardText); } // Create decorative border lines for (var j = 0; j < 8; j++) { var borderLine = self.attachAsset('wheelSection', { anchorX: 0, anchorY: 0.5, x: 0, y: 0, scaleX: 2.2, scaleY: 0.1, rotation: j * Math.PI * 2 / 8 }); borderLine.tint = 0x2C3E50; } // Create pointer with enhanced design var pointer = self.attachAsset('pointer', { anchorX: 0.5, anchorY: 1, y: -450, scaleX: 2.0, scaleY: 2.0 }); pointer.tint = 0xFF4757; // Add pointer shadow for depth var pointerShadow = self.attachAsset('pointer', { anchorX: 0.5, anchorY: 1, y: -445, x: 5, scaleX: 2.0, scaleY: 2.0 }); pointerShadow.tint = 0x000000; pointerShadow.alpha = 0.3; self.isSpinning = false; self.spinSpeed = 0; self.finalAngle = 0; self.spin = function () { if (self.isSpinning) return; self.isSpinning = true; self.spinSpeed = 0.3; self.finalAngle = Math.random() * Math.PI * 2 + Math.PI * 12; // More rotations for excitement var currentRotation = self.rotation; // Add anticipation animation before spinning tween(self, { scaleX: 1.1, scaleY: 1.1 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { // Scale back and start main spin tween(self, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100 }); // Main spinning animation with enhanced easing tween(self, { rotation: currentRotation + self.finalAngle }, { duration: 4000, easing: tween.easeOut, onFinish: function onFinish() { self.isSpinning = false; // Add small bounce effect when stopping tween(self, { scaleX: 1.05, scaleY: 1.05 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1.0, scaleY: 1.0 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { self.giveReward(); } }); } }); } }); } }); }; self.giveReward = function () { var normalizedAngle = (self.rotation % (Math.PI * 2) + Math.PI * 2) % (Math.PI * 2); var sectionIndex = Math.floor(normalizedAngle / (Math.PI * 2 / 8)); var reward = self.rewards[sectionIndex]; coins += reward; coinsText.setText('Coins: ' + coins); // Flash the won amount var winText = new Text2('+' + reward, { size: 80, fill: 0xFFD700 }); winText.anchor.set(0.5, 0.5); winText.x = 1024; winText.y = 1366; game.addChild(winText); tween(winText, { y: 1200, alpha: 0 }, { duration: 2000, onFinish: function onFinish() { winText.destroy(); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2C3E50 }); /**** * Game Code ****/ var circle = game.addChild(new Circle()); circle.x = 1024; circle.y = 1000; var knives = []; var knivesStuck = 0; var canThrow = true; var coins = 0; var currentLevel = 1; var levelCompleteScene = null; // Coins display var coinsText = new Text2('Coins: 0', { size: 60, fill: 0xFFD700 }); coinsText.anchor.set(1, 0); LK.gui.topRight.addChild(coinsText); coinsText.x = -20; coinsText.y = 20; // Level display var levelText = new Text2('Level: 1', { size: 60, fill: 0xFFFFFF }); levelText.anchor.set(0, 0); LK.gui.topLeft.addChild(levelText); levelText.x = 120; levelText.y = 20; // Score display var scoreText = new Text2('Knives: 0/8', { size: 80, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); // Instructions var instructionText = new Text2('Tap to throw knives!\nAvoid hitting existing knives!', { size: 60, fill: 0xFFFFFF }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 1024; instructionText.y = 400; game.addChild(instructionText); function showLevelComplete() { if (!levelCompleteScene) { levelCompleteScene = new LevelComplete(); game.addChild(levelCompleteScene); } } function nextLevel() { // Advance to next level currentLevel++; // Reset game state for new level knivesStuck = 0; canThrow = true; // Clear existing knives for (var i = 0; i < knives.length; i++) { knives[i].destroy(); } knives = []; // Reset score display scoreText.setText('Knives: 0/8'); // Show instructions again instructionText.alpha = 1; // Remove level complete scene if (levelCompleteScene) { levelCompleteScene.destroy(); levelCompleteScene = null; } // Increase difficulty by making circle spin faster circle.rotationSpeed = 0.02 + (currentLevel - 1) * 0.01; // Update level display levelText.setText('Level: ' + currentLevel); } ; function checkKnifeCollisions(newKnife) { var _loop = function _loop() { existingKnife = knives[i]; if (existingKnife.isStuck && existingKnife !== newKnife) { var _showLevelComplete = function _showLevelComplete() { if (!levelCompleteScene) { levelCompleteScene = new LevelComplete(); game.addChild(levelCompleteScene); } }; var _restartGame = function _restartGame() { // Reset game state knivesStuck = 0; canThrow = true; // Clear existing knives for (var i = 0; i < knives.length; i++) { knives[i].destroy(); } knives = []; // Reset score display scoreText.setText('Knives: 0/8'); // Show instructions again instructionText.alpha = 1; // Remove level complete scene if (levelCompleteScene) { levelCompleteScene.destroy(); levelCompleteScene = null; } }; distance = Math.sqrt(Math.pow(newKnife.x - existingKnife.x, 2) + Math.pow(newKnife.y - existingKnife.y, 2)); if (distance < 60) { return { v: true }; } ; } }, existingKnife, distance, _ret; for (var i = 0; i < knives.length; i++) { _ret = _loop(); if (_ret) return _ret.v; } return false; } game.down = function (x, y, obj) { if (canThrow && knivesStuck < 8) { var newKnife = new Knife(); newKnife.x = 1024; newKnife.y = 2400; newKnife.isThrown = true; knives.push(newKnife); game.addChild(newKnife); canThrow = false; LK.getSound('throw').play(); // Allow next throw after delay LK.setTimeout(function () { canThrow = true; }, 300); } }; game.update = function () { // Check for knife collisions for (var i = 0; i < knives.length; i++) { var knife = knives[i]; if (knife.isThrown && !knife.isStuck) { if (checkKnifeCollisions(knife)) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } } // Remove knives that went off screen if (knife.y < -100 && !knife.isStuck) { knife.destroy(); knives.splice(i, 1); i--; } } // Hide instructions after first throw if (knives.length > 0 && instructionText.alpha > 0) { tween(instructionText, { alpha: 0 }, { duration: 1000 }); } };
===================================================================
--- original.js
+++ change.js
@@ -89,13 +89,25 @@
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 600;
self.addChild(titleText);
- // Create wheel
+ // Create wheel with entrance animation
self.wheel = new WheelReward();
self.wheel.x = 1024;
self.wheel.y = 1366;
+ self.wheel.alpha = 0;
+ self.wheel.scaleX = 0.3;
+ self.wheel.scaleY = 0.3;
self.addChild(self.wheel);
+ // Animate wheel entrance
+ tween(self.wheel, {
+ alpha: 1,
+ scaleX: 1.0,
+ scaleY: 1.0
+ }, {
+ duration: 800,
+ easing: tween.easeOut
+ });
// Spin button
var spinText = new Text2('TAP TO SPIN!', {
size: 60,
fill: 0xFFFFFF
@@ -137,66 +149,155 @@
return self;
});
var WheelReward = Container.expand(function () {
var self = Container.call(this);
+ // Create wheel outer ring for better definition
+ var outerRing = self.attachAsset('wheel', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 1.6,
+ scaleY: 1.6
+ });
+ outerRing.tint = 0x2C3E50;
// Create wheel background
var wheelBg = self.attachAsset('wheel', {
anchorX: 0.5,
anchorY: 0.5,
- scaleX: 1.3,
- scaleY: 1.3
+ scaleX: 1.4,
+ scaleY: 1.4
});
+ wheelBg.tint = 0x34495E;
+ // Create inner circle for depth
+ var innerCircle = self.attachAsset('wheel', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 0.3,
+ scaleY: 0.3
+ });
+ innerCircle.tint = 0x1A252F;
// Create wheel sections
self.sections = [];
- self.rewards = [100, 50, 200, 75, 150, 25, 300, 10];
+ self.rewards = [500, 100, 1000, 200, 750, 50, 1500, 25];
+ var sectionColors = [0xFF6B6B, 0x4ECDC4, 0x45B7D1, 0x96CEB4, 0xFECA57, 0xFF9FF3, 0x54A0FF, 0x5F27CD];
for (var i = 0; i < 8; i++) {
var section = self.attachAsset('wheelSection', {
anchorX: 0,
anchorY: 0.5,
x: 0,
y: 0,
- scaleX: 1.5,
- scaleY: 3,
+ scaleX: 2.0,
+ scaleY: 4,
rotation: i * Math.PI * 2 / 8
});
- section.tint = i % 2 === 0 ? 0xFF1744 : 0x00BCD4;
+ section.tint = sectionColors[i];
self.sections.push(section);
- // Add reward text
+ // Add coin icon for each section
+ var coinIcon = self.attachAsset('coin', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 0.8,
+ scaleY: 0.8
+ });
+ coinIcon.x = Math.cos(i * Math.PI * 2 / 8) * 150;
+ coinIcon.y = Math.sin(i * Math.PI * 2 / 8) * 150;
+ self.addChild(coinIcon);
+ // Add reward text with better styling
var rewardText = new Text2(self.rewards[i].toString(), {
- size: 55,
+ size: 50,
fill: 0xFFFFFF
});
rewardText.anchor.set(0.5, 0.5);
- rewardText.x = Math.cos(i * Math.PI * 2 / 8) * 195;
- rewardText.y = Math.sin(i * Math.PI * 2 / 8) * 195;
+ rewardText.x = Math.cos(i * Math.PI * 2 / 8) * 220;
+ rewardText.y = Math.sin(i * Math.PI * 2 / 8) * 220;
self.addChild(rewardText);
}
- // Create pointer
+ // Create decorative border lines
+ for (var j = 0; j < 8; j++) {
+ var borderLine = self.attachAsset('wheelSection', {
+ anchorX: 0,
+ anchorY: 0.5,
+ x: 0,
+ y: 0,
+ scaleX: 2.2,
+ scaleY: 0.1,
+ rotation: j * Math.PI * 2 / 8
+ });
+ borderLine.tint = 0x2C3E50;
+ }
+ // Create pointer with enhanced design
var pointer = self.attachAsset('pointer', {
anchorX: 0.5,
anchorY: 1,
- y: -400,
- scaleX: 1.5,
- scaleY: 1.5
+ y: -450,
+ scaleX: 2.0,
+ scaleY: 2.0
});
- pointer.tint = 0x000000;
+ pointer.tint = 0xFF4757;
+ // Add pointer shadow for depth
+ var pointerShadow = self.attachAsset('pointer', {
+ anchorX: 0.5,
+ anchorY: 1,
+ y: -445,
+ x: 5,
+ scaleX: 2.0,
+ scaleY: 2.0
+ });
+ pointerShadow.tint = 0x000000;
+ pointerShadow.alpha = 0.3;
self.isSpinning = false;
self.spinSpeed = 0;
self.finalAngle = 0;
self.spin = function () {
if (self.isSpinning) return;
self.isSpinning = true;
self.spinSpeed = 0.3;
- self.finalAngle = Math.random() * Math.PI * 2 + Math.PI * 8; // Multiple rotations
+ self.finalAngle = Math.random() * Math.PI * 2 + Math.PI * 12; // More rotations for excitement
var currentRotation = self.rotation;
+ // Add anticipation animation before spinning
tween(self, {
- rotation: currentRotation + self.finalAngle
+ scaleX: 1.1,
+ scaleY: 1.1
}, {
- duration: 3000,
+ duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
- self.isSpinning = false;
- self.giveReward();
+ // Scale back and start main spin
+ tween(self, {
+ scaleX: 1.0,
+ scaleY: 1.0
+ }, {
+ duration: 100
+ });
+ // Main spinning animation with enhanced easing
+ tween(self, {
+ rotation: currentRotation + self.finalAngle
+ }, {
+ duration: 4000,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ self.isSpinning = false;
+ // Add small bounce effect when stopping
+ tween(self, {
+ scaleX: 1.05,
+ scaleY: 1.05
+ }, {
+ duration: 150,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(self, {
+ scaleX: 1.0,
+ scaleY: 1.0
+ }, {
+ duration: 150,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ self.giveReward();
+ }
+ });
+ }
+ });
+ }
+ });
}
});
};
self.giveReward = function () {