/**** * 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