User prompt
biraz önceki verdiğim renk sırasına göre git
User prompt
renkler sarı, turuncu, kırmızı , pembe, mor , koyu mavi, açık mavi döngüsünde gitsin
User prompt
sayılar 1'den başlayarak 1'er 1'er Çoğalsın
Code edit (1 edits merged)
Please save this source code
User prompt
Bir Sayı Oyunu
Initial prompt
bir sayı oyununa başla
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Sayı balonu sınıfı
var NumberBubble = Container.expand(function () {
var self = Container.call(this);
// Varsayılan olarak mavi balon
var bubble = self.attachAsset('numberBubble', {
anchorX: 0.5,
anchorY: 0.5
});
self.bubble = bubble;
// Sayı metni
var numberText = new Text2('0', {
size: 140,
fill: 0xFFFFFF
});
numberText.anchor.set(0.5, 0.5);
self.addChild(numberText);
self.numberText = numberText;
// Balonun gösterdiği sayı
self.value = 0;
// Balonun doğru/yanlış animasyonu
self.flash = function (type) {
// type: 'correct' | 'wrong'
var color = 0x3a8dde;
if (type === 'correct') color = 0x44de83;
if (type === 'wrong') color = 0xde3a3a;
tween(self.bubble, {
tint: color
}, {
duration: 120,
easing: tween.linear,
onFinish: function onFinish() {
tween(self.bubble, {
tint: 0x3a8dde
}, {
duration: 200,
easing: tween.linear
});
}
});
};
// Balonun değerini ayarla
self.setValue = function (val) {
self.value = val;
self.numberText.setText(val + '');
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x181c24
});
/****
* Game Code
****/
// Animasyonlar için tween eklentisi
// Doğru seçim için yeşil balon
// Yanlış seçim için kırmızı balon
// Sayı balonu için daire şekli
// Oyun değişkenleri
var currentBubble = null;
var score = 0;
var scoreTxt = null;
var timerTxt = null;
var roundTimeout = null;
var roundDuration = 2000; // ms, ilk turda 2 saniye
var minRoundDuration = 800; // ms, minimum hız
var roundDecrease = 80; // Her doğru için ms azalır
var isGameActive = true;
var lastNumber = null;
// Skor metni
scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Zamanlayıcı metni
timerTxt = new Text2('', {
size: 60,
fill: 0xFFE066
});
timerTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(timerTxt);
timerTxt.y = 130;
// Yeni sayı balonu oluştur
function spawnNumberBubble() {
// Önceki balonu kaldır
if (currentBubble) {
currentBubble.destroy();
currentBubble = null;
}
// Yeni sayı seç (1-99, son sayıdan farklı)
var newNumber = Math.floor(Math.random() * 99) + 1;
if (lastNumber !== null && newNumber === lastNumber) {
newNumber = newNumber % 99 + 1;
}
lastNumber = newNumber;
// Balonu oluştur
var bubble = new NumberBubble();
bubble.setValue(newNumber);
// Rastgele konum (balonun tamamı ekranda kalacak şekilde)
var margin = 200;
var bx = margin + Math.random() * (2048 - 2 * margin);
var by = 350 + Math.random() * (2732 - 350 - margin);
bubble.x = bx;
bubble.y = by;
// Balonu ekle
game.addChild(bubble);
currentBubble = bubble;
// Balona dokunma olayı
bubble.down = function (x, y, obj) {
if (!isGameActive) return;
// Doğru balona dokunuldu
handleCorrect();
};
// Zamanlayıcı başlat
startRoundTimer();
}
// Tur zamanlayıcısı
function startRoundTimer() {
if (roundTimeout) {
LK.clearTimeout(roundTimeout);
roundTimeout = null;
}
var startTime = Date.now();
var duration = roundDuration;
updateTimerText(duration);
// Zamanlayıcıyı güncelle
function updateTimer() {
if (!isGameActive) return;
var elapsed = Date.now() - startTime;
var left = duration - elapsed;
if (left <= 0) {
timerTxt.setText('0.0');
handleTimeout();
} else {
updateTimerText(left);
roundTimeout = LK.setTimeout(updateTimer, 60);
}
}
roundTimeout = LK.setTimeout(updateTimer, 60);
}
// Zamanlayıcı metnini güncelle
function updateTimerText(ms) {
var sec = Math.max(0, ms / 1000);
timerTxt.setText(sec.toFixed(1));
}
// Doğru balona dokunulduğunda
function handleCorrect() {
if (!isGameActive) return;
isGameActive = false;
if (roundTimeout) {
LK.clearTimeout(roundTimeout);
roundTimeout = null;
}
// Balonu yeşil yap, animasyon
if (currentBubble) currentBubble.flash('correct');
// Skoru artır
score += 1;
scoreTxt.setText(score + '');
// Zorluk artır: süreyi azalt
roundDuration = Math.max(minRoundDuration, roundDuration - roundDecrease);
// Kısa bekle, sonra yeni balon
LK.setTimeout(function () {
isGameActive = true;
spawnNumberBubble();
}, 180);
}
// Zaman aşımı olursa
function handleTimeout() {
if (!isGameActive) return;
isGameActive = false;
// Balonu kırmızı yap, animasyon
if (currentBubble) currentBubble.flash('wrong');
// Ekranı kırmızıya flashla
LK.effects.flashScreen(0xde3a3a, 600);
// Oyun bitti
LK.setTimeout(function () {
LK.showGameOver();
}, 600);
}
// Oyun başlat
function startGame() {
score = 0;
scoreTxt.setText('0');
roundDuration = 2000;
isGameActive = true;
lastNumber = null;
if (currentBubble) {
currentBubble.destroy();
currentBubble = null;
}
spawnNumberBubble();
}
startGame();
// Oyun bittiğinde cleanup (LK.showGameOver çağrıldığında otomatik resetlenir)
game.destroy = function () {
if (roundTimeout) {
LK.clearTimeout(roundTimeout);
roundTimeout = null;
}
if (currentBubble) {
currentBubble.destroy();
currentBubble = null;
}
};
// Ekrana yanlışlıkla dokunulursa (balon dışında), oyun bitmesin diye hiçbir şey yapma
game.down = function (x, y, obj) {
// Sadece balonun down'u çalışsın
};
// Sürükleme, hareket, up olayları gerekmiyor
game.move = function (x, y, obj) {};
game.up = function (x, y, obj) {};
// Oyun update fonksiyonu (gerekli değil ama boş bırakıyoruz)
game.update = function () {}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,227 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+// Sayı balonu sınıfı
+var NumberBubble = Container.expand(function () {
+ var self = Container.call(this);
+ // Varsayılan olarak mavi balon
+ var bubble = self.attachAsset('numberBubble', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.bubble = bubble;
+ // Sayı metni
+ var numberText = new Text2('0', {
+ size: 140,
+ fill: 0xFFFFFF
+ });
+ numberText.anchor.set(0.5, 0.5);
+ self.addChild(numberText);
+ self.numberText = numberText;
+ // Balonun gösterdiği sayı
+ self.value = 0;
+ // Balonun doğru/yanlış animasyonu
+ self.flash = function (type) {
+ // type: 'correct' | 'wrong'
+ var color = 0x3a8dde;
+ if (type === 'correct') color = 0x44de83;
+ if (type === 'wrong') color = 0xde3a3a;
+ tween(self.bubble, {
+ tint: color
+ }, {
+ duration: 120,
+ easing: tween.linear,
+ onFinish: function onFinish() {
+ tween(self.bubble, {
+ tint: 0x3a8dde
+ }, {
+ duration: 200,
+ easing: tween.linear
+ });
+ }
+ });
+ };
+ // Balonun değerini ayarla
+ self.setValue = function (val) {
+ self.value = val;
+ self.numberText.setText(val + '');
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x181c24
+});
+
+/****
+* Game Code
+****/
+// Animasyonlar için tween eklentisi
+// Doğru seçim için yeşil balon
+// Yanlış seçim için kırmızı balon
+// Sayı balonu için daire şekli
+// Oyun değişkenleri
+var currentBubble = null;
+var score = 0;
+var scoreTxt = null;
+var timerTxt = null;
+var roundTimeout = null;
+var roundDuration = 2000; // ms, ilk turda 2 saniye
+var minRoundDuration = 800; // ms, minimum hız
+var roundDecrease = 80; // Her doğru için ms azalır
+var isGameActive = true;
+var lastNumber = null;
+// Skor metni
+scoreTxt = new Text2('0', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Zamanlayıcı metni
+timerTxt = new Text2('', {
+ size: 60,
+ fill: 0xFFE066
+});
+timerTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(timerTxt);
+timerTxt.y = 130;
+// Yeni sayı balonu oluştur
+function spawnNumberBubble() {
+ // Önceki balonu kaldır
+ if (currentBubble) {
+ currentBubble.destroy();
+ currentBubble = null;
+ }
+ // Yeni sayı seç (1-99, son sayıdan farklı)
+ var newNumber = Math.floor(Math.random() * 99) + 1;
+ if (lastNumber !== null && newNumber === lastNumber) {
+ newNumber = newNumber % 99 + 1;
+ }
+ lastNumber = newNumber;
+ // Balonu oluştur
+ var bubble = new NumberBubble();
+ bubble.setValue(newNumber);
+ // Rastgele konum (balonun tamamı ekranda kalacak şekilde)
+ var margin = 200;
+ var bx = margin + Math.random() * (2048 - 2 * margin);
+ var by = 350 + Math.random() * (2732 - 350 - margin);
+ bubble.x = bx;
+ bubble.y = by;
+ // Balonu ekle
+ game.addChild(bubble);
+ currentBubble = bubble;
+ // Balona dokunma olayı
+ bubble.down = function (x, y, obj) {
+ if (!isGameActive) return;
+ // Doğru balona dokunuldu
+ handleCorrect();
+ };
+ // Zamanlayıcı başlat
+ startRoundTimer();
+}
+// Tur zamanlayıcısı
+function startRoundTimer() {
+ if (roundTimeout) {
+ LK.clearTimeout(roundTimeout);
+ roundTimeout = null;
+ }
+ var startTime = Date.now();
+ var duration = roundDuration;
+ updateTimerText(duration);
+ // Zamanlayıcıyı güncelle
+ function updateTimer() {
+ if (!isGameActive) return;
+ var elapsed = Date.now() - startTime;
+ var left = duration - elapsed;
+ if (left <= 0) {
+ timerTxt.setText('0.0');
+ handleTimeout();
+ } else {
+ updateTimerText(left);
+ roundTimeout = LK.setTimeout(updateTimer, 60);
+ }
+ }
+ roundTimeout = LK.setTimeout(updateTimer, 60);
+}
+// Zamanlayıcı metnini güncelle
+function updateTimerText(ms) {
+ var sec = Math.max(0, ms / 1000);
+ timerTxt.setText(sec.toFixed(1));
+}
+// Doğru balona dokunulduğunda
+function handleCorrect() {
+ if (!isGameActive) return;
+ isGameActive = false;
+ if (roundTimeout) {
+ LK.clearTimeout(roundTimeout);
+ roundTimeout = null;
+ }
+ // Balonu yeşil yap, animasyon
+ if (currentBubble) currentBubble.flash('correct');
+ // Skoru artır
+ score += 1;
+ scoreTxt.setText(score + '');
+ // Zorluk artır: süreyi azalt
+ roundDuration = Math.max(minRoundDuration, roundDuration - roundDecrease);
+ // Kısa bekle, sonra yeni balon
+ LK.setTimeout(function () {
+ isGameActive = true;
+ spawnNumberBubble();
+ }, 180);
+}
+// Zaman aşımı olursa
+function handleTimeout() {
+ if (!isGameActive) return;
+ isGameActive = false;
+ // Balonu kırmızı yap, animasyon
+ if (currentBubble) currentBubble.flash('wrong');
+ // Ekranı kırmızıya flashla
+ LK.effects.flashScreen(0xde3a3a, 600);
+ // Oyun bitti
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 600);
+}
+// Oyun başlat
+function startGame() {
+ score = 0;
+ scoreTxt.setText('0');
+ roundDuration = 2000;
+ isGameActive = true;
+ lastNumber = null;
+ if (currentBubble) {
+ currentBubble.destroy();
+ currentBubble = null;
+ }
+ spawnNumberBubble();
+}
+startGame();
+// Oyun bittiğinde cleanup (LK.showGameOver çağrıldığında otomatik resetlenir)
+game.destroy = function () {
+ if (roundTimeout) {
+ LK.clearTimeout(roundTimeout);
+ roundTimeout = null;
+ }
+ if (currentBubble) {
+ currentBubble.destroy();
+ currentBubble = null;
+ }
+};
+// Ekrana yanlışlıkla dokunulursa (balon dışında), oyun bitmesin diye hiçbir şey yapma
+game.down = function (x, y, obj) {
+ // Sadece balonun down'u çalışsın
+};
+// Sürükleme, hareket, up olayları gerekmiyor
+game.move = function (x, y, obj) {};
+game.up = function (x, y, obj) {};
+// Oyun update fonksiyonu (gerekli değil ama boş bırakıyoruz)
+game.update = function () {};
\ No newline at end of file