/****
* 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);
}
};