/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Note = Container.expand(function (trackIndex, isPowerNote) {
var self = Container.call(this);
self.trackIndex = trackIndex;
self.isPowerNote = isPowerNote || false;
self.speed = 8;
self.hasBeenTapped = false;
self.lastY = 0;
var noteGraphics = self.attachAsset(self.isPowerNote ? 'powerNote' : 'note', {
anchorX: 0.5,
anchorY: 0.5
});
if (self.isPowerNote) {
noteGraphics.tint = 0xFFD93D;
self.scale.set(1.2);
}
self.update = function () {
self.lastY = self.y;
self.y += self.speed;
};
self.checkTiming = function () {
var targetY = targetZones[self.trackIndex].y;
var distance = Math.abs(self.y - targetY);
if (distance <= 30) {
return 'perfect';
} else if (distance <= 60) {
return 'good';
}
return 'miss';
};
return self;
});
var TargetZone = Container.expand(function (trackIndex) {
var self = Container.call(this);
self.trackIndex = trackIndex;
var zoneGraphics = self.attachAsset('targetZone', {
anchorX: 0.5,
anchorY: 0.5
});
zoneGraphics.alpha = 0.3;
self.flash = function () {
zoneGraphics.alpha = 0.8;
tween(zoneGraphics, {
alpha: 0.3
}, {
duration: 200
});
};
return self;
});
var Track = Container.expand(function (trackIndex) {
var self = Container.call(this);
self.trackIndex = trackIndex;
var trackGraphics = self.attachAsset('track', {
anchorX: 0.5,
anchorY: 0
});
trackGraphics.alpha = 0.1;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
// Game variables
var notes = [];
var tracks = [];
var targetZones = [];
var numTracks = 4;
var trackWidth = 200;
var gameWidth = 2048;
var score = 0;
var combo = 0;
var maxCombo = 0;
var missedNotes = 0;
var maxMissedNotes = 5;
var noteSpawnTimer = 0;
var noteSpawnInterval = 45;
var gameSpeed = 1;
var difficultyTimer = 0;
// UI elements
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var comboTxt = new Text2('Combo: 0', {
size: 50,
fill: 0xFFD93D
});
comboTxt.anchor.set(0, 0);
comboTxt.x = 50;
comboTxt.y = 100;
LK.gui.topLeft.addChild(comboTxt);
var missedTxt = new Text2('Missed: 0/5', {
size: 40,
fill: 0xFF6B6B
});
missedTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(missedTxt);
// Initialize tracks and target zones
var startX = (gameWidth - numTracks * trackWidth) / 2 + trackWidth / 2;
for (var i = 0; i < numTracks; i++) {
var track = new Track(i);
track.x = startX + i * trackWidth;
track.y = 0;
tracks.push(track);
game.addChild(track);
var targetZone = new TargetZone(i);
targetZone.x = startX + i * trackWidth;
targetZone.y = 2500;
targetZones.push(targetZone);
game.addChild(targetZone);
}
// Helper functions
function spawnNote() {
var trackIndex = Math.floor(Math.random() * numTracks);
var isPowerNote = Math.random() < 0.1;
var note = new Note(trackIndex, isPowerNote);
note.x = startX + trackIndex * trackWidth;
note.y = -50;
note.speed = 8 * gameSpeed;
notes.push(note);
game.addChild(note);
}
function updateScore(points) {
score += points * Math.max(1, Math.floor(combo / 5));
scoreTxt.setText('Score: ' + score);
LK.setScore(score);
}
function updateCombo(increase) {
if (increase) {
combo++;
maxCombo = Math.max(maxCombo, combo);
} else {
combo = 0;
}
comboTxt.setText('Combo: ' + combo);
}
function updateMissed() {
missedNotes++;
missedTxt.setText('Missed: ' + missedNotes + '/' + maxMissedNotes);
if (missedNotes >= maxMissedNotes) {
LK.showGameOver();
}
}
function showPerfectEffect(x, y) {
var effect = LK.getAsset('perfectEffect', {
anchorX: 0.5,
anchorY: 0.5
});
effect.x = x;
effect.y = y;
effect.alpha = 0.8;
game.addChild(effect);
tween(effect, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 300,
onFinish: function onFinish() {
effect.destroy();
}
});
}
function checkNoteInTrack(trackIndex) {
for (var i = 0; i < notes.length; i++) {
var note = notes[i];
if (note.trackIndex === trackIndex && !note.hasBeenTapped) {
var timing = note.checkTiming();
if (timing !== 'miss') {
note.hasBeenTapped = true;
var points = 0;
if (timing === 'perfect') {
points = note.isPowerNote ? 200 : 100;
LK.getSound('perfect').play();
showPerfectEffect(note.x, note.y);
} else if (timing === 'good') {
points = note.isPowerNote ? 100 : 50;
LK.getSound('tap').play();
}
updateScore(points);
updateCombo(true);
targetZones[trackIndex].flash();
note.destroy();
notes.splice(i, 1);
return true;
}
}
}
return false;
}
// Touch handlers
game.down = function (x, y, obj) {
for (var i = 0; i < numTracks; i++) {
var trackX = startX + i * trackWidth;
if (x >= trackX - trackWidth / 2 && x <= trackX + trackWidth / 2) {
if (!checkNoteInTrack(i)) {
updateCombo(false);
LK.getSound('miss').play();
}
break;
}
}
};
// Main game loop
game.update = function () {
// Spawn notes
noteSpawnTimer++;
if (noteSpawnTimer >= noteSpawnInterval) {
spawnNote();
noteSpawnTimer = 0;
}
// Update difficulty
difficultyTimer++;
if (difficultyTimer >= 1800) {
// Every 30 seconds
gameSpeed += 0.2;
noteSpawnInterval = Math.max(20, noteSpawnInterval - 2);
difficultyTimer = 0;
}
// Update notes
for (var i = notes.length - 1; i >= 0; i--) {
var note = notes[i];
// Check if note missed target zone
if (!note.hasBeenTapped && note.lastY <= 2600 && note.y > 2600) {
updateCombo(false);
updateMissed();
note.destroy();
notes.splice(i, 1);
continue;
}
// Remove notes that are off screen
if (note.y > 2800) {
note.destroy();
notes.splice(i, 1);
}
}
// Win condition
if (score >= 10000) {
LK.showYouWin();
}
};
// Start background music
LK.playMusic('bgmusic'); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,261 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Note = Container.expand(function (trackIndex, isPowerNote) {
+ var self = Container.call(this);
+ self.trackIndex = trackIndex;
+ self.isPowerNote = isPowerNote || false;
+ self.speed = 8;
+ self.hasBeenTapped = false;
+ self.lastY = 0;
+ var noteGraphics = self.attachAsset(self.isPowerNote ? 'powerNote' : 'note', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ if (self.isPowerNote) {
+ noteGraphics.tint = 0xFFD93D;
+ self.scale.set(1.2);
+ }
+ self.update = function () {
+ self.lastY = self.y;
+ self.y += self.speed;
+ };
+ self.checkTiming = function () {
+ var targetY = targetZones[self.trackIndex].y;
+ var distance = Math.abs(self.y - targetY);
+ if (distance <= 30) {
+ return 'perfect';
+ } else if (distance <= 60) {
+ return 'good';
+ }
+ return 'miss';
+ };
+ return self;
+});
+var TargetZone = Container.expand(function (trackIndex) {
+ var self = Container.call(this);
+ self.trackIndex = trackIndex;
+ var zoneGraphics = self.attachAsset('targetZone', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ zoneGraphics.alpha = 0.3;
+ self.flash = function () {
+ zoneGraphics.alpha = 0.8;
+ tween(zoneGraphics, {
+ alpha: 0.3
+ }, {
+ duration: 200
+ });
+ };
+ return self;
+});
+var Track = Container.expand(function (trackIndex) {
+ var self = Container.call(this);
+ self.trackIndex = trackIndex;
+ var trackGraphics = self.attachAsset('track', {
+ anchorX: 0.5,
+ anchorY: 0
+ });
+ trackGraphics.alpha = 0.1;
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a2e
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var notes = [];
+var tracks = [];
+var targetZones = [];
+var numTracks = 4;
+var trackWidth = 200;
+var gameWidth = 2048;
+var score = 0;
+var combo = 0;
+var maxCombo = 0;
+var missedNotes = 0;
+var maxMissedNotes = 5;
+var noteSpawnTimer = 0;
+var noteSpawnInterval = 45;
+var gameSpeed = 1;
+var difficultyTimer = 0;
+// UI elements
+var scoreTxt = new Text2('Score: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+var comboTxt = new Text2('Combo: 0', {
+ size: 50,
+ fill: 0xFFD93D
+});
+comboTxt.anchor.set(0, 0);
+comboTxt.x = 50;
+comboTxt.y = 100;
+LK.gui.topLeft.addChild(comboTxt);
+var missedTxt = new Text2('Missed: 0/5', {
+ size: 40,
+ fill: 0xFF6B6B
+});
+missedTxt.anchor.set(1, 0);
+LK.gui.topRight.addChild(missedTxt);
+// Initialize tracks and target zones
+var startX = (gameWidth - numTracks * trackWidth) / 2 + trackWidth / 2;
+for (var i = 0; i < numTracks; i++) {
+ var track = new Track(i);
+ track.x = startX + i * trackWidth;
+ track.y = 0;
+ tracks.push(track);
+ game.addChild(track);
+ var targetZone = new TargetZone(i);
+ targetZone.x = startX + i * trackWidth;
+ targetZone.y = 2500;
+ targetZones.push(targetZone);
+ game.addChild(targetZone);
+}
+// Helper functions
+function spawnNote() {
+ var trackIndex = Math.floor(Math.random() * numTracks);
+ var isPowerNote = Math.random() < 0.1;
+ var note = new Note(trackIndex, isPowerNote);
+ note.x = startX + trackIndex * trackWidth;
+ note.y = -50;
+ note.speed = 8 * gameSpeed;
+ notes.push(note);
+ game.addChild(note);
+}
+function updateScore(points) {
+ score += points * Math.max(1, Math.floor(combo / 5));
+ scoreTxt.setText('Score: ' + score);
+ LK.setScore(score);
+}
+function updateCombo(increase) {
+ if (increase) {
+ combo++;
+ maxCombo = Math.max(maxCombo, combo);
+ } else {
+ combo = 0;
+ }
+ comboTxt.setText('Combo: ' + combo);
+}
+function updateMissed() {
+ missedNotes++;
+ missedTxt.setText('Missed: ' + missedNotes + '/' + maxMissedNotes);
+ if (missedNotes >= maxMissedNotes) {
+ LK.showGameOver();
+ }
+}
+function showPerfectEffect(x, y) {
+ var effect = LK.getAsset('perfectEffect', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ effect.x = x;
+ effect.y = y;
+ effect.alpha = 0.8;
+ game.addChild(effect);
+ tween(effect, {
+ alpha: 0,
+ scaleX: 2,
+ scaleY: 2
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ effect.destroy();
+ }
+ });
+}
+function checkNoteInTrack(trackIndex) {
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ if (note.trackIndex === trackIndex && !note.hasBeenTapped) {
+ var timing = note.checkTiming();
+ if (timing !== 'miss') {
+ note.hasBeenTapped = true;
+ var points = 0;
+ if (timing === 'perfect') {
+ points = note.isPowerNote ? 200 : 100;
+ LK.getSound('perfect').play();
+ showPerfectEffect(note.x, note.y);
+ } else if (timing === 'good') {
+ points = note.isPowerNote ? 100 : 50;
+ LK.getSound('tap').play();
+ }
+ updateScore(points);
+ updateCombo(true);
+ targetZones[trackIndex].flash();
+ note.destroy();
+ notes.splice(i, 1);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+// Touch handlers
+game.down = function (x, y, obj) {
+ for (var i = 0; i < numTracks; i++) {
+ var trackX = startX + i * trackWidth;
+ if (x >= trackX - trackWidth / 2 && x <= trackX + trackWidth / 2) {
+ if (!checkNoteInTrack(i)) {
+ updateCombo(false);
+ LK.getSound('miss').play();
+ }
+ break;
+ }
+ }
+};
+// Main game loop
+game.update = function () {
+ // Spawn notes
+ noteSpawnTimer++;
+ if (noteSpawnTimer >= noteSpawnInterval) {
+ spawnNote();
+ noteSpawnTimer = 0;
+ }
+ // Update difficulty
+ difficultyTimer++;
+ if (difficultyTimer >= 1800) {
+ // Every 30 seconds
+ gameSpeed += 0.2;
+ noteSpawnInterval = Math.max(20, noteSpawnInterval - 2);
+ difficultyTimer = 0;
+ }
+ // Update notes
+ for (var i = notes.length - 1; i >= 0; i--) {
+ var note = notes[i];
+ // Check if note missed target zone
+ if (!note.hasBeenTapped && note.lastY <= 2600 && note.y > 2600) {
+ updateCombo(false);
+ updateMissed();
+ note.destroy();
+ notes.splice(i, 1);
+ continue;
+ }
+ // Remove notes that are off screen
+ if (note.y > 2800) {
+ note.destroy();
+ notes.splice(i, 1);
+ }
+ }
+ // Win condition
+ if (score >= 10000) {
+ LK.showYouWin();
+ }
+};
+// Start background music
+LK.playMusic('bgmusic');
\ No newline at end of file
Gitar gövde kısmı
Do müzik notası
Mavi pastel renkli daire. In-Game asset. 2d. High contrast. No shadows
Kalp. In-Game asset. 2d. High contrast. No shadows
Gitar aksesuarı turuncu pastel renk. In-Game asset. 2d. High contrast. No shadows
Kırmızı pastel renk gitar çalma aksesuarı. In-Game asset. 2d. High contrast. No shadows