/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var CareButton = Container.expand(function (buttonType, color) {
var self = Container.call(this);
var buttonGraphics = self.attachAsset(buttonType + 'Button', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(buttonType.toUpperCase(), {
size: 48,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.down = function (x, y, obj) {
tween(buttonGraphics, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
tween(buttonText, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
};
self.up = function (x, y, obj) {
tween(buttonGraphics, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100
});
tween(buttonText, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100
});
if (buttonType === 'feed') {
pet.feed();
LK.getSound('feed').play();
} else if (buttonType === 'play') {
pet.play();
LK.getSound('play').play();
} else if (buttonType === 'sleep') {
pet.rest();
LK.getSound('sleep').play();
}
};
return self;
});
var MeterDisplay = Container.expand(function (meterType, color) {
var self = Container.call(this);
var meterBackground = self.attachAsset(meterType + 'Meter', {
anchorX: 0,
anchorY: 0.5,
alpha: 0.3
});
var meterFill = self.attachAsset(meterType + 'Meter', {
anchorX: 0,
anchorY: 0.5
});
self.updateMeter = function (value) {
var percentage = Math.max(0, value / 100);
meterFill.width = 600 * percentage;
// Change color based on level
if (value <= 20) {
meterFill.tint = 0xff0000; // Red
} else if (value <= 50) {
meterFill.tint = 0xff6600; // Orange
} else {
meterFill.tint = color; // Original color
}
};
return self;
});
var Tamagochi = Container.expand(function () {
var self = Container.call(this);
var petGraphics = self.attachAsset('pet', {
anchorX: 0.5,
anchorY: 0.5
});
self.hungerLevel = 100;
self.happinessLevel = 100;
self.energyLevel = 100;
self.update = function () {
// Decrease all meters gradually (about 3 points every 1 second at 60fps)
if (LK.ticks % 60 === 0) {
self.hungerLevel = Math.max(0, self.hungerLevel - 3);
self.happinessLevel = Math.max(0, self.happinessLevel - 3);
self.energyLevel = Math.max(0, self.energyLevel - 3);
}
// Change pet appearance based on lowest need
var lowestLevel = Math.min(self.hungerLevel, self.happinessLevel, self.energyLevel);
if (lowestLevel <= 20) {
petGraphics.tint = 0xff0000; // Red when critical
} else if (lowestLevel <= 50) {
petGraphics.tint = 0xffaa00; // Orange when low
} else {
petGraphics.tint = 0xffffff; // Normal color
}
// Animate pet slightly
if (LK.ticks % 180 === 0) {
tween(petGraphics, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 300,
easing: tween.easeOut
});
}
if (LK.ticks % 180 === 30) {
tween(petGraphics, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 300,
easing: tween.easeOut
});
}
};
self.feed = function () {
self.hungerLevel = Math.min(100, self.hungerLevel + 4);
// Happy bounce animation
tween(petGraphics, {
scaleY: 1.3
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(petGraphics, {
scaleY: 1.0
}, {
duration: 200,
easing: tween.easeOut
});
}
});
};
self.play = function () {
self.happinessLevel = Math.min(100, self.happinessLevel + 4);
// Wiggle animation
tween(petGraphics, {
rotation: 0.2
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(petGraphics, {
rotation: -0.2
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(petGraphics, {
rotation: 0
}, {
duration: 100,
easing: tween.easeOut
});
}
});
}
});
};
self.rest = function () {
self.energyLevel = Math.min(100, self.energyLevel + 4);
// Gentle pulse animation
tween(petGraphics, {
alpha: 0.7
}, {
duration: 400,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(petGraphics, {
alpha: 1.0
}, {
duration: 400,
easing: tween.easeOut
});
}
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var survivalTime = 0;
// Create pet
var pet = game.addChild(new Tamagochi());
pet.x = 2048 / 2;
pet.y = 800;
// Create meters
var hungerMeter = game.addChild(new MeterDisplay('hunger', 0x4CAF50));
hungerMeter.x = 824;
hungerMeter.y = 1200;
var happinessMeter = game.addChild(new MeterDisplay('happiness', 0x2196F3));
happinessMeter.x = 824;
happinessMeter.y = 1280;
var energyMeter = game.addChild(new MeterDisplay('energy', 0xFF9800));
energyMeter.x = 824;
energyMeter.y = 1360;
// Create meter labels
var hungerLabel = new Text2('HUNGER', {
size: 48,
fill: 0x333333
});
hungerLabel.anchor.set(1, 0.5);
hungerLabel.x = 800;
hungerLabel.y = 1200;
game.addChild(hungerLabel);
var happinessLabel = new Text2('HAPPY', {
size: 48,
fill: 0x333333
});
happinessLabel.anchor.set(1, 0.5);
happinessLabel.x = 800;
happinessLabel.y = 1280;
game.addChild(happinessLabel);
var energyLabel = new Text2('ENERGY', {
size: 48,
fill: 0x333333
});
energyLabel.anchor.set(1, 0.5);
energyLabel.x = 800;
energyLabel.y = 1360;
game.addChild(energyLabel);
// Create care buttons
var feedButton = game.addChild(new CareButton('feed', 0x4CAF50));
feedButton.x = 600;
feedButton.y = 1600;
var playButton = game.addChild(new CareButton('play', 0x2196F3));
playButton.x = 1024;
playButton.y = 1600;
var sleepButton = game.addChild(new CareButton('sleep', 0xFF9800));
sleepButton.x = 1448;
sleepButton.y = 1600;
// Score display
var scoreText = new Text2('Time: 0s', {
size: 64,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Pet name display
var petNameText = new Text2('MY TAMAGOCHI', {
size: 80,
fill: 0xFFFFFF
});
petNameText.anchor.set(0.5, 0.5);
petNameText.x = 2048 / 2;
petNameText.y = 400;
game.addChild(petNameText);
game.update = function () {
// Update survival time (increment every second)
if (LK.ticks % 60 === 0) {
survivalTime++;
LK.setScore(survivalTime);
scoreText.setText('Time: ' + survivalTime + 's');
}
// Update meter displays
hungerMeter.updateMeter(pet.hungerLevel);
happinessMeter.updateMeter(pet.happinessLevel);
energyMeter.updateMeter(pet.energyLevel);
// Check for game over
if (pet.hungerLevel <= 0 || pet.happinessLevel <= 0 || pet.energyLevel <= 0) {
LK.showGameOver();
}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var CareButton = Container.expand(function (buttonType, color) {
var self = Container.call(this);
var buttonGraphics = self.attachAsset(buttonType + 'Button', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(buttonType.toUpperCase(), {
size: 48,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.down = function (x, y, obj) {
tween(buttonGraphics, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
tween(buttonText, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
};
self.up = function (x, y, obj) {
tween(buttonGraphics, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100
});
tween(buttonText, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100
});
if (buttonType === 'feed') {
pet.feed();
LK.getSound('feed').play();
} else if (buttonType === 'play') {
pet.play();
LK.getSound('play').play();
} else if (buttonType === 'sleep') {
pet.rest();
LK.getSound('sleep').play();
}
};
return self;
});
var MeterDisplay = Container.expand(function (meterType, color) {
var self = Container.call(this);
var meterBackground = self.attachAsset(meterType + 'Meter', {
anchorX: 0,
anchorY: 0.5,
alpha: 0.3
});
var meterFill = self.attachAsset(meterType + 'Meter', {
anchorX: 0,
anchorY: 0.5
});
self.updateMeter = function (value) {
var percentage = Math.max(0, value / 100);
meterFill.width = 600 * percentage;
// Change color based on level
if (value <= 20) {
meterFill.tint = 0xff0000; // Red
} else if (value <= 50) {
meterFill.tint = 0xff6600; // Orange
} else {
meterFill.tint = color; // Original color
}
};
return self;
});
var Tamagochi = Container.expand(function () {
var self = Container.call(this);
var petGraphics = self.attachAsset('pet', {
anchorX: 0.5,
anchorY: 0.5
});
self.hungerLevel = 100;
self.happinessLevel = 100;
self.energyLevel = 100;
self.update = function () {
// Decrease all meters gradually (about 3 points every 1 second at 60fps)
if (LK.ticks % 60 === 0) {
self.hungerLevel = Math.max(0, self.hungerLevel - 3);
self.happinessLevel = Math.max(0, self.happinessLevel - 3);
self.energyLevel = Math.max(0, self.energyLevel - 3);
}
// Change pet appearance based on lowest need
var lowestLevel = Math.min(self.hungerLevel, self.happinessLevel, self.energyLevel);
if (lowestLevel <= 20) {
petGraphics.tint = 0xff0000; // Red when critical
} else if (lowestLevel <= 50) {
petGraphics.tint = 0xffaa00; // Orange when low
} else {
petGraphics.tint = 0xffffff; // Normal color
}
// Animate pet slightly
if (LK.ticks % 180 === 0) {
tween(petGraphics, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 300,
easing: tween.easeOut
});
}
if (LK.ticks % 180 === 30) {
tween(petGraphics, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 300,
easing: tween.easeOut
});
}
};
self.feed = function () {
self.hungerLevel = Math.min(100, self.hungerLevel + 4);
// Happy bounce animation
tween(petGraphics, {
scaleY: 1.3
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(petGraphics, {
scaleY: 1.0
}, {
duration: 200,
easing: tween.easeOut
});
}
});
};
self.play = function () {
self.happinessLevel = Math.min(100, self.happinessLevel + 4);
// Wiggle animation
tween(petGraphics, {
rotation: 0.2
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(petGraphics, {
rotation: -0.2
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(petGraphics, {
rotation: 0
}, {
duration: 100,
easing: tween.easeOut
});
}
});
}
});
};
self.rest = function () {
self.energyLevel = Math.min(100, self.energyLevel + 4);
// Gentle pulse animation
tween(petGraphics, {
alpha: 0.7
}, {
duration: 400,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(petGraphics, {
alpha: 1.0
}, {
duration: 400,
easing: tween.easeOut
});
}
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var survivalTime = 0;
// Create pet
var pet = game.addChild(new Tamagochi());
pet.x = 2048 / 2;
pet.y = 800;
// Create meters
var hungerMeter = game.addChild(new MeterDisplay('hunger', 0x4CAF50));
hungerMeter.x = 824;
hungerMeter.y = 1200;
var happinessMeter = game.addChild(new MeterDisplay('happiness', 0x2196F3));
happinessMeter.x = 824;
happinessMeter.y = 1280;
var energyMeter = game.addChild(new MeterDisplay('energy', 0xFF9800));
energyMeter.x = 824;
energyMeter.y = 1360;
// Create meter labels
var hungerLabel = new Text2('HUNGER', {
size: 48,
fill: 0x333333
});
hungerLabel.anchor.set(1, 0.5);
hungerLabel.x = 800;
hungerLabel.y = 1200;
game.addChild(hungerLabel);
var happinessLabel = new Text2('HAPPY', {
size: 48,
fill: 0x333333
});
happinessLabel.anchor.set(1, 0.5);
happinessLabel.x = 800;
happinessLabel.y = 1280;
game.addChild(happinessLabel);
var energyLabel = new Text2('ENERGY', {
size: 48,
fill: 0x333333
});
energyLabel.anchor.set(1, 0.5);
energyLabel.x = 800;
energyLabel.y = 1360;
game.addChild(energyLabel);
// Create care buttons
var feedButton = game.addChild(new CareButton('feed', 0x4CAF50));
feedButton.x = 600;
feedButton.y = 1600;
var playButton = game.addChild(new CareButton('play', 0x2196F3));
playButton.x = 1024;
playButton.y = 1600;
var sleepButton = game.addChild(new CareButton('sleep', 0xFF9800));
sleepButton.x = 1448;
sleepButton.y = 1600;
// Score display
var scoreText = new Text2('Time: 0s', {
size: 64,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Pet name display
var petNameText = new Text2('MY TAMAGOCHI', {
size: 80,
fill: 0xFFFFFF
});
petNameText.anchor.set(0.5, 0.5);
petNameText.x = 2048 / 2;
petNameText.y = 400;
game.addChild(petNameText);
game.update = function () {
// Update survival time (increment every second)
if (LK.ticks % 60 === 0) {
survivalTime++;
LK.setScore(survivalTime);
scoreText.setText('Time: ' + survivalTime + 's');
}
// Update meter displays
hungerMeter.updateMeter(pet.hungerLevel);
happinessMeter.updateMeter(pet.happinessLevel);
energyMeter.updateMeter(pet.energyLevel);
// Check for game over
if (pet.hungerLevel <= 0 || pet.happinessLevel <= 0 || pet.energyLevel <= 0) {
LK.showGameOver();
}
};