User prompt
her bir hedefi vurmamız için 5 saniyemiz olsun 5 saniye bittiğinde kaybedelim
User prompt
kaskı silelim
User prompt
karakterimizin kafasında bir kask olsun
User prompt
başla tuşuna basınca başlasın
User prompt
oyuna bir giriş menüsü ekleyelim
User prompt
skor 10'un katlarına ulaştığında bir rozet kazanalım
User prompt
baktığımız yere göre silah hareket etsin
User prompt
karakterin elinde bir silah olsun
User prompt
arkadaki yeşil şeyler konteynır olsun
User prompt
arkaplanda poligon gibi olsun
User prompt
ortada karakterimiz olsun
User prompt
mermi hedefe çarptığında hedef yok olsun
User prompt
When we click, a bullet goes
Code edit (1 edits merged)
Please save this source code
User prompt
Quick Aim Challenge
Initial prompt
Let's make an aim game
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Target class var Target = Container.expand(function () { var self = Container.call(this); var targetAsset = self.attachAsset('target', { anchorX: 0.5, anchorY: 0.5 }); self.radius = targetAsset.width / 2; self.active = true; self.appearedAt = LK.ticks; self.lifetime = 90; // 1.5 seconds at 60fps // Show tap feedback self.showTapFx = function () { var fx = LK.getAsset('tapfx', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 0, scaleX: 1, scaleY: 1, alpha: 0.7 }); self.addChild(fx); tween(fx, { scaleX: 1.5, scaleY: 1.5, alpha: 0 }, { duration: 250, easing: tween.easeOut, onFinish: function onFinish() { fx.destroy(); } }); }; // Called when target is hit self.hit = function () { if (!self.active) return; self.active = false; self.showTapFx(); tween(targetAsset, { alpha: 0 }, { duration: 120, onFinish: function onFinish() { self.destroy(); } }); }; // Called when target times out (missed) self.miss = function () { if (!self.active) return; self.active = false; var missFx = LK.getAsset('miss', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 0, alpha: 0.5, scaleX: 1, scaleY: 1 }); self.addChild(missFx); tween(missFx, { scaleX: 1.5, scaleY: 1.5, alpha: 0 }, { duration: 300, onFinish: function onFinish() { missFx.destroy(); } }); tween(targetAsset, { alpha: 0.2 }, { duration: 180, onFinish: function onFinish() { self.destroy(); } }); }; // Per-frame update self.update = function () { if (!self.active) return; if (LK.ticks - self.appearedAt > self.lifetime) { self.miss(); // Penalize time for miss timeLeft -= 1.5; if (timeLeft < 0) timeLeft = 0; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181c22 }); /**** * Game Code ****/ // Tap effect: yellow ellipse, 180x180 // Miss feedback: red ellipse, 180x180 // Target: green ellipse, 180x180 // Game state variables var score = 0; var timeLeft = 20; // seconds var target = null; var scoreTxt = new Text2('0', { size: 120, fill: '#fff' }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var timerTxt = new Text2('20.0', { size: 90, fill: '#fff' }); timerTxt.anchor.set(0.5, 0); LK.gui.topRight.addChild(timerTxt); // Prevent UI overlap with top left menu (100x100) scoreTxt.y = 20; timerTxt.y = 20; // Spawn a new target at a random position function spawnTarget() { if (target && target.active) target.miss(); var t = new Target(); // Avoid top 200px and bottom 200px for UI and finger comfort var margin = 200; var x = margin + Math.random() * (2048 - 2 * margin); var y = margin + Math.random() * (2732 - 2 * margin); t.x = x; t.y = y; target = t; game.addChild(t); } // Handle tap/clicks game.down = function (x, y, obj) { // Only allow taps if game is running and target is active if (!target || !target.active || timeLeft <= 0) return; // Check if tap is inside target var dx = x - target.x; var dy = y - target.y; if (dx * dx + dy * dy <= target.radius * target.radius) { // Hit! target.hit(); score += 1; scoreTxt.setText(score); // Add 1.2s for quick hit, 0.8s for slow var hitTime = (LK.ticks - target.appearedAt) / 60; if (hitTime < 0.7) { timeLeft += 1.2; } else { timeLeft += 0.8; } if (timeLeft > 30) timeLeft = 30; // Cap max time spawnTarget(); } else { // Missed tap: penalize timeLeft -= 1.2; if (timeLeft < 0) timeLeft = 0; // Show quick miss feedback at tap var missFx = LK.getAsset('miss', { anchorX: 0.5, anchorY: 0.5, x: x, y: y, alpha: 0.4, scaleX: 1, scaleY: 1 }); game.addChild(missFx); tween(missFx, { scaleX: 1.5, scaleY: 1.5, alpha: 0 }, { duration: 250, onFinish: function onFinish() { missFx.destroy(); } }); } }; // Main update loop game.update = function () { // Update timer if (timeLeft > 0) { timeLeft -= 1 / 60; if (timeLeft < 0) timeLeft = 0; } timerTxt.setText(timeLeft.toFixed(1)); // End game if time runs out if (timeLeft <= 0) { if (target && target.active) target.miss(); LK.setScore(score); LK.showGameOver(); return; } // Spawn first target if needed if (!target || !target.active) { spawnTarget(); } }; // Reset game state on restart game.on('reset', function () { score = 0; timeLeft = 20; scoreTxt.setText(score); timerTxt.setText(timeLeft.toFixed(1)); if (target) { target.destroy(); target = null; } }); /**** * End of file ****/
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,230 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+// Target class
+var Target = Container.expand(function () {
+ var self = Container.call(this);
+ var targetAsset = self.attachAsset('target', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.radius = targetAsset.width / 2;
+ self.active = true;
+ self.appearedAt = LK.ticks;
+ self.lifetime = 90; // 1.5 seconds at 60fps
+ // Show tap feedback
+ self.showTapFx = function () {
+ var fx = LK.getAsset('tapfx', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 0,
+ y: 0,
+ scaleX: 1,
+ scaleY: 1,
+ alpha: 0.7
+ });
+ self.addChild(fx);
+ tween(fx, {
+ scaleX: 1.5,
+ scaleY: 1.5,
+ alpha: 0
+ }, {
+ duration: 250,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ fx.destroy();
+ }
+ });
+ };
+ // Called when target is hit
+ self.hit = function () {
+ if (!self.active) return;
+ self.active = false;
+ self.showTapFx();
+ tween(targetAsset, {
+ alpha: 0
+ }, {
+ duration: 120,
+ onFinish: function onFinish() {
+ self.destroy();
+ }
+ });
+ };
+ // Called when target times out (missed)
+ self.miss = function () {
+ if (!self.active) return;
+ self.active = false;
+ var missFx = LK.getAsset('miss', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 0,
+ y: 0,
+ alpha: 0.5,
+ scaleX: 1,
+ scaleY: 1
+ });
+ self.addChild(missFx);
+ tween(missFx, {
+ scaleX: 1.5,
+ scaleY: 1.5,
+ alpha: 0
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ missFx.destroy();
+ }
+ });
+ tween(targetAsset, {
+ alpha: 0.2
+ }, {
+ duration: 180,
+ onFinish: function onFinish() {
+ self.destroy();
+ }
+ });
+ };
+ // Per-frame update
+ self.update = function () {
+ if (!self.active) return;
+ if (LK.ticks - self.appearedAt > self.lifetime) {
+ self.miss();
+ // Penalize time for miss
+ timeLeft -= 1.5;
+ if (timeLeft < 0) timeLeft = 0;
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x181c22
+});
+
+/****
+* Game Code
+****/
+// Tap effect: yellow ellipse, 180x180
+// Miss feedback: red ellipse, 180x180
+// Target: green ellipse, 180x180
+// Game state variables
+var score = 0;
+var timeLeft = 20; // seconds
+var target = null;
+var scoreTxt = new Text2('0', {
+ size: 120,
+ fill: '#fff'
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+var timerTxt = new Text2('20.0', {
+ size: 90,
+ fill: '#fff'
+});
+timerTxt.anchor.set(0.5, 0);
+LK.gui.topRight.addChild(timerTxt);
+// Prevent UI overlap with top left menu (100x100)
+scoreTxt.y = 20;
+timerTxt.y = 20;
+// Spawn a new target at a random position
+function spawnTarget() {
+ if (target && target.active) target.miss();
+ var t = new Target();
+ // Avoid top 200px and bottom 200px for UI and finger comfort
+ var margin = 200;
+ var x = margin + Math.random() * (2048 - 2 * margin);
+ var y = margin + Math.random() * (2732 - 2 * margin);
+ t.x = x;
+ t.y = y;
+ target = t;
+ game.addChild(t);
+}
+// Handle tap/clicks
+game.down = function (x, y, obj) {
+ // Only allow taps if game is running and target is active
+ if (!target || !target.active || timeLeft <= 0) return;
+ // Check if tap is inside target
+ var dx = x - target.x;
+ var dy = y - target.y;
+ if (dx * dx + dy * dy <= target.radius * target.radius) {
+ // Hit!
+ target.hit();
+ score += 1;
+ scoreTxt.setText(score);
+ // Add 1.2s for quick hit, 0.8s for slow
+ var hitTime = (LK.ticks - target.appearedAt) / 60;
+ if (hitTime < 0.7) {
+ timeLeft += 1.2;
+ } else {
+ timeLeft += 0.8;
+ }
+ if (timeLeft > 30) timeLeft = 30; // Cap max time
+ spawnTarget();
+ } else {
+ // Missed tap: penalize
+ timeLeft -= 1.2;
+ if (timeLeft < 0) timeLeft = 0;
+ // Show quick miss feedback at tap
+ var missFx = LK.getAsset('miss', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: x,
+ y: y,
+ alpha: 0.4,
+ scaleX: 1,
+ scaleY: 1
+ });
+ game.addChild(missFx);
+ tween(missFx, {
+ scaleX: 1.5,
+ scaleY: 1.5,
+ alpha: 0
+ }, {
+ duration: 250,
+ onFinish: function onFinish() {
+ missFx.destroy();
+ }
+ });
+ }
+};
+// Main update loop
+game.update = function () {
+ // Update timer
+ if (timeLeft > 0) {
+ timeLeft -= 1 / 60;
+ if (timeLeft < 0) timeLeft = 0;
+ }
+ timerTxt.setText(timeLeft.toFixed(1));
+ // End game if time runs out
+ if (timeLeft <= 0) {
+ if (target && target.active) target.miss();
+ LK.setScore(score);
+ LK.showGameOver();
+ return;
+ }
+ // Spawn first target if needed
+ if (!target || !target.active) {
+ spawnTarget();
+ }
+};
+// Reset game state on restart
+game.on('reset', function () {
+ score = 0;
+ timeLeft = 20;
+ scoreTxt.setText(score);
+ timerTxt.setText(timeLeft.toFixed(1));
+ if (target) {
+ target.destroy();
+ target = null;
+ }
+});
+/****
+* End of file
+****/
\ No newline at end of file