/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Character = Container.expand(function (characterType) { var self = Container.call(this); var graphics = self.attachAsset(characterType, { anchorX: 0.5, anchorY: 0.5 }); self.animationTimer = 0; self.bobDirection = 1; self.update = function () { // Idle bobbing animation self.animationTimer += 0.05; graphics.y = Math.sin(self.animationTimer) * 5; // Slight scale breathing effect var breathScale = 1 + Math.sin(self.animationTimer * 0.5) * 0.05; graphics.scaleX = breathScale; graphics.scaleY = breathScale; }; self.down = function (x, y, obj) { // Character interaction tween(graphics, { rotation: 0.2 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { tween(graphics, { rotation: 0 }, { duration: 200, easing: tween.easeIn }); } }); LK.getSound('pop').play(); }; return self; }); var House = Container.expand(function (houseType, characterType) { var self = Container.call(this); // House background var background = self.attachAsset(houseType, { anchorX: 0.5, anchorY: 0.5 }); // Character var character = self.addChild(new Character(characterType)); character.x = 1024; character.y = 600; // Furniture array self.furniture = []; self.addFurniture = function (itemType, x, y) { var item = self.addChild(new InteractiveItem(itemType)); item.x = x; item.y = y; self.furniture.push(item); }; return self; }); var InteractiveItem = Container.expand(function (itemType, color, width, height) { var self = Container.call(this); var graphics = self.attachAsset(itemType, { anchorX: 0.5, anchorY: 0.5 }); self.originalScale = 1; self.isAnimating = false; self.clickCount = 0; self.down = function (x, y, obj) { if (self.isAnimating) return; self.isAnimating = true; self.clickCount++; // Scale animation tween(graphics, { scaleX: 1.2, scaleY: 1.2 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { tween(graphics, { scaleX: self.originalScale, scaleY: self.originalScale }, { duration: 150, easing: tween.easeIn, onFinish: function onFinish() { self.isAnimating = false; } }); } }); // Special interactions for multiple clicks if (self.clickCount >= 3) { self.clickCount = 0; self.triggerSpecialEffect(); } LK.getSound('click').play(); }; self.triggerSpecialEffect = function () { // Tint flash effect var originalTint = graphics.tint; graphics.tint = 0xFFFFFF; tween(graphics, { tint: originalTint }, { duration: 500, easing: tween.easeOut }); LK.getSound('chime').play(); }; return self; }); var MenuButton = Container.expand(function (text, houseType) { var self = Container.call(this); var bg = self.attachAsset('menuButton', { anchorX: 0.5, anchorY: 0.5 }); var label = new Text2(text, { size: 40, fill: '#FFFFFF' }); label.anchor.set(0.5, 0.5); self.addChild(label); self.houseType = houseType; self.down = function (x, y, obj) { tween(bg, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(bg, { scaleX: 1, scaleY: 1 }, { duration: 100, easing: tween.easeIn }); } }); if (self.houseType) { showHouse(self.houseType); } else { showMainMenu(); } LK.getSound('click').play(); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Sound effects // Menu elements // Furniture items // Characters // House backgrounds var currentState = 'menu'; var currentHouse = null; var menuContainer = null; var backButton = null; // House configurations var houseConfigs = { 'pangoHouse': { character: 'pango', furniture: [{ type: 'sofa', x: 400, y: 900 }, { type: 'table', x: 700, y: 1000 }, { type: 'lamp', x: 200, y: 700 }, { type: 'bookshelf', x: 1600, y: 800 }, { type: 'plant', x: 1800, y: 1100 }] }, 'piggyHouse': { character: 'piggy', furniture: [{ type: 'bed', x: 300, y: 800 }, { type: 'chair', x: 600, y: 1000 }, { type: 'table', x: 1000, y: 900 }, { type: 'clock', x: 1500, y: 600 }, { type: 'plant', x: 1700, y: 1000 }] }, 'rabbitHouse': { character: 'rabbit', furniture: [{ type: 'sofa', x: 500, y: 1000 }, { type: 'bookshelf', x: 1400, y: 700 }, { type: 'lamp', x: 800, y: 600 }, { type: 'table', x: 1200, y: 1100 }, { type: 'plant', x: 300, y: 900 }] }, 'squirrelHouse': { character: 'squirrel', furniture: [{ type: 'chair', x: 400, y: 900 }, { type: 'table', x: 700, y: 1000 }, { type: 'bookshelf', x: 1500, y: 800 }, { type: 'lamp', x: 1800, y: 700 }, { type: 'clock', x: 200, y: 600 }] }, 'foxHouse': { character: 'fox', furniture: [{ type: 'bed', x: 350, y: 800 }, { type: 'sofa', x: 800, y: 1000 }, { type: 'table', x: 1300, y: 900 }, { type: 'plant', x: 1600, y: 1100 }, { type: 'lamp', x: 500, y: 600 }] } }; function showMainMenu() { currentState = 'menu'; // Clear current house if (currentHouse) { currentHouse.destroy(); currentHouse = null; } // Hide back button if (backButton) { backButton.visible = false; } // Create menu if it doesn't exist if (!menuContainer) { menuContainer = game.addChild(new Container()); var title = new Text2('Pango Land', { size: 80, fill: '#FFFFFF' }); title.anchor.set(0.5, 0.5); title.x = 1024; title.y = 300; menuContainer.addChild(title); var subtitle = new Text2('Choose a house to visit!', { size: 40, fill: '#FFFFFF' }); subtitle.anchor.set(0.5, 0.5); subtitle.x = 1024; subtitle.y = 400; menuContainer.addChild(subtitle); // House buttons var buttonData = [{ text: "Pango's House", type: 'pangoHouse' }, { text: "Piggy's House", type: 'piggyHouse' }, { text: "Rabbit's House", type: 'rabbitHouse' }, { text: "Squirrel's House", type: 'squirrelHouse' }, { text: "Fox's House", type: 'foxHouse' }]; for (var i = 0; i < buttonData.length; i++) { var button = menuContainer.addChild(new MenuButton(buttonData[i].text, buttonData[i].type)); button.x = 1024; button.y = 600 + i * 120; } } menuContainer.visible = true; } function showHouse(houseType) { currentState = 'house'; // Hide menu if (menuContainer) { menuContainer.visible = false; } // Create house var config = houseConfigs[houseType]; currentHouse = game.addChild(new House(houseType, config.character)); currentHouse.x = 1024; currentHouse.y = 900; // Add furniture for (var i = 0; i < config.furniture.length; i++) { var furnitureItem = config.furniture[i]; currentHouse.addFurniture(furnitureItem.type, furnitureItem.x, furnitureItem.y); } // Show back button if (!backButton) { backButton = game.addChild(new MenuButton('Back', null)); backButton.x = 200; backButton.y = 150; } backButton.visible = true; } // Initialize game showMainMenu(); game.update = function () { // Game loop handled by individual object updates };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Character = Container.expand(function (characterType) {
var self = Container.call(this);
var graphics = self.attachAsset(characterType, {
anchorX: 0.5,
anchorY: 0.5
});
self.animationTimer = 0;
self.bobDirection = 1;
self.update = function () {
// Idle bobbing animation
self.animationTimer += 0.05;
graphics.y = Math.sin(self.animationTimer) * 5;
// Slight scale breathing effect
var breathScale = 1 + Math.sin(self.animationTimer * 0.5) * 0.05;
graphics.scaleX = breathScale;
graphics.scaleY = breathScale;
};
self.down = function (x, y, obj) {
// Character interaction
tween(graphics, {
rotation: 0.2
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(graphics, {
rotation: 0
}, {
duration: 200,
easing: tween.easeIn
});
}
});
LK.getSound('pop').play();
};
return self;
});
var House = Container.expand(function (houseType, characterType) {
var self = Container.call(this);
// House background
var background = self.attachAsset(houseType, {
anchorX: 0.5,
anchorY: 0.5
});
// Character
var character = self.addChild(new Character(characterType));
character.x = 1024;
character.y = 600;
// Furniture array
self.furniture = [];
self.addFurniture = function (itemType, x, y) {
var item = self.addChild(new InteractiveItem(itemType));
item.x = x;
item.y = y;
self.furniture.push(item);
};
return self;
});
var InteractiveItem = Container.expand(function (itemType, color, width, height) {
var self = Container.call(this);
var graphics = self.attachAsset(itemType, {
anchorX: 0.5,
anchorY: 0.5
});
self.originalScale = 1;
self.isAnimating = false;
self.clickCount = 0;
self.down = function (x, y, obj) {
if (self.isAnimating) return;
self.isAnimating = true;
self.clickCount++;
// Scale animation
tween(graphics, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(graphics, {
scaleX: self.originalScale,
scaleY: self.originalScale
}, {
duration: 150,
easing: tween.easeIn,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
}
});
// Special interactions for multiple clicks
if (self.clickCount >= 3) {
self.clickCount = 0;
self.triggerSpecialEffect();
}
LK.getSound('click').play();
};
self.triggerSpecialEffect = function () {
// Tint flash effect
var originalTint = graphics.tint;
graphics.tint = 0xFFFFFF;
tween(graphics, {
tint: originalTint
}, {
duration: 500,
easing: tween.easeOut
});
LK.getSound('chime').play();
};
return self;
});
var MenuButton = Container.expand(function (text, houseType) {
var self = Container.call(this);
var bg = self.attachAsset('menuButton', {
anchorX: 0.5,
anchorY: 0.5
});
var label = new Text2(text, {
size: 40,
fill: '#FFFFFF'
});
label.anchor.set(0.5, 0.5);
self.addChild(label);
self.houseType = houseType;
self.down = function (x, y, obj) {
tween(bg, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(bg, {
scaleX: 1,
scaleY: 1
}, {
duration: 100,
easing: tween.easeIn
});
}
});
if (self.houseType) {
showHouse(self.houseType);
} else {
showMainMenu();
}
LK.getSound('click').play();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Sound effects
// Menu elements
// Furniture items
// Characters
// House backgrounds
var currentState = 'menu';
var currentHouse = null;
var menuContainer = null;
var backButton = null;
// House configurations
var houseConfigs = {
'pangoHouse': {
character: 'pango',
furniture: [{
type: 'sofa',
x: 400,
y: 900
}, {
type: 'table',
x: 700,
y: 1000
}, {
type: 'lamp',
x: 200,
y: 700
}, {
type: 'bookshelf',
x: 1600,
y: 800
}, {
type: 'plant',
x: 1800,
y: 1100
}]
},
'piggyHouse': {
character: 'piggy',
furniture: [{
type: 'bed',
x: 300,
y: 800
}, {
type: 'chair',
x: 600,
y: 1000
}, {
type: 'table',
x: 1000,
y: 900
}, {
type: 'clock',
x: 1500,
y: 600
}, {
type: 'plant',
x: 1700,
y: 1000
}]
},
'rabbitHouse': {
character: 'rabbit',
furniture: [{
type: 'sofa',
x: 500,
y: 1000
}, {
type: 'bookshelf',
x: 1400,
y: 700
}, {
type: 'lamp',
x: 800,
y: 600
}, {
type: 'table',
x: 1200,
y: 1100
}, {
type: 'plant',
x: 300,
y: 900
}]
},
'squirrelHouse': {
character: 'squirrel',
furniture: [{
type: 'chair',
x: 400,
y: 900
}, {
type: 'table',
x: 700,
y: 1000
}, {
type: 'bookshelf',
x: 1500,
y: 800
}, {
type: 'lamp',
x: 1800,
y: 700
}, {
type: 'clock',
x: 200,
y: 600
}]
},
'foxHouse': {
character: 'fox',
furniture: [{
type: 'bed',
x: 350,
y: 800
}, {
type: 'sofa',
x: 800,
y: 1000
}, {
type: 'table',
x: 1300,
y: 900
}, {
type: 'plant',
x: 1600,
y: 1100
}, {
type: 'lamp',
x: 500,
y: 600
}]
}
};
function showMainMenu() {
currentState = 'menu';
// Clear current house
if (currentHouse) {
currentHouse.destroy();
currentHouse = null;
}
// Hide back button
if (backButton) {
backButton.visible = false;
}
// Create menu if it doesn't exist
if (!menuContainer) {
menuContainer = game.addChild(new Container());
var title = new Text2('Pango Land', {
size: 80,
fill: '#FFFFFF'
});
title.anchor.set(0.5, 0.5);
title.x = 1024;
title.y = 300;
menuContainer.addChild(title);
var subtitle = new Text2('Choose a house to visit!', {
size: 40,
fill: '#FFFFFF'
});
subtitle.anchor.set(0.5, 0.5);
subtitle.x = 1024;
subtitle.y = 400;
menuContainer.addChild(subtitle);
// House buttons
var buttonData = [{
text: "Pango's House",
type: 'pangoHouse'
}, {
text: "Piggy's House",
type: 'piggyHouse'
}, {
text: "Rabbit's House",
type: 'rabbitHouse'
}, {
text: "Squirrel's House",
type: 'squirrelHouse'
}, {
text: "Fox's House",
type: 'foxHouse'
}];
for (var i = 0; i < buttonData.length; i++) {
var button = menuContainer.addChild(new MenuButton(buttonData[i].text, buttonData[i].type));
button.x = 1024;
button.y = 600 + i * 120;
}
}
menuContainer.visible = true;
}
function showHouse(houseType) {
currentState = 'house';
// Hide menu
if (menuContainer) {
menuContainer.visible = false;
}
// Create house
var config = houseConfigs[houseType];
currentHouse = game.addChild(new House(houseType, config.character));
currentHouse.x = 1024;
currentHouse.y = 900;
// Add furniture
for (var i = 0; i < config.furniture.length; i++) {
var furnitureItem = config.furniture[i];
currentHouse.addFurniture(furnitureItem.type, furnitureItem.x, furnitureItem.y);
}
// Show back button
if (!backButton) {
backButton = game.addChild(new MenuButton('Back', null));
backButton.x = 200;
backButton.y = 150;
}
backButton.visible = true;
}
// Initialize game
showMainMenu();
game.update = function () {
// Game loop handled by individual object updates
};