User prompt
Kaktüslerin nereden geleceği bir sistem olsun önce nereden kaktüs geleceğini kırmızı bir şekilde göstersin ondan sonra kaktüslere değersek kaktüs geri gitsin
User prompt
Arka Planın resmini ayarlayabiliyim
User prompt
Kalplerin resmini ayarlaya bilelim
User prompt
Butonların üzerindeki ok resmi olmasın
User prompt
Karakter hareket ettiğinde zaman ile beraber iilerlesin
User prompt
o zaman ekranın ortasında iki tane ok tuşları butonları olsun biri sağ ok diğeride sol ok o şekilde hangisine basarsak ona göre ilerleyelim
User prompt
Evet
Code edit (1 edits merged)
Please save this source code
User prompt
Kaktüslerden Kaçış
Initial prompt
Bana yerden çıkan kaktüslerden hayatta kalma oyunu yap
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Kaktüs sınıfı var Cactus = Container.expand(function () { var self = Container.call(this); // Kaktüs grafiği var cactusAsset = self.attachAsset('cactus', { anchorX: 0.5, anchorY: 1 }); // Kaktüsün çıkış animasyonu için başlangıç ve hedef Y'si self.startY = 0; self.targetY = 0; self.speed = 0; self.isActive = false; // Kaktüsün çıkış animasyonunu başlat self.popUp = function (fromY, toY, speed) { self.y = fromY; self.startY = fromY; self.targetY = toY; self.speed = speed; self.isActive = true; // Tween ile yukarı fırlama animasyonu tween(self, { y: toY }, { duration: speed, easing: tween.cubicOut, onFinish: function onFinish() { // Bir süre bekle, sonra geri in LK.setTimeout(function () { self.hide(); }, 500); } }); }; // Kaktüsü geri gizle self.hide = function () { if (!self.isActive) return; self.isActive = false; tween(self, { y: self.startY }, { duration: 300, easing: tween.cubicIn, onFinish: function onFinish() { // Oyun kodunda destroy edilecek } }); }; return self; }); // Oyuncu karakteri var Player = Container.expand(function () { var self = Container.call(this); var playerAsset = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); // Can animasyonu için self.flash = function () { tween(playerAsset, { tint: 0xffffff }, { duration: 80, onFinish: function onFinish() { tween(playerAsset, { tint: 0xd83318 }, { duration: 120 }); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xf7eac6 // Açık bej arka plan }); /**** * Game Code ****/ // Zemin: kahverengi kutu (süsleme) // Kaktüs: yeşil elips (dikey) // Oyuncu karakteri: kırmızı kutu // Oyun alanı boyutları var GAME_WIDTH = 2048; var GAME_HEIGHT = 2732; // Zemin çiz var ground = LK.getAsset('ground', { anchorX: 0, anchorY: 1, x: 0, y: GAME_HEIGHT }); game.addChild(ground); // Oyuncu karakterini oluştur ve başlat var player = new Player(); player.x = GAME_WIDTH / 2; player.y = GAME_HEIGHT - 200; game.addChild(player); // Oyuncu canı var maxLives = 3; var lives = maxLives; // Skor var score = 0; // GUI: Skor ve can göstergesi var scoreTxt = new Text2('0', { size: 120, fill: "#222" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var livesTxt = new Text2('❤❤❤', { size: 90, fill: 0xD83318 }); livesTxt.anchor.set(1, 0); LK.gui.topRight.addChild(livesTxt); // Kaktüsler dizisi var cacti = []; // Kaktüs çıkış noktaları (ekranın alt kısmında, rastgele aralıklarla) var cactusSpots = []; var spotCount = 7; for (var i = 0; i < spotCount; i++) { // Ekranın altına eşit aralıklı noktalar var margin = 180; var x = margin + i * ((GAME_WIDTH - 2 * margin) / (spotCount - 1)); cactusSpots.push(x); } // Kaktüs çıkış hızı ve zorluk var cactusInterval = 1200; // ms var cactusSpeed = 350; // ms var minCactusInterval = 400; var minCactusSpeed = 180; var cactusTimer = null; var gameTime = 0; // Sürükleme için var dragNode = null; var offsetX = 0, offsetY = 0; // Ok butonları için var leftArrowBtn = LK.getAsset('arrow_left', { anchorX: 0.5, anchorY: 0.5, x: GAME_WIDTH / 2 - 260, y: GAME_HEIGHT / 2 + 900 }); var rightArrowBtn = LK.getAsset('arrow_right', { anchorX: 0.5, anchorY: 0.5, x: GAME_WIDTH / 2 + 260, y: GAME_HEIGHT / 2 + 900 }); game.addChild(leftArrowBtn); game.addChild(rightArrowBtn); // Ok butonlarının üstüne ok işareti çizmek için Text2 // Ok butonlarına basınca hareket için var arrowMoveStep = 180; // Her basışta kayacağı mesafe // Butonlara basıldığında kontrol // Sürekli hareket için zamanlayıcılar var moveDir = 0; // -1: sola, 1: sağa, 0: dur var moveTimer = null; var moveSpeed = 7; // px per frame function startMove(dir) { if (isGameOver) return; moveDir = dir; if (moveTimer) return; // Zaten hareket ediyorsa tekrar başlatma moveTimer = LK.setInterval(function () { if (isGameOver) { stopMove(); return; } // Sadece ok tuşuna basılıysa hareket et if (moveDir !== 0) { var nextX = player.x + moveDir * moveSpeed; player.x = Math.max(80, Math.min(GAME_WIDTH - 80, nextX)); } }, 16); // ~60fps } function stopMove() { moveDir = 0; if (moveTimer) { LK.clearInterval(moveTimer); moveTimer = null; } } // Ok butonlarına basınca sürekli hareket başlat leftArrowBtn.down = function (x, y, obj) { if (isGameOver) return; startMove(-1); }; rightArrowBtn.down = function (x, y, obj) { if (isGameOver) return; startMove(1); }; // Ok butonundan parmak kaldırınca hareketi durdur leftArrowBtn.up = function (x, y, obj) { stopMove(); }; rightArrowBtn.up = function (x, y, obj) { stopMove(); }; // Oyun bitti mi? var isGameOver = false; // Skor ve can güncelle function updateScoreAndLives() { scoreTxt.setText(score); var heartStr = ''; for (var i = 0; i < lives; i++) heartStr += '❤'; livesTxt.setText(heartStr); } // Kaktüs oluştur ve fırlat function spawnCactus() { // Rastgele bir çıkış noktası seç var spotIdx = Math.floor(Math.random() * cactusSpots.length); var x = cactusSpots[spotIdx]; var groundY = GAME_HEIGHT - 80; var cactus = new Cactus(); cactus.x = x; cactus.y = groundY + 120; // Zemin altından başlasın cactus.lastY = cactus.y; // lastY başlat game.addChild(cactus); cacti.push(cactus); // Kaktüs yukarı fırlasın cactus.popUp(groundY + 120, groundY - 10, cactusSpeed); } // Kaktüsleri temizle function clearCacti() { for (var i = cacti.length - 1; i >= 0; i--) { cacti[i].destroy(); cacti.splice(i, 1); } } // Kaktüs çıkışlarını başlat function startCactusSpawning() { if (cactusTimer) LK.clearInterval(cactusTimer); cactusTimer = LK.setInterval(function () { // Zaman ilerledikçe zorluk artsın gameTime += cactusInterval; // Her 10 saniyede bir hız ve sıklık artsın if (gameTime % 10000 === 0 && cactusInterval > minCactusInterval) { cactusInterval -= 100; if (cactusInterval < minCactusInterval) cactusInterval = minCactusInterval; cactusSpeed -= 20; if (cactusSpeed < minCactusSpeed) cactusSpeed = minCactusSpeed; // Timer'ı güncelle startCactusSpawning(); } // Aynı anda birden fazla kaktüs çıkabilir (zorluk için) var multi = 1; if (gameTime > 15000) multi = 2; if (gameTime > 30000) multi = 3; for (var m = 0; m < multi; m++) { spawnCactus(); } }, cactusInterval); } // Oyun başlat function startGame() { isGameOver = false; score = 0; lives = maxLives; updateScoreAndLives(); clearCacti(); cactusInterval = 1200; cactusSpeed = 350; gameTime = 0; startCactusSpawning(); player.x = GAME_WIDTH / 2; player.y = GAME_HEIGHT - 200; } // Oyun bitişi function endGame() { isGameOver = true; if (cactusTimer) LK.clearInterval(cactusTimer); clearCacti(); LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); } // Sürükleme işlemleri game.down = function (x, y, obj) { // Eğer ok butonlarından birine tıklandıysa sürükleme başlatma if (obj === leftArrowBtn || obj === rightArrowBtn) { // Ok butonları kendi hareketini zaten yapıyor, burada sürükleme başlatma return; } stopMove(); // Sürükleme başlarsa ok hareketini durdur // Oyuncuya tıklanırsa sürükleme başlasın var local = player.toLocal({ x: x, y: y }); // Oyuncunun alanı içinde mi? if (Math.abs(local.x) <= 80 && Math.abs(local.y) <= 80) { dragNode = player; offsetX = player.x - x; offsetY = player.y - y; } }; game.up = function (x, y, obj) { dragNode = null; stopMove(); }; function handleMove(x, y, obj) { if (dragNode && !isGameOver) { // Oyuncuyu yeni konuma taşı var nx = x + offsetX; var ny = y + offsetY; // Sınırları aşmasın var px = Math.max(80, Math.min(GAME_WIDTH - 80, nx)); var py = Math.max(120, Math.min(GAME_HEIGHT - 200, ny)); player.x = px; player.y = py; } } game.move = handleMove; // Oyun döngüsü game.update = function () { if (isGameOver) return; // Kaktüsler ile çarpışma kontrolü for (var i = cacti.length - 1; i >= 0; i--) { var cactus = cacti[i]; // Sadece aktif (yukarıda) olanlar tehlikeli if (cactus.isActive && player.intersects(cactus)) { cactus.isActive = false; // Bir kez çarpsın lives -= 1; player.flash(); updateScoreAndLives(); if (lives <= 0) { endGame(); return; } } // Kaktüs tamamen gizlendiyse sil (tam olarak bu frame'de geçtiyse) if (!cactus.isActive) { if (cactus.lastY === undefined) cactus.lastY = cactus.y; var hideY = GAME_HEIGHT - 80 + 100; if (cactus.lastY < hideY && cactus.y >= hideY) { cactus.destroy(); cacti.splice(i, 1); // Skor artır (kaçılan kaktüs) score += 1; updateScoreAndLives(); } cactus.lastY = cactus.y; } } }; // Oyun başlat startGame();
===================================================================
--- original.js
+++ change.js
@@ -165,24 +165,8 @@
});
game.addChild(leftArrowBtn);
game.addChild(rightArrowBtn);
// Ok butonlarının üstüne ok işareti çizmek için Text2
-var leftArrowText = new Text2('←', {
- size: 120,
- fill: "#fff"
-});
-leftArrowText.anchor.set(0.5, 0.5);
-leftArrowText.x = leftArrowBtn.x;
-leftArrowText.y = leftArrowBtn.y;
-game.addChild(leftArrowText);
-var rightArrowText = new Text2('→', {
- size: 120,
- fill: "#fff"
-});
-rightArrowText.anchor.set(0.5, 0.5);
-rightArrowText.x = rightArrowBtn.x;
-rightArrowText.y = rightArrowBtn.y;
-game.addChild(rightArrowText);
// Ok butonlarına basınca hareket için
var arrowMoveStep = 180; // Her basışta kayacağı mesafe
// Butonlara basıldığında kontrol
// Sürekli hareket için zamanlayıcılar
Sağ ok. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Kaktüs. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Kalp. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Su damlası. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Çöl. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Kumlu Zemin. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat