User prompt
mermini hızını arttır süre barını bir santim aşağı al
User prompt
hedefler çok daha yavaş hızlansın
User prompt
zamanlayıcının süresinin başlangıç saniyesini 2 katına çıkar
User prompt
puan aldıkça süremiz azalsın ve hedefler hızlansın ayrıca peşpeşe mermi atmak için süre olsun yarım saniye
User prompt
oyundakazanma olmasın sürekli devam etsin ve hedefler çok daha azar azar artsın
User prompt
gittikçe hedefler artsın ve süreyi arttır
User prompt
daha az hedef gelsin ve hedefler silahşörle yatay olarak aynı hizaya gelirse oyun bitsin
User prompt
puan arttıkça süremiz azalsın
User prompt
hedefi vurduğumuzda süre başa sarsın oyun devam etsin ve tek hakkımız olsun süre bittiğinde vuramazsak oyun bitsin
User prompt
her hedefin üzerinde bar olmasın bar bir hedefi vurunca başa sarsın her hedefin süresi olmasın süre genel olsun ve süremiz artsın
User prompt
mermiler daha hızlı gitsin ve süremiz daha çok olsun
Code edit (1 edits merged)
Please save this source code
User prompt
Marksman Challenge
Initial prompt
bana bir silahşörüm silahıyla karşısında yukardan akan hedefleri vuran ve vurdukça puan alan bir oyun yap ama vurması için bir süresi olsun bunu bir bar olarak belirt oyunda puan kazandıkça vurma süremiz azalsın
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -12;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Marksman = Container.expand(function () {
var self = Container.call(this);
var marksmanGraphics = self.attachAsset('marksman', {
anchorX: 0.5,
anchorY: 1
});
var rifleGraphics = self.attachAsset('rifle', {
anchorX: 0,
anchorY: 0.5,
y: -40
});
self.targetX = 2048 / 2;
self.targetY = 2732 - 150;
self.shoot = function (targetX, targetY) {
var bullet = new Bullet();
bullet.x = self.x;
bullet.y = self.y - 60;
// Calculate angle to target
var dx = targetX - bullet.x;
var dy = targetY - bullet.y;
var angle = Math.atan2(dy, dx);
// Set bullet velocity towards target
bullet.speed = -8;
bullet.velocityX = Math.cos(angle) * 8;
bullet.velocityY = Math.sin(angle) * 8;
// Override update to use velocity
bullet.update = function () {
bullet.x += bullet.velocityX;
bullet.y += bullet.velocityY;
};
bullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
};
self.update = function () {
// Smooth movement towards target position
var dx = self.targetX - self.x;
self.x += dx * 0.1;
// Update rifle rotation to aim at crosshair
if (aimX !== undefined && aimY !== undefined) {
var angle = Math.atan2(aimY - self.y + 40, aimX - self.x);
rifleGraphics.rotation = angle;
}
};
return self;
});
var Target = Container.expand(function () {
var self = Container.call(this);
var targetGraphics = self.attachAsset('target', {
anchorX: 0.5,
anchorY: 0.5
});
// Timer bar background
var timerBg = self.attachAsset('timerBackground', {
anchorX: 0.5,
anchorY: 0.5,
y: -60
});
// Timer bar foreground
var timerBar = self.attachAsset('timerBar', {
anchorX: 0,
anchorY: 0.5,
x: -50,
y: -60
});
self.speed = 2;
self.maxTime = Math.max(1000, 3000 - currentScore * 50); // Decrease time as score increases
self.currentTime = self.maxTime;
self.hit = false;
self.update = function () {
if (!self.hit) {
self.y += self.speed;
self.currentTime -= 16.67; // ~60fps
// Update timer bar
var timePercent = Math.max(0, self.currentTime / self.maxTime);
timerBar.scaleX = timePercent;
// Change color based on time remaining
if (timePercent > 0.5) {
timerBar.tint = 0x00ff00; // Green
} else if (timePercent > 0.2) {
timerBar.tint = 0xffff00; // Yellow
} else {
timerBar.tint = 0xff0000; // Red
}
}
};
self.destroy = function () {
Container.prototype.destroy.call(self);
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87ceeb
});
/****
* Game Code
****/
var marksman = new Marksman();
marksman.x = 2048 / 2;
marksman.y = 2732 - 50;
game.addChild(marksman);
var targets = [];
var bullets = [];
var currentScore = 0;
var missedTargets = 0;
var maxMissedTargets = 5;
var lastTargetSpawn = 0;
var targetSpawnInterval = 2000; // 2 seconds
var aimX, aimY;
var consecutiveMisses = 0;
// Score display
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Missed targets display
var missedTxt = new Text2('Missed: 0/5', {
size: 40,
fill: 0xFF4444
});
missedTxt.anchor.set(1, 0);
missedTxt.y = 80;
LK.gui.topRight.addChild(missedTxt);
// Crosshair
var crosshairH = LK.getAsset('timerBar', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.3,
scaleY: 0.1,
tint: 0xffffff
});
var crosshairV = LK.getAsset('timerBar', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.1,
scaleY: 0.3,
rotation: Math.PI / 2,
tint: 0xffffff
});
game.addChild(crosshairH);
game.addChild(crosshairV);
game.move = function (x, y, obj) {
aimX = x;
aimY = y;
marksman.targetX = x;
crosshairH.x = x;
crosshairH.y = y;
crosshairV.x = x;
crosshairV.y = y;
};
game.down = function (x, y, obj) {
aimX = x;
aimY = y;
marksman.shoot(x, y);
};
game.update = function () {
// Spawn targets
if (LK.ticks - lastTargetSpawn > targetSpawnInterval / 16.67) {
var target = new Target();
target.x = Math.random() * (2048 - 160) + 80;
target.y = -50;
targets.push(target);
game.addChild(target);
lastTargetSpawn = LK.ticks;
// Decrease spawn interval slightly as score increases
targetSpawnInterval = Math.max(800, 2000 - currentScore * 20);
}
// Update and check targets
for (var i = targets.length - 1; i >= 0; i--) {
var target = targets[i];
if (!target.hit) {
// Check if target time expired
if (target.currentTime <= 0) {
target.hit = true;
target.alpha = 0.3;
consecutiveMisses++;
if (consecutiveMisses >= 3) {
missedTargets++;
missedTxt.setText('Missed: ' + missedTargets + '/' + maxMissedTargets);
if (missedTargets >= maxMissedTargets) {
LK.showGameOver();
return;
}
}
}
}
// Remove targets that are off screen
if (target.y > 2732 + 100) {
target.destroy();
targets.splice(i, 1);
}
}
// Update and check bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
// Check bullet-target collisions
for (var j = targets.length - 1; j >= 0; j--) {
var target = targets[j];
if (!target.hit && bullet.intersects(target)) {
// Hit!
target.hit = true;
target.alpha = 0.3;
currentScore += Math.floor(target.currentTime / 100) + 10; // Bonus for faster shots
scoreTxt.setText('Score: ' + currentScore);
consecutiveMisses = 0; // Reset consecutive misses
LK.getSound('hit').play();
LK.effects.flashObject(target, 0xffffff, 300);
// Remove bullet
bullet.destroy();
bullets.splice(i, 1);
break;
}
}
// Remove bullets that are off screen
if (bullet && (bullet.y < -50 || bullet.y > 2732 + 50 || bullet.x < -50 || bullet.x > 2048 + 50)) {
bullet.destroy();
bullets.splice(i, 1);
}
}
// Win condition - very high score
if (currentScore >= 1000) {
LK.showYouWin();
}
};
// Start background music
LK.playMusic('gameMusic'); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,253 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Bullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bulletGraphics = self.attachAsset('bullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -12;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var Marksman = Container.expand(function () {
+ var self = Container.call(this);
+ var marksmanGraphics = self.attachAsset('marksman', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ var rifleGraphics = self.attachAsset('rifle', {
+ anchorX: 0,
+ anchorY: 0.5,
+ y: -40
+ });
+ self.targetX = 2048 / 2;
+ self.targetY = 2732 - 150;
+ self.shoot = function (targetX, targetY) {
+ var bullet = new Bullet();
+ bullet.x = self.x;
+ bullet.y = self.y - 60;
+ // Calculate angle to target
+ var dx = targetX - bullet.x;
+ var dy = targetY - bullet.y;
+ var angle = Math.atan2(dy, dx);
+ // Set bullet velocity towards target
+ bullet.speed = -8;
+ bullet.velocityX = Math.cos(angle) * 8;
+ bullet.velocityY = Math.sin(angle) * 8;
+ // Override update to use velocity
+ bullet.update = function () {
+ bullet.x += bullet.velocityX;
+ bullet.y += bullet.velocityY;
+ };
+ bullets.push(bullet);
+ game.addChild(bullet);
+ LK.getSound('shoot').play();
+ };
+ self.update = function () {
+ // Smooth movement towards target position
+ var dx = self.targetX - self.x;
+ self.x += dx * 0.1;
+ // Update rifle rotation to aim at crosshair
+ if (aimX !== undefined && aimY !== undefined) {
+ var angle = Math.atan2(aimY - self.y + 40, aimX - self.x);
+ rifleGraphics.rotation = angle;
+ }
+ };
+ return self;
+});
+var Target = Container.expand(function () {
+ var self = Container.call(this);
+ var targetGraphics = self.attachAsset('target', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Timer bar background
+ var timerBg = self.attachAsset('timerBackground', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ y: -60
+ });
+ // Timer bar foreground
+ var timerBar = self.attachAsset('timerBar', {
+ anchorX: 0,
+ anchorY: 0.5,
+ x: -50,
+ y: -60
+ });
+ self.speed = 2;
+ self.maxTime = Math.max(1000, 3000 - currentScore * 50); // Decrease time as score increases
+ self.currentTime = self.maxTime;
+ self.hit = false;
+ self.update = function () {
+ if (!self.hit) {
+ self.y += self.speed;
+ self.currentTime -= 16.67; // ~60fps
+ // Update timer bar
+ var timePercent = Math.max(0, self.currentTime / self.maxTime);
+ timerBar.scaleX = timePercent;
+ // Change color based on time remaining
+ if (timePercent > 0.5) {
+ timerBar.tint = 0x00ff00; // Green
+ } else if (timePercent > 0.2) {
+ timerBar.tint = 0xffff00; // Yellow
+ } else {
+ timerBar.tint = 0xff0000; // Red
+ }
+ }
+ };
+ self.destroy = function () {
+ Container.prototype.destroy.call(self);
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87ceeb
+});
+
+/****
+* Game Code
+****/
+var marksman = new Marksman();
+marksman.x = 2048 / 2;
+marksman.y = 2732 - 50;
+game.addChild(marksman);
+var targets = [];
+var bullets = [];
+var currentScore = 0;
+var missedTargets = 0;
+var maxMissedTargets = 5;
+var lastTargetSpawn = 0;
+var targetSpawnInterval = 2000; // 2 seconds
+var aimX, aimY;
+var consecutiveMisses = 0;
+// Score display
+var scoreTxt = new Text2('Score: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Missed targets display
+var missedTxt = new Text2('Missed: 0/5', {
+ size: 40,
+ fill: 0xFF4444
+});
+missedTxt.anchor.set(1, 0);
+missedTxt.y = 80;
+LK.gui.topRight.addChild(missedTxt);
+// Crosshair
+var crosshairH = LK.getAsset('timerBar', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 0.3,
+ scaleY: 0.1,
+ tint: 0xffffff
+});
+var crosshairV = LK.getAsset('timerBar', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 0.1,
+ scaleY: 0.3,
+ rotation: Math.PI / 2,
+ tint: 0xffffff
+});
+game.addChild(crosshairH);
+game.addChild(crosshairV);
+game.move = function (x, y, obj) {
+ aimX = x;
+ aimY = y;
+ marksman.targetX = x;
+ crosshairH.x = x;
+ crosshairH.y = y;
+ crosshairV.x = x;
+ crosshairV.y = y;
+};
+game.down = function (x, y, obj) {
+ aimX = x;
+ aimY = y;
+ marksman.shoot(x, y);
+};
+game.update = function () {
+ // Spawn targets
+ if (LK.ticks - lastTargetSpawn > targetSpawnInterval / 16.67) {
+ var target = new Target();
+ target.x = Math.random() * (2048 - 160) + 80;
+ target.y = -50;
+ targets.push(target);
+ game.addChild(target);
+ lastTargetSpawn = LK.ticks;
+ // Decrease spawn interval slightly as score increases
+ targetSpawnInterval = Math.max(800, 2000 - currentScore * 20);
+ }
+ // Update and check targets
+ for (var i = targets.length - 1; i >= 0; i--) {
+ var target = targets[i];
+ if (!target.hit) {
+ // Check if target time expired
+ if (target.currentTime <= 0) {
+ target.hit = true;
+ target.alpha = 0.3;
+ consecutiveMisses++;
+ if (consecutiveMisses >= 3) {
+ missedTargets++;
+ missedTxt.setText('Missed: ' + missedTargets + '/' + maxMissedTargets);
+ if (missedTargets >= maxMissedTargets) {
+ LK.showGameOver();
+ return;
+ }
+ }
+ }
+ }
+ // Remove targets that are off screen
+ if (target.y > 2732 + 100) {
+ target.destroy();
+ targets.splice(i, 1);
+ }
+ }
+ // Update and check bullets
+ for (var i = bullets.length - 1; i >= 0; i--) {
+ var bullet = bullets[i];
+ // Check bullet-target collisions
+ for (var j = targets.length - 1; j >= 0; j--) {
+ var target = targets[j];
+ if (!target.hit && bullet.intersects(target)) {
+ // Hit!
+ target.hit = true;
+ target.alpha = 0.3;
+ currentScore += Math.floor(target.currentTime / 100) + 10; // Bonus for faster shots
+ scoreTxt.setText('Score: ' + currentScore);
+ consecutiveMisses = 0; // Reset consecutive misses
+ LK.getSound('hit').play();
+ LK.effects.flashObject(target, 0xffffff, 300);
+ // Remove bullet
+ bullet.destroy();
+ bullets.splice(i, 1);
+ break;
+ }
+ }
+ // Remove bullets that are off screen
+ if (bullet && (bullet.y < -50 || bullet.y > 2732 + 50 || bullet.x < -50 || bullet.x > 2048 + 50)) {
+ bullet.destroy();
+ bullets.splice(i, 1);
+ }
+ }
+ // Win condition - very high score
+ if (currentScore >= 1000) {
+ LK.showYouWin();
+ }
+};
+// Start background music
+LK.playMusic('gameMusic');
\ No newline at end of file
hedef tahtası. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
tüfek. In-Game asset. 2d. High contrast. No shadows
kovboy. In-Game asset. 2d. High contrast. No shadows
mermi. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat