User prompt
bookpage kısmını kaldır
User prompt
arka fonu daha tatlı tasarımla süsle
User prompt
daha tatlı olsun
User prompt
soruya daha belirgin olabilmesi için bir arka fon ekle ve çarpma bölme de ekle
User prompt
daha yaratıcı ol
User prompt
arka fonda kitap sayfasındaymışız gibi oluştur
User prompt
skor yazısını kedileri kurtardıkça artan bir sayaç halinde can barının altında yerleştir sayaç kedi ikonu ve onun önünde artan çarpan şeklinde olsun
User prompt
can barında rakamlar yerine kalan hakkımız kadar kalp ikonu ekle tatlı olsun
User prompt
görünür yap
User prompt
can barının altından yerleştir
User prompt
kurtalın kediler yazısını Skor yazısı ile değiştir tatlı bir font ile yaz ve bir barın içerisinde ekranın sağ üst köşesinde olsun
User prompt
can barı daha küçük olsun ve tatlı tasarımı olsun yanına kalp ekle
User prompt
lives kelimesini Can ile cats rescued kelimesiini Kurtarılan Kediler diye değiştir
User prompt
rakamlar biraz daha aşağıya insin
User prompt
rakamların yazısı daha belirgin ve arka fondan seçilcek şekilde olsun
User prompt
itfaiye adam kedi düştüğü zaman doğru cevap verirsek kedinin düştüğü yöne doğru hareket etsin ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Cat Rescue Math Heroes
Initial prompt
Kedileri Kurtarma Operasyonu: Matematik Kahramanları Oyun Türü: Hızlı Düşünme ve Matematik Zekası Oyunu Platform: Web tabanlı, mobil uygulama veya masaüstü (düşük sistem gereksinimleri) Tema: İtfaiyeci, Kedi Kurtarma, Yangın Oyunun Konusu Korkusuz bir itfaiyecisiniz ve şehrin en sevimli kedileri yanan binalarda mahsur kalmış durumda! Göreviniz, hızlı matematik hesaplamaları yaparak her bir kediyi güvenle yere indirmek. Ne kadar hızlı ve doğru cevap verirseniz, o kadar çok kedi kurtaracak ve gerçek bir matematik kahramanı olacaksınız! Nasıl Oynanır? Yangın Başlıyor! Oyun başladığında, yanan bir binadan bir kedi atlamaya hazırlanırken ekranda basit bir matematik sorusu belirir (örn: 5+3=? veya 12−7=?). Hızlı Cevap Ver! Soruyu mümkün olan en kısa sürede cevaplamanız ve doğru sonucu tuşlamanız veya seçmeniz gerekir. Doğru cevabı verdiğinizde, itfaiyeciniz kediyi başarıyla yakalar ve güvenli bir şekilde indirir. Yanlış cevap verirseniz veya çok yavaş kalırsanız, ne yazık ki o kedi kurtarılamaz ve can haklarınızdan biri azalır. Zorluk Artıyor! Her başarılı kedi kurtarma, oyunun zorluğunu biraz daha artırır. Bu artış şunlar şeklinde olabilir: Daha Karmaşık Sorular: Toplama ve çıkarmadan çarpma, bölme ve hatta basit denklemlere geçiş. Azalan Süre: Cevap vermek için verilen süre kısalır. Daha Fazla Kedi: Aynı anda birden fazla kedinin kurtarılması gerekebilir (yani birden fazla soru ekranda belirebilir). Ek Engeller: Yangın büyüklüğü, çıkan duman veya düşen molozlar görsel olarak zorluğu artırabilir, oyuncunun dikkatini dağıtabilir. Can Hakları ve Oyun Sonu Oyuncunun belirli sayıda "can hakkı" vardır (örn: 3). Yanlış cevap verildiğinde veya süre aşıldığında bir can hakkı kaybedilir. Tüm can hakları tükendiğinde oyun sona erer. Kurtardığınız toplam kedi sayısı puanınız olur. Oyunun Özellikleri Eğitici ve Eğlenceli: Çocuklar ve yetişkinler için matematik becerilerini geliştirirken eğlenceli vakit geçirme imkanı sunar. Aşamalı Zorluk: Her seviyede artan zorluk, oyuncuyu sürekli meydan okumaya teşvik eder. Skor Tablosu: En çok kedi kurtaran oyuncuların sıralandığı bir skor tablosu eklenebilir. Görsel ve İşitsel Geri Bildirim: Kediyi kurtardığınızda veya hata yaptığınızda görsel ve işitsel efektler ile anında geri bildirim. Pozitif Pekiştirme: Başarılı kurtarma operasyonları sonrası motivasyonu artırıcı mesajlar. Geliştirme İçin Adımlar (Basitçe) Temel Oyun Mekaniği: Soruları gösterme, cevap alma, doğru/yanlış kontrolü ve zamanlayıcı sistemini kur. Zorluk Seviyeleri: Farklı zorluk seviyeleri için soru bankaları ve zaman kısıtlamaları oluştur. Arayüz Tasarımı: Basit ama etkili bir oyun ekranı (itfaiyeci, yanan bina, kedi, soru alanı, cevap alanı). Skor Sistemi: Kurtarılan kedi sayısını takip etme ve kaydetme.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var AnswerButton = Container.expand(function (answer, isCorrect) {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('answerButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.answer = answer;
self.isCorrect = isCorrect;
var answerText = new Text2(answer.toString(), {
size: 60,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 4
});
answerText.anchor.set(0.5, 0.5);
self.addChild(answerText);
self.down = function (x, y, obj) {
if (currentQuestion && !questionAnswered) {
handleAnswer(self.isCorrect);
}
};
return self;
});
var Cat = Container.expand(function () {
var self = Container.call(this);
var catGraphics = self.attachAsset('cat', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.saved = false;
self.fallen = false;
self.update = function () {
if (!self.saved && !self.fallen) {
self.y += self.speed;
if (self.y > 2400) {
self.fallen = true;
}
}
};
return self;
});
var Fire = Container.expand(function () {
var self = Container.call(this);
var fireGraphics = self.attachAsset('fire', {
anchorX: 0.5,
anchorY: 0.5
});
self.animationTimer = 0;
self.update = function () {
self.animationTimer += 1;
fireGraphics.scaleX = 1 + Math.sin(self.animationTimer * 0.1) * 0.3;
fireGraphics.scaleY = 1 + Math.cos(self.animationTimer * 0.15) * 0.2;
};
return self;
});
var Smoke = Container.expand(function () {
var self = Container.call(this);
var smokeGraphics = self.attachAsset('smoke', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -1;
self.drift = Math.random() * 2 - 1;
self.update = function () {
self.y += self.speed;
self.x += self.drift;
smokeGraphics.alpha -= 0.01;
if (smokeGraphics.alpha <= 0 || self.y < -100) {
self.destroy();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x0d191e
});
/****
* Game Code
****/
// Game variables
var lives = 3;
var catsRescued = 0;
var currentCat = null;
var currentQuestion = null;
var questionAnswered = false;
var gameRunning = true;
var difficulty = 1;
var questionTimer = 0;
var maxQuestionTime = 300; // 5 seconds at 60fps
// UI elements
var livesText = new Text2('Lives: 3', {
size: 80,
fill: 0xFF0000
});
livesText.anchor.set(0, 0);
livesText.x = 120;
livesText.y = 20;
LK.gui.topLeft.addChild(livesText);
var scoreText = new Text2('Cats Rescued: 0', {
size: 80,
fill: 0x00FF00
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var questionText = new Text2('', {
size: 100,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 8
});
questionText.anchor.set(0.5, 0.5);
questionText.x = 1024;
questionText.y = 400;
game.addChild(questionText);
// Game objects
var building = game.addChild(LK.getAsset('building', {
anchorX: 0.5,
anchorY: 1,
x: 1024,
y: 2400
}));
var firefighter = game.addChild(LK.getAsset('firefighter', {
anchorX: 0.5,
anchorY: 1,
x: 1024,
y: 2600
}));
var net = game.addChild(LK.getAsset('net', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2500
}));
// Arrays for game objects
var fires = [];
var smokes = [];
var answerButtons = [];
// Create fires on building
for (var i = 0; i < 8; i++) {
var fire = new Fire();
fire.x = 300 + i * 200;
fire.y = 1400 + Math.random() * 400;
fires.push(fire);
game.addChild(fire);
}
// Math question generation
function generateQuestion() {
var num1, num2, operation, answer, wrongAnswers;
if (difficulty <= 2) {
// Addition and subtraction
num1 = Math.floor(Math.random() * 20) + 1;
num2 = Math.floor(Math.random() * 20) + 1;
operation = Math.random() > 0.5 ? '+' : '-';
if (operation === '+') {
answer = num1 + num2;
} else {
if (num1 < num2) {
var temp = num1;
num1 = num2;
num2 = temp;
}
answer = num1 - num2;
}
} else {
// Multiplication and division
if (Math.random() > 0.5) {
num1 = Math.floor(Math.random() * 12) + 1;
num2 = Math.floor(Math.random() * 12) + 1;
operation = '×';
answer = num1 * num2;
} else {
num2 = Math.floor(Math.random() * 12) + 1;
answer = Math.floor(Math.random() * 12) + 1;
num1 = num2 * answer;
operation = '÷';
}
}
var questionStr = num1 + ' ' + operation + ' ' + num2 + ' = ?';
// Generate wrong answers
wrongAnswers = [];
while (wrongAnswers.length < 3) {
var wrongAnswer = answer + Math.floor(Math.random() * 20) - 10;
if (wrongAnswer !== answer && wrongAnswer > 0 && wrongAnswers.indexOf(wrongAnswer) === -1) {
wrongAnswers.push(wrongAnswer);
}
}
return {
question: questionStr,
answer: answer,
wrongAnswers: wrongAnswers
};
}
function createAnswerButtons(questionData) {
// Clear existing buttons
for (var i = answerButtons.length - 1; i >= 0; i--) {
answerButtons[i].destroy();
answerButtons.splice(i, 1);
}
var allAnswers = [questionData.answer].concat(questionData.wrongAnswers);
// Shuffle answers
for (var i = allAnswers.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = allAnswers[i];
allAnswers[i] = allAnswers[j];
allAnswers[j] = temp;
}
// Create buttons
for (var i = 0; i < 4; i++) {
var isCorrect = allAnswers[i] === questionData.answer;
var button = new AnswerButton(allAnswers[i], isCorrect);
button.x = 400 + i * 300;
button.y = 600;
answerButtons.push(button);
game.addChild(button);
}
}
function startNewQuestion() {
if (!gameRunning) {
return;
}
currentQuestion = generateQuestion();
questionText.setText(currentQuestion.question);
createAnswerButtons(currentQuestion);
questionAnswered = false;
questionTimer = 0;
// Create new cat
currentCat = new Cat();
currentCat.x = 500 + Math.random() * 1000;
currentCat.y = 800;
currentCat.speed = 1 + difficulty * 0.5;
game.addChild(currentCat);
}
function handleAnswer(isCorrect) {
if (questionAnswered || !gameRunning) {
return;
}
questionAnswered = true;
if (isCorrect) {
// Correct answer
LK.getSound('correct').play();
currentCat.saved = true;
catsRescued++;
LK.setScore(catsRescued);
scoreText.setText('Cats Rescued: ' + catsRescued);
// Flash cat green
LK.effects.flashObject(currentCat, 0x00FF00, 500);
// Move firefighter and net to cat's x position
tween(firefighter, {
x: currentCat.x
}, {
duration: 800
});
tween(net, {
x: currentCat.x
}, {
duration: 800
});
// Move cat to safety
tween(currentCat, {
x: currentCat.x,
y: net.y
}, {
duration: 1000,
onFinish: function onFinish() {
if (currentCat) {
currentCat.destroy();
currentCat = null;
}
}
});
// Increase difficulty every 5 cats
if (catsRescued % 5 === 0) {
difficulty++;
maxQuestionTime = Math.max(120, maxQuestionTime - 30);
}
// Start next question after delay
LK.setTimeout(function () {
startNewQuestion();
}, 1500);
} else {
// Wrong answer
LK.getSound('wrong').play();
lives--;
livesText.setText('Lives: ' + lives);
// Flash screen red
LK.effects.flashScreen(0xFF0000, 500);
if (lives <= 0) {
gameRunning = false;
LK.showGameOver();
} else {
// Start next question after delay
LK.setTimeout(function () {
if (currentCat) {
currentCat.destroy();
currentCat = null;
}
startNewQuestion();
}, 1500);
}
}
// Clear answer buttons
for (var i = answerButtons.length - 1; i >= 0; i--) {
answerButtons[i].destroy();
answerButtons.splice(i, 1);
}
questionText.setText('');
}
// Generate smoke effects
var smokeTimer = 0;
game.update = function () {
if (!gameRunning) {
return;
}
// Check if cat fell without being saved
if (currentCat && !currentCat.saved && currentCat.fallen) {
LK.getSound('fall').play();
lives--;
livesText.setText('Lives: ' + lives);
// Flash screen red
LK.effects.flashScreen(0xFF0000, 500);
if (lives <= 0) {
gameRunning = false;
LK.showGameOver();
} else {
currentCat.destroy();
currentCat = null;
startNewQuestion();
}
}
// Question timeout
if (currentQuestion && !questionAnswered) {
questionTimer++;
if (questionTimer >= maxQuestionTime) {
handleAnswer(false);
}
}
// Generate smoke
smokeTimer++;
if (smokeTimer % 20 === 0) {
var smoke = new Smoke();
smoke.x = 300 + Math.random() * 1400;
smoke.y = 1800 + Math.random() * 400;
smokes.push(smoke);
game.addChild(smoke);
}
// Clean up destroyed smoke
for (var i = smokes.length - 1; i >= 0; i--) {
if (smokes[i].destroyed) {
smokes.splice(i, 1);
}
}
};
// Start first question
startNewQuestion(); ===================================================================
--- original.js
+++ change.js
@@ -15,9 +15,11 @@
self.answer = answer;
self.isCorrect = isCorrect;
var answerText = new Text2(answer.toString(), {
size: 60,
- fill: 0xFFFFFF
+ fill: 0xFFFFFF,
+ stroke: 0x000000,
+ strokeThickness: 4
});
answerText.anchor.set(0.5, 0.5);
self.addChild(answerText);
self.down = function (x, y, obj) {
@@ -115,9 +117,11 @@
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var questionText = new Text2('', {
size: 100,
- fill: 0x000000
+ fill: 0xFFFFFF,
+ stroke: 0x000000,
+ strokeThickness: 8
});
questionText.anchor.set(0.5, 0.5);
questionText.x = 1024;
questionText.y = 400;
bunu yıpranmış orta çağ şatosuyla değiştir. In-Game asset. 2d. High contrast. No shadows
havada atlayan tatlı bir kedi çiz. In-Game asset. 2d. High contrast. No shadows
daha tatlı alevler çiz. In-Game asset. 2d. High contrast. No shadows
havadan düşen kediyi yakalamaya çalışan tatlı itfaiye adamı çiz. In-Game asset. 2d. High contrast. No shadows
tatlı duman çiz. In-Game asset. 2d. High contrast. No shadows
içi boş masal kitabı. In-Game asset. 2d. High contrast. No shadows