User prompt
Araba sesini ekle
User prompt
Araba yarış sesi ekle
User prompt
Yol çizgilerini kaldır
User prompt
Bonusları kaldır
User prompt
Bonuslar Arabanın üstünde olmasın
Code edit (1 edits merged)
Please save this source code
User prompt
Turbo Yarış: Sonsuz Yol
Initial prompt
Bana mobil araba yarışı oyunu yap
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Bonus var Bonus = Container.expand(function () { var self = Container.call(this); var bonusGfx = self.attachAsset('bonus', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 22; self.update = function () { self.y += self.speed; }; return self; }); // Oyuncu arabası var Car = Container.expand(function () { var self = Container.call(this); var carGfx = self.attachAsset('car', { anchorX: 0.5, anchorY: 0.5 }); // Arabayı biraz yukarıdan başlatmak için offset self.setStartPosition = function () { self.x = 2048 / 2; self.y = 2732 - 400; }; // Sınırları kontrol et self.clampToRoad = function () { if (self.x < road.x - road.width / 2 + carGfx.width / 2) { self.x = road.x - road.width / 2 + carGfx.width / 2; } if (self.x > road.x + road.width / 2 - carGfx.width / 2) { self.x = road.x + road.width / 2 - carGfx.width / 2; } }; return self; }); // Engel var Obstacle = Container.expand(function () { var self = Container.call(this); var obsGfx = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 22; self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x111111 }); /**** * Game Code ****/ // Bonus // Engel // Yol çizgisi // Yol şeridi // Araba (oyuncu) // Yolun ortasına yerleştir var road = LK.getAsset('road', { anchorX: 0.5, anchorY: 0 }); road.x = 2048 / 2; road.y = 0; game.addChild(road); // Yol çizgileri (hareketli) var laneLines = []; var laneCount = 3; var laneSpacing = road.width / laneCount; for (var i = 0; i < 8; i++) { var lane = LK.getAsset('lane', { anchorX: 0.5, anchorY: 0.5 }); lane.x = road.x - road.width / 2 + laneSpacing; lane.y = i * 400; game.addChild(lane); laneLines.push(lane); } for (var i = 0; i < 8; i++) { var lane = LK.getAsset('lane', { anchorX: 0.5, anchorY: 0.5 }); lane.x = road.x + road.width / 2 - laneSpacing; lane.y = i * 400 + 200; game.addChild(lane); laneLines.push(lane); } // Skor metni var scoreTxt = new Text2('0', { size: 120, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Oyuncu arabası var car = new Car(); car.setStartPosition(); game.addChild(car); // Oyun değişkenleri var obstacles = []; var bonuses = []; var dragNode = null; var lastScore = 0; var isGameOver = false; // Oyun alanı sınırları var roadLeft = road.x - road.width / 2; var roadRight = road.x + road.width / 2; // Hareket için başlangıç offseti var dragOffsetX = 0; // Oyun skorunu güncelle function updateScore(val) { LK.setScore(val); scoreTxt.setText(val); } // Oyun başlatıldığında skor sıfırla updateScore(0); // Oyun hareketleri function handleMove(x, y, obj) { if (dragNode) { // Arabayı sadece yatay eksende hareket ettir var newX = x - dragOffsetX; car.x = newX; car.clampToRoad(); } } game.move = handleMove; game.down = function (x, y, obj) { // Arabaya dokunulduysa sürüklemeye başla if (x > car.x - 120 && x < car.x + 120 && y > car.y - 180 && y < car.y + 180) { dragNode = car; dragOffsetX = x - car.x; } }; game.up = function (x, y, obj) { dragNode = null; }; // Oyun güncelleme döngüsü game.update = function () { if (isGameOver) return; // Yol çizgilerini hareket ettir for (var i = 0; i < laneLines.length; i++) { laneLines[i].y += 22; if (laneLines[i].y > 2732) { laneLines[i].y -= 2732; } } // Engelleri güncelle for (var i = obstacles.length - 1; i >= 0; i--) { var obs = obstacles[i]; obs.update(); // Ekran dışına çıktıysa sil if (obs.y - 100 > 2732) { obs.destroy(); obstacles.splice(i, 1); continue; } // Çarpışma kontrolü if (car.intersects(obs)) { // Kırmızı titret LK.effects.flashScreen(0xff0000, 800); isGameOver = true; LK.showGameOver(); return; } } // Bonusları güncelle for (var i = bonuses.length - 1; i >= 0; i--) { var b = bonuses[i]; b.update(); // Ekran dışına çıktıysa sil if (b.y - 80 > 2732) { b.destroy(); bonuses.splice(i, 1); continue; } // Toplama kontrolü if (car.intersects(b)) { updateScore(LK.getScore() + 5); // Sarı titret LK.effects.flashObject(car, 0xffeb3b, 400); b.destroy(); bonuses.splice(i, 1); continue; } } // Skor: her frame biraz artır (yol kat ettikçe) if (LK.ticks % 4 === 0) { updateScore(LK.getScore() + 1); } // Engel oluşturma (her 40 frame'de bir) if (LK.ticks % 40 === 0) { var obs = new Obstacle(); // Rastgele şerit seç var laneIdx = Math.floor(Math.random() * laneCount); obs.x = road.x - road.width / 2 + laneSpacing / 2 + laneIdx * laneSpacing; obs.y = -120; obstacles.push(obs); game.addChild(obs); } // Bonus oluşturma (her 120 frame'de bir, %50 olasılıkla) if (LK.ticks % 120 === 0 && Math.random() < 0.5) { var b = new Bonus(); var laneIdx = Math.floor(Math.random() * laneCount); b.x = road.x - road.width / 2 + laneSpacing / 2 + laneIdx * laneSpacing; b.y = -100; bonuses.push(b); game.addChild(b); } }; // Oyun yeniden başlatıldığında sıfırla game.on('destroy', function () { obstacles = []; bonuses = []; isGameOver = false; car.setStartPosition(); updateScore(0); });
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,235 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+// Bonus
+var Bonus = Container.expand(function () {
+ var self = Container.call(this);
+ var bonusGfx = self.attachAsset('bonus', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 22;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+// Oyuncu arabası
+var Car = Container.expand(function () {
+ var self = Container.call(this);
+ var carGfx = self.attachAsset('car', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Arabayı biraz yukarıdan başlatmak için offset
+ self.setStartPosition = function () {
+ self.x = 2048 / 2;
+ self.y = 2732 - 400;
+ };
+ // Sınırları kontrol et
+ self.clampToRoad = function () {
+ if (self.x < road.x - road.width / 2 + carGfx.width / 2) {
+ self.x = road.x - road.width / 2 + carGfx.width / 2;
+ }
+ if (self.x > road.x + road.width / 2 - carGfx.width / 2) {
+ self.x = road.x + road.width / 2 - carGfx.width / 2;
+ }
+ };
+ return self;
+});
+// Engel
+var Obstacle = Container.expand(function () {
+ var self = Container.call(this);
+ var obsGfx = self.attachAsset('obstacle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 22;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
+ backgroundColor: 0x111111
+});
+
+/****
+* Game Code
+****/
+// Bonus
+// Engel
+// Yol çizgisi
+// Yol şeridi
+// Araba (oyuncu)
+// Yolun ortasına yerleştir
+var road = LK.getAsset('road', {
+ anchorX: 0.5,
+ anchorY: 0
+});
+road.x = 2048 / 2;
+road.y = 0;
+game.addChild(road);
+// Yol çizgileri (hareketli)
+var laneLines = [];
+var laneCount = 3;
+var laneSpacing = road.width / laneCount;
+for (var i = 0; i < 8; i++) {
+ var lane = LK.getAsset('lane', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ lane.x = road.x - road.width / 2 + laneSpacing;
+ lane.y = i * 400;
+ game.addChild(lane);
+ laneLines.push(lane);
+}
+for (var i = 0; i < 8; i++) {
+ var lane = LK.getAsset('lane', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ lane.x = road.x + road.width / 2 - laneSpacing;
+ lane.y = i * 400 + 200;
+ game.addChild(lane);
+ laneLines.push(lane);
+}
+// Skor metni
+var scoreTxt = new Text2('0', {
+ size: 120,
+ fill: "#fff"
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Oyuncu arabası
+var car = new Car();
+car.setStartPosition();
+game.addChild(car);
+// Oyun değişkenleri
+var obstacles = [];
+var bonuses = [];
+var dragNode = null;
+var lastScore = 0;
+var isGameOver = false;
+// Oyun alanı sınırları
+var roadLeft = road.x - road.width / 2;
+var roadRight = road.x + road.width / 2;
+// Hareket için başlangıç offseti
+var dragOffsetX = 0;
+// Oyun skorunu güncelle
+function updateScore(val) {
+ LK.setScore(val);
+ scoreTxt.setText(val);
+}
+// Oyun başlatıldığında skor sıfırla
+updateScore(0);
+// Oyun hareketleri
+function handleMove(x, y, obj) {
+ if (dragNode) {
+ // Arabayı sadece yatay eksende hareket ettir
+ var newX = x - dragOffsetX;
+ car.x = newX;
+ car.clampToRoad();
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ // Arabaya dokunulduysa sürüklemeye başla
+ if (x > car.x - 120 && x < car.x + 120 && y > car.y - 180 && y < car.y + 180) {
+ dragNode = car;
+ dragOffsetX = x - car.x;
+ }
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// Oyun güncelleme döngüsü
+game.update = function () {
+ if (isGameOver) return;
+ // Yol çizgilerini hareket ettir
+ for (var i = 0; i < laneLines.length; i++) {
+ laneLines[i].y += 22;
+ if (laneLines[i].y > 2732) {
+ laneLines[i].y -= 2732;
+ }
+ }
+ // Engelleri güncelle
+ for (var i = obstacles.length - 1; i >= 0; i--) {
+ var obs = obstacles[i];
+ obs.update();
+ // Ekran dışına çıktıysa sil
+ if (obs.y - 100 > 2732) {
+ obs.destroy();
+ obstacles.splice(i, 1);
+ continue;
+ }
+ // Çarpışma kontrolü
+ if (car.intersects(obs)) {
+ // Kırmızı titret
+ LK.effects.flashScreen(0xff0000, 800);
+ isGameOver = true;
+ LK.showGameOver();
+ return;
+ }
+ }
+ // Bonusları güncelle
+ for (var i = bonuses.length - 1; i >= 0; i--) {
+ var b = bonuses[i];
+ b.update();
+ // Ekran dışına çıktıysa sil
+ if (b.y - 80 > 2732) {
+ b.destroy();
+ bonuses.splice(i, 1);
+ continue;
+ }
+ // Toplama kontrolü
+ if (car.intersects(b)) {
+ updateScore(LK.getScore() + 5);
+ // Sarı titret
+ LK.effects.flashObject(car, 0xffeb3b, 400);
+ b.destroy();
+ bonuses.splice(i, 1);
+ continue;
+ }
+ }
+ // Skor: her frame biraz artır (yol kat ettikçe)
+ if (LK.ticks % 4 === 0) {
+ updateScore(LK.getScore() + 1);
+ }
+ // Engel oluşturma (her 40 frame'de bir)
+ if (LK.ticks % 40 === 0) {
+ var obs = new Obstacle();
+ // Rastgele şerit seç
+ var laneIdx = Math.floor(Math.random() * laneCount);
+ obs.x = road.x - road.width / 2 + laneSpacing / 2 + laneIdx * laneSpacing;
+ obs.y = -120;
+ obstacles.push(obs);
+ game.addChild(obs);
+ }
+ // Bonus oluşturma (her 120 frame'de bir, %50 olasılıkla)
+ if (LK.ticks % 120 === 0 && Math.random() < 0.5) {
+ var b = new Bonus();
+ var laneIdx = Math.floor(Math.random() * laneCount);
+ b.x = road.x - road.width / 2 + laneSpacing / 2 + laneIdx * laneSpacing;
+ b.y = -100;
+ bonuses.push(b);
+ game.addChild(b);
+ }
+};
+// Oyun yeniden başlatıldığında sıfırla
+game.on('destroy', function () {
+ obstacles = [];
+ bonuses = [];
+ isGameOver = false;
+ car.setStartPosition();
+ updateScore(0);
});
\ No newline at end of file