User prompt
aumneta la distancia de aparicion entre las notas y los obstaculos
User prompt
haz que el beat marker salga de la parte de atras de la nave
User prompt
haz que el beat marker siga a la nave ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Es que la distancia de aparicion entre las notas y obstaculos sea mayor, dejando una distancia para que el jugador no choque con los obstaculos
User prompt
Haz que cuando se llegue a los 10000 puntos dejen de aparecer asteroides
User prompt
Haz que se gane cuando la nave alienigena sea destruida
User prompt
Haz que a los 10000 puntos de score aparesca una nave alienigena que lanze rayos y que el jugador le dispare para destruirla ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Haz que la inmunidad se active cada que el combo aumente en 20 puntos
User prompt
Añade un poder que te de inmunidad por 10 segundo ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Haz que cuando se toque 3 obstaculos se acabe el juego y la nave espacial explote ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Haz que las notas aparescan con más separacion entre ellas
User prompt
Haz que los obstaculos y las notas se muevan más rapido cada 20 segundos ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Haz que cada 750 puntos de score obtenidos la velocidad de la nave aumente 2[m/s] ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Haz que cada 750 puntos de score la velocidad de la nave aumente 2
User prompt
Haz que el combo suba solo si se toca una nota musical y que se reinicie cuando toques un obstaculo o si no se toca una nota
User prompt
Haz que el score suba solo si se toca una nota musical
User prompt
Haz que la velocidad de movimiento de la nave aumente cuando toque una nota ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Haz que la nave se mueva de un carril al otro sin que se salte uno ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Elimina el sistema de combos
User prompt
Haz que el combo no se reinicie, solo se reiniciara si se choca con un obstaculo
User prompt
Haz que los abstaculos tengan más separacion entre ellos
User prompt
Haz que la nave aumente su velocidad a medida que toma las notas musicales ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Haz que cuando se toque una note suene el sonido llamado "notamusical"
Code edit (1 edits merged)
Please save this source code
User prompt
PulseBeat
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var BeatMarker = Container.expand(function () {
var self = Container.call(this);
var markerGraphics = self.attachAsset('beat_marker', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.intensity = 1.0;
self.update = function () {
self.y += self.speed;
// Fade out as it moves
markerGraphics.alpha = Math.max(0, 1 - self.y / 2732);
};
return self;
});
var Note = Container.expand(function () {
var self = Container.call(this);
var noteGraphics = self.attachAsset('note', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.collected = false;
self.beatTime = 0;
self.update = function () {
self.y += self.speed;
// Pulsing effect
var pulse = 0.8 + Math.sin(LK.ticks * 0.2) * 0.2;
noteGraphics.scaleX = pulse;
noteGraphics.scaleY = pulse;
};
return self;
});
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.wasHit = false;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Ship = Container.expand(function () {
var self = Container.call(this);
var shipGraphics = self.attachAsset('ship', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = shipSpeed;
self.targetX = 1024;
self.isAlive = true;
self.update = function () {
if (!self.isAlive) return;
// Smooth movement towards target
var diff = self.targetX - self.x;
self.x += diff * 0.15;
// Keep ship in bounds
if (self.x < 100) self.x = 100;
if (self.x > 1948) self.x = 1948;
};
return self;
});
var TunnelSegment = Container.expand(function () {
var self = Container.call(this);
var tunnelGraphics = self.attachAsset('tunnel', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x0a0a0a
});
/****
* Game Code
****/
// Game variables
var ship;
var tunnelSegments = [];
var obstacles = [];
var notes = [];
var beatMarkers = [];
var combo = 0;
var beatTimer = 0;
var beatInterval = 30; // frames between beats (60fps / 2 = 30 frames = 0.5 seconds)
var gameSpeed = 8;
var shipSpeed = 8; // Initial ship speed
var shipLane = 1; // 0 = left, 1 = center, 2 = right
var lanes = [512, 1024, 1536];
var obstacleHits = 0; // Counter for obstacle hits
// 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: 0xFFA502
});
comboTxt.anchor.set(0, 0);
comboTxt.x = 50;
comboTxt.y = 150;
LK.gui.addChild(comboTxt);
// Initialize ship
ship = game.addChild(new Ship());
ship.x = lanes[shipLane];
ship.y = 2400;
// Create initial tunnel segments
function createTunnelSegment(y) {
var segment = new TunnelSegment();
segment.x = 1024;
segment.y = y;
segment.alpha = 0.3;
return game.addChild(segment);
}
// Initialize tunnel
for (var i = 0; i < 30; i++) {
tunnelSegments.push(createTunnelSegment(i * 100 - 500));
}
// Create obstacle
function createObstacle(lane, y) {
var obstacle = new Obstacle();
obstacle.x = lanes[lane];
obstacle.y = y;
obstacles.push(obstacle);
return game.addChild(obstacle);
}
// Create note
function createNote(lane, y, beatTime) {
var note = new Note();
note.x = lanes[lane];
note.y = y;
note.beatTime = beatTime;
notes.push(note);
return game.addChild(note);
}
// Create beat marker
function createBeatMarker() {
var marker = new BeatMarker();
marker.x = 1024;
marker.y = ship.y - 200;
beatMarkers.push(marker);
return game.addChild(marker);
}
// Handle input for lane switching
function handleInput(targetLane) {
if (targetLane >= 0 && targetLane <= 2) {
shipLane = targetLane;
ship.targetX = lanes[shipLane];
}
}
// Touch controls
game.down = function (x, y, obj) {
// Divide screen into three lanes for touch control
if (x < 683) {
handleInput(0); // Left lane
} else if (x < 1365) {
handleInput(1); // Center lane
} else {
handleInput(2); // Right lane
}
// Check if touching on beat
checkBeatTiming();
};
function checkBeatTiming() {
var beatAccuracy = Math.abs(beatTimer % beatInterval - beatInterval / 2);
var maxAccuracy = beatInterval * 0.3; // 30% tolerance
if (beatAccuracy <= maxAccuracy) {
// Good timing
tween(ship, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100
});
tween(ship, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100
});
} else {
// Bad timing
LK.getSound('miss').play();
}
updateUI();
}
function updateUI() {
scoreTxt.setText('Score: ' + LK.getScore());
comboTxt.setText('Combo: ' + combo);
}
// Spawn content based on beat
function spawnContent() {
if (beatTimer % beatInterval === 0) {
// Create beat marker
createBeatMarker();
// Randomly spawn obstacles and notes
var spawnChance = Math.random();
// Check if there's enough space before spawning obstacle
var canSpawnObstacle = true;
for (var i = 0; i < obstacles.length; i++) {
if (obstacles[i].y < 300) {
// Check if any obstacle is too close to top
canSpawnObstacle = false;
break;
}
}
if (spawnChance < 0.15 && canSpawnObstacle) {
// Reduced from 0.3 to 0.15
// Spawn obstacle
var obstacleLane = Math.floor(Math.random() * 3);
createObstacle(obstacleLane, -100);
}
if (spawnChance > 0.6) {
// Spawn note
var noteLane = Math.floor(Math.random() * 3);
createNote(noteLane, -100, LK.ticks + 300);
}
}
}
// Game update loop
game.update = function () {
if (!ship.isAlive) return;
beatTimer++;
// Spawn new content
spawnContent();
// Manage tunnel segments
for (var i = tunnelSegments.length - 1; i >= 0; i--) {
var segment = tunnelSegments[i];
if (segment.y > 2800) {
segment.destroy();
tunnelSegments.splice(i, 1);
// Add new segment at the top
tunnelSegments.push(createTunnelSegment(-200));
}
}
// Check obstacle collisions
for (var j = obstacles.length - 1; j >= 0; j--) {
var obstacle = obstacles[j];
if (obstacle.y > 2800) {
obstacle.destroy();
obstacles.splice(j, 1);
continue;
}
if (!obstacle.wasHit && obstacle.intersects(ship)) {
obstacle.wasHit = true;
obstacleHits++; // Increment obstacle hit counter
combo = 0;
LK.effects.flashScreen(0xff4757, 500);
LK.getSound('miss').play();
// Reduce score
LK.setScore(Math.max(0, LK.getScore() - 50));
updateUI();
// Check if hit 3 obstacles - game over with explosion
if (obstacleHits >= 3) {
ship.isAlive = false;
// Ship explosion effect
tween(ship, {
scaleX: 2,
scaleY: 2,
alpha: 0,
rotation: Math.PI * 2
}, {
duration: 1000,
onFinish: function onFinish() {
LK.showGameOver();
}
});
}
// Check game over condition
if (LK.getScore() <= -100) {
ship.isAlive = false;
LK.showGameOver();
}
}
}
// Check note collections
for (var k = notes.length - 1; k >= 0; k--) {
var note = notes[k];
if (note.y > 2800) {
// Reset combo when note is missed (not collected)
if (!note.collected) {
combo = 0;
updateUI();
}
note.destroy();
notes.splice(k, 1);
continue;
}
if (!note.collected && note.intersects(ship)) {
note.collected = true;
// Check timing accuracy
var timingAccuracy = Math.abs(beatTimer % beatInterval - beatInterval / 2);
var maxAccuracy = beatInterval * 0.4;
if (timingAccuracy <= maxAccuracy) {
// Perfect timing - only time combo increases
combo++;
LK.setScore(LK.getScore() + 20 * combo);
LK.getSound('notamusical').play();
// Increase ship speed
shipSpeed += 0.1;
ship.speed = shipSpeed;
// Visual feedback
tween(note, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 200
});
} else {
// Poor timing - reset combo when missing note timing
combo = 0;
}
note.destroy();
notes.splice(k, 1);
updateUI();
}
}
// Clean up beat markers
for (var l = beatMarkers.length - 1; l >= 0; l--) {
var marker = beatMarkers[l];
if (marker.y > 2800 || marker.alpha <= 0) {
marker.destroy();
beatMarkers.splice(l, 1);
}
}
// Increase difficulty over time
if (LK.ticks % 1800 === 0) {
// Every 30 seconds
gameSpeed += 0.5;
beatInterval = Math.max(20, beatInterval - 1);
// Update speeds for all moving objects
for (var m = 0; m < tunnelSegments.length; m++) {
tunnelSegments[m].speed = gameSpeed;
}
for (var n = 0; n < obstacles.length; n++) {
obstacles[n].speed = gameSpeed;
}
for (var o = 0; o < notes.length; o++) {
notes[o].speed = gameSpeed;
}
for (var p = 0; p < beatMarkers.length; p++) {
beatMarkers[p].speed = gameSpeed;
}
}
// Tunnel pulsing effect based on beat
var beatPulse = Math.sin(beatTimer % beatInterval / beatInterval * Math.PI * 2);
for (var q = 0; q < tunnelSegments.length; q++) {
tunnelSegments[q].alpha = 0.2 + Math.abs(beatPulse) * 0.3;
}
// Victory condition
if (LK.getScore() >= 10000) {
LK.showYouWin();
}
};
// Start background music
LK.playMusic('background'); ===================================================================
--- original.js
+++ change.js
@@ -107,8 +107,9 @@
var gameSpeed = 8;
var shipSpeed = 8; // Initial ship speed
var shipLane = 1; // 0 = left, 1 = center, 2 = right
var lanes = [512, 1024, 1536];
+var obstacleHits = 0; // Counter for obstacle hits
// UI Elements
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
@@ -232,9 +233,9 @@
// Spawn obstacle
var obstacleLane = Math.floor(Math.random() * 3);
createObstacle(obstacleLane, -100);
}
- if (spawnChance > 0.8) {
+ if (spawnChance > 0.6) {
// Spawn note
var noteLane = Math.floor(Math.random() * 3);
createNote(noteLane, -100, LK.ticks + 300);
}
@@ -265,14 +266,31 @@
continue;
}
if (!obstacle.wasHit && obstacle.intersects(ship)) {
obstacle.wasHit = true;
+ obstacleHits++; // Increment obstacle hit counter
combo = 0;
LK.effects.flashScreen(0xff4757, 500);
LK.getSound('miss').play();
// Reduce score
LK.setScore(Math.max(0, LK.getScore() - 50));
updateUI();
+ // Check if hit 3 obstacles - game over with explosion
+ if (obstacleHits >= 3) {
+ ship.isAlive = false;
+ // Ship explosion effect
+ tween(ship, {
+ scaleX: 2,
+ scaleY: 2,
+ alpha: 0,
+ rotation: Math.PI * 2
+ }, {
+ duration: 1000,
+ onFinish: function onFinish() {
+ LK.showGameOver();
+ }
+ });
+ }
// Check game over condition
if (LK.getScore() <= -100) {
ship.isAlive = false;
LK.showGameOver();