/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Cat = Container.expand(function () {
var self = Container.call(this);
self.mood = 'happy';
self.lastResponse = '';
// Cat body
var body = self.attachAsset('cat_body', {
anchorX: 0.5,
anchorY: 1
});
// Cat head
var head = self.attachAsset('cat_head', {
anchorX: 0.5,
anchorY: 0.5
});
head.y = -200;
// Cat ears
var leftEar = self.attachAsset('cat_ear', {
anchorX: 0.5,
anchorY: 1
});
leftEar.x = -60;
leftEar.y = -280;
var rightEar = self.attachAsset('cat_ear', {
anchorX: 0.5,
anchorY: 1
});
rightEar.x = 60;
rightEar.y = -280;
// Cat eyes
var leftEye = self.attachAsset('cat_eye', {
anchorX: 0.5,
anchorY: 0.5
});
leftEye.x = -40;
leftEye.y = -220;
var rightEye = self.attachAsset('cat_eye', {
anchorX: 0.5,
anchorY: 0.5
});
rightEye.x = 40;
rightEye.y = -220;
// Cat nose
var nose = self.attachAsset('cat_nose', {
anchorX: 0.5,
anchorY: 0.5
});
nose.y = -180;
self.animate = function (type) {
if (type === 'happy') {
tween(head, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 300,
easing: tween.easeOut
});
tween(head, {
scaleX: 1,
scaleY: 1
}, {
duration: 300,
easing: tween.easeOut
});
LK.getSound('purr').play();
} else if (type === 'excited') {
tween(self, {
y: self.y - 20
}, {
duration: 200,
easing: tween.easeOut
});
tween(self, {
y: self.y
}, {
duration: 200,
easing: tween.easeIn
});
LK.getSound('meow1').play();
} else if (type === 'thinking') {
tween(head, {
rotation: 0.2
}, {
duration: 500,
easing: tween.easeInOut
});
tween(head, {
rotation: -0.2
}, {
duration: 500,
easing: tween.easeInOut
});
tween(head, {
rotation: 0
}, {
duration: 500,
easing: tween.easeInOut
});
}
};
self.respond = function (message) {
var response = generateResponse(message);
self.lastResponse = response;
// Determine animation based on message content
var lowerMsg = message.toLowerCase();
if (lowerMsg.includes('good') || lowerMsg.includes('nice') || lowerMsg.includes('love')) {
self.animate('happy');
} else if (lowerMsg.includes('play') || lowerMsg.includes('fun') || lowerMsg.includes('game')) {
self.animate('excited');
} else {
self.animate('thinking');
}
showChatBubble(response);
};
return self;
});
var ChatBubble = Container.expand(function () {
var self = Container.call(this);
var bubble = self.attachAsset('chat_bubble', {
anchorX: 0.5,
anchorY: 1
});
var text = new Text2('', {
size: 30,
fill: 0xFFFFFF
});
text.anchor.set(0.5, 0.5);
text.y = -50;
self.addChild(text);
self.alpha = 0;
self.show = function (message) {
text.setText(message);
// Adjust bubble size based on text length
var textWidth = text.width + 40;
var textHeight = text.height + 40;
bubble.width = Math.max(textWidth, 200);
bubble.height = Math.max(textHeight, 60);
self.alpha = 0;
tween(self, {
alpha: 1
}, {
duration: 300,
easing: tween.easeOut
});
LK.setTimeout(function () {
tween(self, {
alpha: 0
}, {
duration: 500,
easing: tween.easeIn
});
}, 3000);
};
return self;
});
var Key = Container.expand(function (letter, x, y) {
var self = Container.call(this);
self.letter = letter;
self.isPressed = false;
var keyBg = self.attachAsset('key_normal', {
anchorX: 0.5,
anchorY: 0.5
});
var keyText = new Text2(letter, {
size: 40,
fill: 0x2C3E50
});
keyText.anchor.set(0.5, 0.5);
self.addChild(keyText);
self.x = x;
self.y = y;
self.press = function () {
if (self.isPressed) return;
self.isPressed = true;
keyBg.removeFromParent();
keyBg = self.attachAsset('key_pressed', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChildAt(keyBg, 0);
LK.getSound('keypress').play();
LK.setTimeout(function () {
self.release();
}, 150);
};
self.release = function () {
self.isPressed = false;
keyBg.removeFromParent();
keyBg = self.attachAsset('key_normal', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChildAt(keyBg, 0);
};
self.down = function (x, y, obj) {
self.press();
if (self.letter === 'SEND') {
sendMessage();
} else if (self.letter === 'DEL') {
deleteLastChar();
} else if (self.letter === 'SPACE') {
addToMessage(' ');
} else {
addToMessage(self.letter);
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x85C1E9
});
/****
* Game Code
****/
var currentMessage = '';
var messageHistory = [];
var keys = [];
var cat;
var chatBubble;
var messageDisplay;
// Keyboard layout
var keyboardLayout = [['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'], ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'], ['Z', 'X', 'C', 'V', 'B', 'N', 'M', 'DEL'], ['SPACE', 'SEND']];
// Create keyboard background
var keyboardBg = game.attachAsset('keyboard_bg', {
anchorX: 0.5,
anchorY: 1
});
keyboardBg.x = 1024;
keyboardBg.y = 2732;
// Create keyboard keys
var startY = 2732 - 380;
for (var row = 0; row < keyboardLayout.length; row++) {
var rowKeys = keyboardLayout[row];
var keyY = startY + row * 90;
var totalWidth = rowKeys.length * 130;
var startX = (2048 - totalWidth) / 2 + 65;
for (var col = 0; col < rowKeys.length; col++) {
var keyX = startX + col * 130;
var key = new Key(rowKeys[col], keyX, keyY);
if (rowKeys[col] === 'SPACE') {
key.width = 300;
keyX = 1024;
key.x = keyX;
} else if (rowKeys[col] === 'SEND') {
keyX = 1024 + 200;
key.x = keyX;
}
keys.push(key);
game.addChild(key);
}
}
// Create cat
cat = new Cat();
cat.x = 1024;
cat.y = 1200;
game.addChild(cat);
// Create chat bubble
chatBubble = new ChatBubble();
chatBubble.x = 1024;
chatBubble.y = 800;
game.addChild(chatBubble);
// Create message display
messageDisplay = new Text2('Type a message...', {
size: 40,
fill: 0x2C3E50
});
messageDisplay.anchor.set(0.5, 0.5);
messageDisplay.x = 1024;
messageDisplay.y = 1400;
game.addChild(messageDisplay);
function addToMessage(_char) {
if (currentMessage.length < 50) {
currentMessage += _char;
updateMessageDisplay();
}
}
function deleteLastChar() {
if (currentMessage.length > 0) {
currentMessage = currentMessage.slice(0, -1);
updateMessageDisplay();
}
}
function updateMessageDisplay() {
if (currentMessage.length === 0) {
messageDisplay.setText('Type a message...');
messageDisplay.alpha = 0.6;
} else {
messageDisplay.setText(currentMessage);
messageDisplay.alpha = 1;
}
}
function sendMessage() {
if (currentMessage.length === 0) return;
messageHistory.push(currentMessage);
cat.respond(currentMessage);
currentMessage = '';
updateMessageDisplay();
}
function generateResponse(message) {
var lowerMsg = message.toLowerCase();
var responses = [];
if (lowerMsg.includes('hello') || lowerMsg.includes('hi')) {
responses = ['Meow! Hello there!', 'Hi! Nice to meet you!', 'Purr... hello friend!'];
} else if (lowerMsg.includes('how are you')) {
responses = ['I\'m purr-fect!', 'Feeling great, meow!', 'I\'m having a paw-some day!'];
} else if (lowerMsg.includes('play') || lowerMsg.includes('game')) {
responses = ['Let\'s play! Meow!', 'I love games! What shall we play?', 'Pounce! I\'m ready to play!'];
} else if (lowerMsg.includes('food') || lowerMsg.includes('eat')) {
responses = ['Yum! I love tuna!', 'Meow! Food sounds great!', 'Purr... I\'m always hungry!'];
} else if (lowerMsg.includes('love') || lowerMsg.includes('like')) {
responses = ['Aww, I love you too!', 'Purr purr purr!', 'You make me so happy!'];
} else if (lowerMsg.includes('cat') || lowerMsg.includes('kitty')) {
responses = ['Yes, I\'m your virtual kitty!', 'Meow! That\'s me!', 'I\'m the best cat ever!'];
} else if (lowerMsg.includes('sleep') || lowerMsg.includes('tired')) {
responses = ['Zzz... cats love naps!', 'I could sleep for 16 hours!', 'Time for a cat nap!'];
} else if (lowerMsg.includes('funny') || lowerMsg.includes('joke')) {
responses = ['Why don\'t cats play poker? Too many cheetahs!', 'What do you call a cat magician? Abra-ca-tabby!', 'Meow meow! That\'s funny!'];
} else {
responses = ['Meow! Tell me more!', 'Interesting! Purr...', 'I understand! Meow!', 'That\'s cool! Purr purr!', 'Fascinating! What else?'];
}
return responses[Math.floor(Math.random() * responses.length)];
}
function showChatBubble(message) {
chatBubble.show(message);
}
// Make cat blink occasionally
var blinkTimer = 0;
game.update = function () {
blinkTimer++;
if (blinkTimer % 180 === 0) {
// Every 3 seconds
cat.animate('thinking');
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,346 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Cat = Container.expand(function () {
+ var self = Container.call(this);
+ self.mood = 'happy';
+ self.lastResponse = '';
+ // Cat body
+ var body = self.attachAsset('cat_body', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ // Cat head
+ var head = self.attachAsset('cat_head', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ head.y = -200;
+ // Cat ears
+ var leftEar = self.attachAsset('cat_ear', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ leftEar.x = -60;
+ leftEar.y = -280;
+ var rightEar = self.attachAsset('cat_ear', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ rightEar.x = 60;
+ rightEar.y = -280;
+ // Cat eyes
+ var leftEye = self.attachAsset('cat_eye', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ leftEye.x = -40;
+ leftEye.y = -220;
+ var rightEye = self.attachAsset('cat_eye', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ rightEye.x = 40;
+ rightEye.y = -220;
+ // Cat nose
+ var nose = self.attachAsset('cat_nose', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ nose.y = -180;
+ self.animate = function (type) {
+ if (type === 'happy') {
+ tween(head, {
+ scaleX: 1.1,
+ scaleY: 1.1
+ }, {
+ duration: 300,
+ easing: tween.easeOut
+ });
+ tween(head, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 300,
+ easing: tween.easeOut
+ });
+ LK.getSound('purr').play();
+ } else if (type === 'excited') {
+ tween(self, {
+ y: self.y - 20
+ }, {
+ duration: 200,
+ easing: tween.easeOut
+ });
+ tween(self, {
+ y: self.y
+ }, {
+ duration: 200,
+ easing: tween.easeIn
+ });
+ LK.getSound('meow1').play();
+ } else if (type === 'thinking') {
+ tween(head, {
+ rotation: 0.2
+ }, {
+ duration: 500,
+ easing: tween.easeInOut
+ });
+ tween(head, {
+ rotation: -0.2
+ }, {
+ duration: 500,
+ easing: tween.easeInOut
+ });
+ tween(head, {
+ rotation: 0
+ }, {
+ duration: 500,
+ easing: tween.easeInOut
+ });
+ }
+ };
+ self.respond = function (message) {
+ var response = generateResponse(message);
+ self.lastResponse = response;
+ // Determine animation based on message content
+ var lowerMsg = message.toLowerCase();
+ if (lowerMsg.includes('good') || lowerMsg.includes('nice') || lowerMsg.includes('love')) {
+ self.animate('happy');
+ } else if (lowerMsg.includes('play') || lowerMsg.includes('fun') || lowerMsg.includes('game')) {
+ self.animate('excited');
+ } else {
+ self.animate('thinking');
+ }
+ showChatBubble(response);
+ };
+ return self;
+});
+var ChatBubble = Container.expand(function () {
+ var self = Container.call(this);
+ var bubble = self.attachAsset('chat_bubble', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ var text = new Text2('', {
+ size: 30,
+ fill: 0xFFFFFF
+ });
+ text.anchor.set(0.5, 0.5);
+ text.y = -50;
+ self.addChild(text);
+ self.alpha = 0;
+ self.show = function (message) {
+ text.setText(message);
+ // Adjust bubble size based on text length
+ var textWidth = text.width + 40;
+ var textHeight = text.height + 40;
+ bubble.width = Math.max(textWidth, 200);
+ bubble.height = Math.max(textHeight, 60);
+ self.alpha = 0;
+ tween(self, {
+ alpha: 1
+ }, {
+ duration: 300,
+ easing: tween.easeOut
+ });
+ LK.setTimeout(function () {
+ tween(self, {
+ alpha: 0
+ }, {
+ duration: 500,
+ easing: tween.easeIn
+ });
+ }, 3000);
+ };
+ return self;
+});
+var Key = Container.expand(function (letter, x, y) {
+ var self = Container.call(this);
+ self.letter = letter;
+ self.isPressed = false;
+ var keyBg = self.attachAsset('key_normal', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var keyText = new Text2(letter, {
+ size: 40,
+ fill: 0x2C3E50
+ });
+ keyText.anchor.set(0.5, 0.5);
+ self.addChild(keyText);
+ self.x = x;
+ self.y = y;
+ self.press = function () {
+ if (self.isPressed) return;
+ self.isPressed = true;
+ keyBg.removeFromParent();
+ keyBg = self.attachAsset('key_pressed', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.addChildAt(keyBg, 0);
+ LK.getSound('keypress').play();
+ LK.setTimeout(function () {
+ self.release();
+ }, 150);
+ };
+ self.release = function () {
+ self.isPressed = false;
+ keyBg.removeFromParent();
+ keyBg = self.attachAsset('key_normal', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.addChildAt(keyBg, 0);
+ };
+ self.down = function (x, y, obj) {
+ self.press();
+ if (self.letter === 'SEND') {
+ sendMessage();
+ } else if (self.letter === 'DEL') {
+ deleteLastChar();
+ } else if (self.letter === 'SPACE') {
+ addToMessage(' ');
+ } else {
+ addToMessage(self.letter);
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x85C1E9
+});
+
+/****
+* Game Code
+****/
+var currentMessage = '';
+var messageHistory = [];
+var keys = [];
+var cat;
+var chatBubble;
+var messageDisplay;
+// Keyboard layout
+var keyboardLayout = [['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'], ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'], ['Z', 'X', 'C', 'V', 'B', 'N', 'M', 'DEL'], ['SPACE', 'SEND']];
+// Create keyboard background
+var keyboardBg = game.attachAsset('keyboard_bg', {
+ anchorX: 0.5,
+ anchorY: 1
+});
+keyboardBg.x = 1024;
+keyboardBg.y = 2732;
+// Create keyboard keys
+var startY = 2732 - 380;
+for (var row = 0; row < keyboardLayout.length; row++) {
+ var rowKeys = keyboardLayout[row];
+ var keyY = startY + row * 90;
+ var totalWidth = rowKeys.length * 130;
+ var startX = (2048 - totalWidth) / 2 + 65;
+ for (var col = 0; col < rowKeys.length; col++) {
+ var keyX = startX + col * 130;
+ var key = new Key(rowKeys[col], keyX, keyY);
+ if (rowKeys[col] === 'SPACE') {
+ key.width = 300;
+ keyX = 1024;
+ key.x = keyX;
+ } else if (rowKeys[col] === 'SEND') {
+ keyX = 1024 + 200;
+ key.x = keyX;
+ }
+ keys.push(key);
+ game.addChild(key);
+ }
+}
+// Create cat
+cat = new Cat();
+cat.x = 1024;
+cat.y = 1200;
+game.addChild(cat);
+// Create chat bubble
+chatBubble = new ChatBubble();
+chatBubble.x = 1024;
+chatBubble.y = 800;
+game.addChild(chatBubble);
+// Create message display
+messageDisplay = new Text2('Type a message...', {
+ size: 40,
+ fill: 0x2C3E50
+});
+messageDisplay.anchor.set(0.5, 0.5);
+messageDisplay.x = 1024;
+messageDisplay.y = 1400;
+game.addChild(messageDisplay);
+function addToMessage(_char) {
+ if (currentMessage.length < 50) {
+ currentMessage += _char;
+ updateMessageDisplay();
+ }
+}
+function deleteLastChar() {
+ if (currentMessage.length > 0) {
+ currentMessage = currentMessage.slice(0, -1);
+ updateMessageDisplay();
+ }
+}
+function updateMessageDisplay() {
+ if (currentMessage.length === 0) {
+ messageDisplay.setText('Type a message...');
+ messageDisplay.alpha = 0.6;
+ } else {
+ messageDisplay.setText(currentMessage);
+ messageDisplay.alpha = 1;
+ }
+}
+function sendMessage() {
+ if (currentMessage.length === 0) return;
+ messageHistory.push(currentMessage);
+ cat.respond(currentMessage);
+ currentMessage = '';
+ updateMessageDisplay();
+}
+function generateResponse(message) {
+ var lowerMsg = message.toLowerCase();
+ var responses = [];
+ if (lowerMsg.includes('hello') || lowerMsg.includes('hi')) {
+ responses = ['Meow! Hello there!', 'Hi! Nice to meet you!', 'Purr... hello friend!'];
+ } else if (lowerMsg.includes('how are you')) {
+ responses = ['I\'m purr-fect!', 'Feeling great, meow!', 'I\'m having a paw-some day!'];
+ } else if (lowerMsg.includes('play') || lowerMsg.includes('game')) {
+ responses = ['Let\'s play! Meow!', 'I love games! What shall we play?', 'Pounce! I\'m ready to play!'];
+ } else if (lowerMsg.includes('food') || lowerMsg.includes('eat')) {
+ responses = ['Yum! I love tuna!', 'Meow! Food sounds great!', 'Purr... I\'m always hungry!'];
+ } else if (lowerMsg.includes('love') || lowerMsg.includes('like')) {
+ responses = ['Aww, I love you too!', 'Purr purr purr!', 'You make me so happy!'];
+ } else if (lowerMsg.includes('cat') || lowerMsg.includes('kitty')) {
+ responses = ['Yes, I\'m your virtual kitty!', 'Meow! That\'s me!', 'I\'m the best cat ever!'];
+ } else if (lowerMsg.includes('sleep') || lowerMsg.includes('tired')) {
+ responses = ['Zzz... cats love naps!', 'I could sleep for 16 hours!', 'Time for a cat nap!'];
+ } else if (lowerMsg.includes('funny') || lowerMsg.includes('joke')) {
+ responses = ['Why don\'t cats play poker? Too many cheetahs!', 'What do you call a cat magician? Abra-ca-tabby!', 'Meow meow! That\'s funny!'];
+ } else {
+ responses = ['Meow! Tell me more!', 'Interesting! Purr...', 'I understand! Meow!', 'That\'s cool! Purr purr!', 'Fascinating! What else?'];
+ }
+ return responses[Math.floor(Math.random() * responses.length)];
+}
+function showChatBubble(message) {
+ chatBubble.show(message);
+}
+// Make cat blink occasionally
+var blinkTimer = 0;
+game.update = function () {
+ blinkTimer++;
+ if (blinkTimer % 180 === 0) {
+ // Every 3 seconds
+ cat.animate('thinking');
+ }
+};
\ No newline at end of file