User prompt
birde arkada "turkce_tellafuz_edebilir_misin" müziği tekrarlanarak çalcak
User prompt
Please fix the bug: 'Uncaught TypeError: facekit.requestPermissions is not a function' in or related to this line: 'facekit.requestPermissions(function (success) {' Line Number: 151 ↪💡 Consider importing and using the following plugins: @upit/facekit.v1
User prompt
Please fix the bug: 'Uncaught TypeError: facekit.enable is not a function' in or related to this line: 'facekit.enable(function (success) {' Line Number: 151
User prompt
mikrofon ve kamera şeçme yeri olup daha fazla kelimesi olsun Ve türkçe ve ingilizce dil desteği olsun ↪💡 Consider importing and using the following plugins: @upit/facekit.v1
User prompt
Please fix the bug: 'TypeError: Cannot set properties of undefined (setting 'fill')' in or related to this line: 'feedbackTxt.style.fill = color;' Line Number: 158
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'fill')' in or related to this line: 'wordBubble.textObj.style.fill = "#fff700";' Line Number: 130
Code edit (1 edits merged)
Please save this source code
User prompt
Türkçe Konuşabilir misin?
Initial prompt
Türkçe konuşabilir misin?
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); var facekit = LK.import("@upit/facekit.v1"); /**** * Classes ****/ // Character controlled by voice var Character = Container.expand(function () { var self = Container.call(this); var charAsset = self.attachAsset('character', { anchorX: 0.5, anchorY: 0.5 }); self.setIdle = function () { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.easeOut }); }; self.setActive = function () { tween(self, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200, easing: tween.easeOut }); }; return self; }); // Word bubble above character var WordBubble = Container.expand(function () { var self = Container.call(this); self.textObj = new Text2('', { size: 90, fill: 0xFFF700 }); self.textObj.anchor.set(0.5, 1); self.addChild(self.textObj); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ // List of Turkish words for the game var wordList = ["elma", "araba", "kitap", "masa", "kedi", "köpek", "okul", "çanta", "kalem", "telefon", "beyaz", "mavi", "yeşil", "sarı", "kırmızı", "güneş", "ay", "yıldız", "bulut", "deniz"]; // Shuffle helper function shuffle(arr) { for (var i = arr.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } return arr; } // Game state var currentWordIndex = 0; var currentWord = ''; var score = 0; var level = 1; var wordsPerLevel = 5; var isListening = false; var lastHeard = ''; var wordTimeout = null; var feedbackTimeout = null; var gameActive = true; // Shuffle word list for each game var gameWords = shuffle(wordList.slice()); // Character var character = new Character(); character.x = 2048 / 2; character.y = 2732 - 400; game.addChild(character); // Word bubble var wordBubble = new WordBubble(); wordBubble.x = character.x; wordBubble.y = character.y - 180; game.addChild(wordBubble); // Score text var scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Level text var levelTxt = new Text2('Seviye 1', { size: 70, fill: 0x00E0FF }); levelTxt.anchor.set(0.5, 0); LK.gui.top.addChild(levelTxt); levelTxt.y = 120; // Feedback text (centered) var feedbackTxt = new Text2('', { size: 120, fill: 0x00FF00 }); feedbackTxt.anchor.set(0.5, 0.5); LK.gui.center.addChild(feedbackTxt); // Helper: Set new word function setNewWord() { if (currentWordIndex >= gameWords.length) { LK.showYouWin(); return; } currentWord = gameWords[currentWordIndex]; wordBubble.textObj.setText(currentWord); wordBubble.textObj.style.fill = "#fff700"; lastHeard = ''; isListening = true; character.setIdle(); feedbackTxt.setText(''); // Set timeout for word (5 seconds) if (wordTimeout) LK.clearTimeout(wordTimeout); wordTimeout = LK.setTimeout(function () { if (!gameActive) return; isListening = false; feedbackTxt.setText('Süre doldu!'); feedbackTxt.style.fill = "#ff3333"; character.setIdle(); LK.effects.flashObject(character, 0xff0000, 600); LK.setTimeout(function () { LK.showGameOver(); }, 1200); }, 5000); } // Helper: Show feedback function showFeedback(text, color) { feedbackTxt.setText(text); feedbackTxt.style.fill = color; if (feedbackTimeout) LK.clearTimeout(feedbackTimeout); feedbackTimeout = LK.setTimeout(function () { feedbackTxt.setText(''); }, 1000); } // Helper: Next word function nextWord() { currentWordIndex++; if (currentWordIndex % wordsPerLevel === 0) { level++; levelTxt.setText('Seviye ' + level); // Increase difficulty: reduce time per word } setNewWord(); } // Helper: Normalize string (lowercase, Turkish chars) function normalize(str) { return (str || '').toLocaleLowerCase('tr-TR').replace(/[^a-zçğıöşü]/g, ''); } // Main voice check loop game.update = function () { if (!gameActive) return; // Only check if listening for word if (!isListening) return; // Use facekit.volume as a proxy for "speaking" if (facekit.volume > 0.2) { // Simulate "heard" word by using pitch as a randomizer (since we can't do real speech-to-text) // In a real implementation, here would be the speech recognition result // For MVP, we simulate: if user makes sound, we "accept" as correct with 70% chance if (lastHeard !== currentWord) { var correct = Math.random() < 0.7; if (correct) { lastHeard = currentWord; isListening = false; LK.clearTimeout(wordTimeout); score++; LK.setScore(score); scoreTxt.setText(score); wordBubble.textObj.style.fill = "#00ff00"; character.setActive(); LK.effects.flashObject(character, 0x00ff00, 400); showFeedback('Doğru!', "#00ff00"); LK.setTimeout(function () { character.setIdle(); nextWord(); }, 800); } else { lastHeard = 'wrong'; isListening = false; LK.clearTimeout(wordTimeout); wordBubble.textObj.style.fill = "#ff3333"; character.setIdle(); LK.effects.flashObject(character, 0xff0000, 400); showFeedback('Yanlış!', "#ff3333"); LK.setTimeout(function () { LK.showGameOver(); }, 900); } } } }; // Start game setNewWord();
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,210 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+var facekit = LK.import("@upit/facekit.v1");
+
+/****
+* Classes
+****/
+// Character controlled by voice
+var Character = Container.expand(function () {
+ var self = Container.call(this);
+ var charAsset = self.attachAsset('character', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.setIdle = function () {
+ tween(self, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 200,
+ easing: tween.easeOut
+ });
+ };
+ self.setActive = function () {
+ tween(self, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 200,
+ easing: tween.easeOut
+ });
+ };
+ return self;
+});
+// Word bubble above character
+var WordBubble = Container.expand(function () {
+ var self = Container.call(this);
+ self.textObj = new Text2('', {
+ size: 90,
+ fill: 0xFFF700
+ });
+ self.textObj.anchor.set(0.5, 1);
+ self.addChild(self.textObj);
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a2e
+});
+
+/****
+* Game Code
+****/
+// List of Turkish words for the game
+var wordList = ["elma", "araba", "kitap", "masa", "kedi", "köpek", "okul", "çanta", "kalem", "telefon", "beyaz", "mavi", "yeşil", "sarı", "kırmızı", "güneş", "ay", "yıldız", "bulut", "deniz"];
+// Shuffle helper
+function shuffle(arr) {
+ for (var i = arr.length - 1; i > 0; i--) {
+ var j = Math.floor(Math.random() * (i + 1));
+ var temp = arr[i];
+ arr[i] = arr[j];
+ arr[j] = temp;
+ }
+ return arr;
+}
+// Game state
+var currentWordIndex = 0;
+var currentWord = '';
+var score = 0;
+var level = 1;
+var wordsPerLevel = 5;
+var isListening = false;
+var lastHeard = '';
+var wordTimeout = null;
+var feedbackTimeout = null;
+var gameActive = true;
+// Shuffle word list for each game
+var gameWords = shuffle(wordList.slice());
+// Character
+var character = new Character();
+character.x = 2048 / 2;
+character.y = 2732 - 400;
+game.addChild(character);
+// Word bubble
+var wordBubble = new WordBubble();
+wordBubble.x = character.x;
+wordBubble.y = character.y - 180;
+game.addChild(wordBubble);
+// Score text
+var scoreTxt = new Text2('0', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Level text
+var levelTxt = new Text2('Seviye 1', {
+ size: 70,
+ fill: 0x00E0FF
+});
+levelTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(levelTxt);
+levelTxt.y = 120;
+// Feedback text (centered)
+var feedbackTxt = new Text2('', {
+ size: 120,
+ fill: 0x00FF00
+});
+feedbackTxt.anchor.set(0.5, 0.5);
+LK.gui.center.addChild(feedbackTxt);
+// Helper: Set new word
+function setNewWord() {
+ if (currentWordIndex >= gameWords.length) {
+ LK.showYouWin();
+ return;
+ }
+ currentWord = gameWords[currentWordIndex];
+ wordBubble.textObj.setText(currentWord);
+ wordBubble.textObj.style.fill = "#fff700";
+ lastHeard = '';
+ isListening = true;
+ character.setIdle();
+ feedbackTxt.setText('');
+ // Set timeout for word (5 seconds)
+ if (wordTimeout) LK.clearTimeout(wordTimeout);
+ wordTimeout = LK.setTimeout(function () {
+ if (!gameActive) return;
+ isListening = false;
+ feedbackTxt.setText('Süre doldu!');
+ feedbackTxt.style.fill = "#ff3333";
+ character.setIdle();
+ LK.effects.flashObject(character, 0xff0000, 600);
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 1200);
+ }, 5000);
+}
+// Helper: Show feedback
+function showFeedback(text, color) {
+ feedbackTxt.setText(text);
+ feedbackTxt.style.fill = color;
+ if (feedbackTimeout) LK.clearTimeout(feedbackTimeout);
+ feedbackTimeout = LK.setTimeout(function () {
+ feedbackTxt.setText('');
+ }, 1000);
+}
+// Helper: Next word
+function nextWord() {
+ currentWordIndex++;
+ if (currentWordIndex % wordsPerLevel === 0) {
+ level++;
+ levelTxt.setText('Seviye ' + level);
+ // Increase difficulty: reduce time per word
+ }
+ setNewWord();
+}
+// Helper: Normalize string (lowercase, Turkish chars)
+function normalize(str) {
+ return (str || '').toLocaleLowerCase('tr-TR').replace(/[^a-zçğıöşü]/g, '');
+}
+// Main voice check loop
+game.update = function () {
+ if (!gameActive) return;
+ // Only check if listening for word
+ if (!isListening) return;
+ // Use facekit.volume as a proxy for "speaking"
+ if (facekit.volume > 0.2) {
+ // Simulate "heard" word by using pitch as a randomizer (since we can't do real speech-to-text)
+ // In a real implementation, here would be the speech recognition result
+ // For MVP, we simulate: if user makes sound, we "accept" as correct with 70% chance
+ if (lastHeard !== currentWord) {
+ var correct = Math.random() < 0.7;
+ if (correct) {
+ lastHeard = currentWord;
+ isListening = false;
+ LK.clearTimeout(wordTimeout);
+ score++;
+ LK.setScore(score);
+ scoreTxt.setText(score);
+ wordBubble.textObj.style.fill = "#00ff00";
+ character.setActive();
+ LK.effects.flashObject(character, 0x00ff00, 400);
+ showFeedback('Doğru!', "#00ff00");
+ LK.setTimeout(function () {
+ character.setIdle();
+ nextWord();
+ }, 800);
+ } else {
+ lastHeard = 'wrong';
+ isListening = false;
+ LK.clearTimeout(wordTimeout);
+ wordBubble.textObj.style.fill = "#ff3333";
+ character.setIdle();
+ LK.effects.flashObject(character, 0xff0000, 400);
+ showFeedback('Yanlış!', "#ff3333");
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 900);
+ }
+ }
+ }
+};
+// Start game
+setNewWord();
\ No newline at end of file