/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var PianoKey = Container.expand(function (note, soundId) { var self = Container.call(this); self.note = note; self.soundId = soundId; self.isPressed = false; // Create the white key graphics self.keyGraphics = self.attachAsset('pianoKey', { anchorX: 0.5, anchorY: 0.5 }); // Create note label self.noteLabel = new Text2(note, { size: 60, fill: 0x000000 }); self.noteLabel.anchor.set(0.5, 0.5); self.noteLabel.x = 0; self.noteLabel.y = 300; // Position near bottom of key self.addChild(self.noteLabel); self.playNote = function () { if (!self.isPressed) { self.isPressed = true; // Visual feedback - change color self.keyGraphics.tint = 0xe0e0e0; // Play sound LK.getSound(self.soundId).play(); // Increase score score++; scoreTxt.setText(score); // Reset visual after short delay LK.setTimeout(function () { self.keyGraphics.tint = 0xffffff; self.isPressed = false; }, 150); } }; self.down = function (x, y, obj) { self.playNote(); }; return self; }); var StartMenu = Container.expand(function () { var self = Container.call(this); // Add background image self.bgImage = self.attachAsset('menuBackground', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); // Create title self.titleText = new Text2('Piano Notes', { size: 120, fill: 0x000000 }); self.titleText.anchor.set(0.5, 0.5); self.titleText.x = 2048 / 2; self.titleText.y = 800; self.addChild(self.titleText); // Create play button background self.playButton = self.attachAsset('pianoKey', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 1400, scaleX: 1.5, scaleY: 0.8 }); // Create play button text self.playText = new Text2('PLAY', { size: 80, fill: 0x000000 }); self.playText.anchor.set(0.5, 0.5); self.playText.x = 2048 / 2; self.playText.y = 1400; self.addChild(self.playText); self.down = function (x, y, obj) { // Start the game startGame(); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xFFFFFF }); /**** * Game Code ****/ var gameStarted = false; var startMenu = null; var score = 0; // Create score display (initially hidden) var scoreTxt = new Text2('0', { size: 80, fill: 0x000000 }); scoreTxt.anchor.set(0.5, 0); scoreTxt.visible = false; LK.gui.top.addChild(scoreTxt); // Piano key configuration var keyConfig = [{ note: 'Do', sound: 'do' }, { note: 'Re', sound: 're' }, { note: 'Mi', sound: 'mi' }, { note: 'Fa', sound: 'fa' }, { note: 'So', sound: 'so' }, { note: 'La', sound: 'la' }, { note: 'Si', sound: 'si' }, { note: 'Do', sound: 'do2' }]; var pianoKeys = []; var keyWidth = 240; var keySpacing = 256; // Small gap between keys var startX = (2048 - keySpacing * 7) / 2; // Center the piano // Function to start the actual game function startGame() { if (gameStarted) return; gameStarted = true; // Hide start menu if (startMenu) { startMenu.destroy(); startMenu = null; } // Show score scoreTxt.visible = true; // Stop menu music LK.stopMusic(); // Create piano keys for (var i = 0; i < keyConfig.length; i++) { var key = new PianoKey(keyConfig[i].note, keyConfig[i].sound); key.x = startX + i * keySpacing; key.y = 2732 / 2; // Center vertically pianoKeys.push(key); game.addChild(key); } // Create title text var titleTxt = new Text2('Piano Notes', { size: 100, fill: 0x000000 }); titleTxt.anchor.set(0.5, 0.5); titleTxt.x = 2048 / 2; titleTxt.y = 500; game.addChild(titleTxt); // Create instruction text var instructionTxt = new Text2('Tap the keys to play notes!', { size: 60, fill: 0x666666 }); instructionTxt.anchor.set(0.5, 0.5); instructionTxt.x = 2048 / 2; instructionTxt.y = 600; game.addChild(instructionTxt); } // Initialize start menu startMenu = new StartMenu(); game.addChild(startMenu); // Start playing menu music LK.playMusic('menuMusic'); game.update = function () { // Only update score if game has started if (gameStarted) { scoreTxt.setText('Score: ' + score); } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var PianoKey = Container.expand(function (note, soundId) {
var self = Container.call(this);
self.note = note;
self.soundId = soundId;
self.isPressed = false;
// Create the white key graphics
self.keyGraphics = self.attachAsset('pianoKey', {
anchorX: 0.5,
anchorY: 0.5
});
// Create note label
self.noteLabel = new Text2(note, {
size: 60,
fill: 0x000000
});
self.noteLabel.anchor.set(0.5, 0.5);
self.noteLabel.x = 0;
self.noteLabel.y = 300; // Position near bottom of key
self.addChild(self.noteLabel);
self.playNote = function () {
if (!self.isPressed) {
self.isPressed = true;
// Visual feedback - change color
self.keyGraphics.tint = 0xe0e0e0;
// Play sound
LK.getSound(self.soundId).play();
// Increase score
score++;
scoreTxt.setText(score);
// Reset visual after short delay
LK.setTimeout(function () {
self.keyGraphics.tint = 0xffffff;
self.isPressed = false;
}, 150);
}
};
self.down = function (x, y, obj) {
self.playNote();
};
return self;
});
var StartMenu = Container.expand(function () {
var self = Container.call(this);
// Add background image
self.bgImage = self.attachAsset('menuBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
// Create title
self.titleText = new Text2('Piano Notes', {
size: 120,
fill: 0x000000
});
self.titleText.anchor.set(0.5, 0.5);
self.titleText.x = 2048 / 2;
self.titleText.y = 800;
self.addChild(self.titleText);
// Create play button background
self.playButton = self.attachAsset('pianoKey', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 1400,
scaleX: 1.5,
scaleY: 0.8
});
// Create play button text
self.playText = new Text2('PLAY', {
size: 80,
fill: 0x000000
});
self.playText.anchor.set(0.5, 0.5);
self.playText.x = 2048 / 2;
self.playText.y = 1400;
self.addChild(self.playText);
self.down = function (x, y, obj) {
// Start the game
startGame();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xFFFFFF
});
/****
* Game Code
****/
var gameStarted = false;
var startMenu = null;
var score = 0;
// Create score display (initially hidden)
var scoreTxt = new Text2('0', {
size: 80,
fill: 0x000000
});
scoreTxt.anchor.set(0.5, 0);
scoreTxt.visible = false;
LK.gui.top.addChild(scoreTxt);
// Piano key configuration
var keyConfig = [{
note: 'Do',
sound: 'do'
}, {
note: 'Re',
sound: 're'
}, {
note: 'Mi',
sound: 'mi'
}, {
note: 'Fa',
sound: 'fa'
}, {
note: 'So',
sound: 'so'
}, {
note: 'La',
sound: 'la'
}, {
note: 'Si',
sound: 'si'
}, {
note: 'Do',
sound: 'do2'
}];
var pianoKeys = [];
var keyWidth = 240;
var keySpacing = 256; // Small gap between keys
var startX = (2048 - keySpacing * 7) / 2; // Center the piano
// Function to start the actual game
function startGame() {
if (gameStarted) return;
gameStarted = true;
// Hide start menu
if (startMenu) {
startMenu.destroy();
startMenu = null;
}
// Show score
scoreTxt.visible = true;
// Stop menu music
LK.stopMusic();
// Create piano keys
for (var i = 0; i < keyConfig.length; i++) {
var key = new PianoKey(keyConfig[i].note, keyConfig[i].sound);
key.x = startX + i * keySpacing;
key.y = 2732 / 2; // Center vertically
pianoKeys.push(key);
game.addChild(key);
}
// Create title text
var titleTxt = new Text2('Piano Notes', {
size: 100,
fill: 0x000000
});
titleTxt.anchor.set(0.5, 0.5);
titleTxt.x = 2048 / 2;
titleTxt.y = 500;
game.addChild(titleTxt);
// Create instruction text
var instructionTxt = new Text2('Tap the keys to play notes!', {
size: 60,
fill: 0x666666
});
instructionTxt.anchor.set(0.5, 0.5);
instructionTxt.x = 2048 / 2;
instructionTxt.y = 600;
game.addChild(instructionTxt);
}
// Initialize start menu
startMenu = new StartMenu();
game.addChild(startMenu);
// Start playing menu music
LK.playMusic('menuMusic');
game.update = function () {
// Only update score if game has started
if (gameStarted) {
scoreTxt.setText('Score: ' + score);
}
};