/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var PowerUp = Container.expand(function () {
var self = Container.call(this);
var powerupGraphics = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4;
self.collected = false;
self.update = function () {
self.y += self.speed;
self.rotation += 0.1;
};
return self;
});
var Rock = Container.expand(function () {
var self = Container.call(this);
var rockGraphics = self.attachAsset('rock', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Surfer = Container.expand(function () {
var self = Container.call(this);
var surferGraphics = self.attachAsset('surfer', {
anchorX: 0.5,
anchorY: 0.5
});
self.targetX = 2048 / 2;
self.moveSpeed = 8;
self.update = function () {
var dx = self.targetX - self.x;
if (Math.abs(dx) > 2) {
self.x += dx * 0.15;
}
// Add slight rotation based on movement
self.rotation = dx * 0.002;
};
return self;
});
var Wave = Container.expand(function () {
var self = Container.call(this);
var waveGraphics = self.attachAsset('wave', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x0066cc
});
/****
* Game Code
****/
var surfer;
var waves = [];
var rocks = [];
var powerups = [];
var distance = 0;
var gameSpeed = 4;
var isDragging = false;
var lastWaveSpawn = 0;
var lastRockSpawn = 0;
var lastPowerUpSpawn = 0;
// UI Elements
var scoreText = new Text2('Score: 0', {
size: 60,
fill: '#ffffff'
});
scoreText.anchor.set(0, 0);
LK.gui.topLeft.addChild(scoreText);
scoreText.x = 120; // Offset from top-left to avoid menu icon
var distanceText = new Text2('Distance: 0', {
size: 50,
fill: '#ffffff'
});
distanceText.anchor.set(0.5, 0);
LK.gui.top.addChild(distanceText);
// Create surfer
surfer = game.addChild(new Surfer());
surfer.x = 2048 / 2;
surfer.y = 2200;
// Spawn functions
function spawnWave() {
var wave = new Wave();
wave.x = Math.random() * 1800 + 124;
wave.y = -100;
waves.push(wave);
game.addChild(wave);
}
function spawnRock() {
var rock = new Rock();
rock.x = Math.random() * 1800 + 124;
rock.y = -100;
rocks.push(rock);
game.addChild(rock);
}
function spawnPowerUp() {
var powerup = new PowerUp();
powerup.x = Math.random() * 1800 + 124;
powerup.y = -100;
powerups.push(powerup);
game.addChild(powerup);
}
// Input handling
game.down = function (x, y, obj) {
isDragging = true;
surfer.targetX = x;
};
game.move = function (x, y, obj) {
if (isDragging) {
surfer.targetX = Math.max(100, Math.min(1948, x));
}
};
game.up = function (x, y, obj) {
isDragging = false;
};
// Main game loop
game.update = function () {
distance += gameSpeed;
// Increase difficulty over time
if (LK.ticks % 600 === 0) {
gameSpeed += 0.2;
}
// Spawn waves
if (LK.ticks - lastWaveSpawn > 90 - gameSpeed * 2) {
spawnWave();
lastWaveSpawn = LK.ticks;
}
// Spawn rocks
if (LK.ticks - lastRockSpawn > 180 - gameSpeed * 3) {
spawnRock();
lastRockSpawn = LK.ticks;
}
// Spawn power-ups
if (LK.ticks - lastPowerUpSpawn > 300) {
spawnPowerUp();
lastPowerUpSpawn = LK.ticks;
}
// Update waves
for (var i = waves.length - 1; i >= 0; i--) {
var wave = waves[i];
wave.speed = gameSpeed;
if (wave.y > 2832) {
wave.destroy();
waves.splice(i, 1);
}
}
// Update and check collisions for rocks
for (var j = rocks.length - 1; j >= 0; j--) {
var rock = rocks[j];
rock.speed = gameSpeed;
if (rock.y > 2832) {
rock.destroy();
rocks.splice(j, 1);
continue;
}
// Collision with surfer
if (surfer.intersects(rock)) {
LK.getSound('crash').play();
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
}
// Update and check collisions for power-ups
for (var k = powerups.length - 1; k >= 0; k--) {
var powerup = powerups[k];
powerup.speed = gameSpeed;
if (powerup.y > 2832) {
powerup.destroy();
powerups.splice(k, 1);
continue;
}
// Collection by surfer
if (!powerup.collected && surfer.intersects(powerup)) {
powerup.collected = true;
LK.setScore(LK.getScore() + 50);
LK.getSound('collect').play();
// Fade out effect
tween(powerup, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 300,
onFinish: function onFinish() {
powerup.destroy();
}
});
powerups.splice(k, 1);
}
}
// Update score based on distance
if (LK.ticks % 10 === 0) {
LK.setScore(LK.getScore() + 1);
}
// Update UI
scoreText.setText('Score: ' + LK.getScore());
distanceText.setText('Distance: ' + Math.floor(distance / 10) + 'm');
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,222 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ var powerupGraphics = self.attachAsset('powerup', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 4;
+ self.collected = false;
+ self.update = function () {
+ self.y += self.speed;
+ self.rotation += 0.1;
+ };
+ return self;
+});
+var Rock = Container.expand(function () {
+ var self = Container.call(this);
+ var rockGraphics = self.attachAsset('rock', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 4;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var Surfer = Container.expand(function () {
+ var self = Container.call(this);
+ var surferGraphics = self.attachAsset('surfer', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.targetX = 2048 / 2;
+ self.moveSpeed = 8;
+ self.update = function () {
+ var dx = self.targetX - self.x;
+ if (Math.abs(dx) > 2) {
+ self.x += dx * 0.15;
+ }
+ // Add slight rotation based on movement
+ self.rotation = dx * 0.002;
+ };
+ return self;
+});
+var Wave = Container.expand(function () {
+ var self = Container.call(this);
+ var waveGraphics = self.attachAsset('wave', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 4;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x0066cc
+});
+
+/****
+* Game Code
+****/
+var surfer;
+var waves = [];
+var rocks = [];
+var powerups = [];
+var distance = 0;
+var gameSpeed = 4;
+var isDragging = false;
+var lastWaveSpawn = 0;
+var lastRockSpawn = 0;
+var lastPowerUpSpawn = 0;
+// UI Elements
+var scoreText = new Text2('Score: 0', {
+ size: 60,
+ fill: '#ffffff'
+});
+scoreText.anchor.set(0, 0);
+LK.gui.topLeft.addChild(scoreText);
+scoreText.x = 120; // Offset from top-left to avoid menu icon
+var distanceText = new Text2('Distance: 0', {
+ size: 50,
+ fill: '#ffffff'
+});
+distanceText.anchor.set(0.5, 0);
+LK.gui.top.addChild(distanceText);
+// Create surfer
+surfer = game.addChild(new Surfer());
+surfer.x = 2048 / 2;
+surfer.y = 2200;
+// Spawn functions
+function spawnWave() {
+ var wave = new Wave();
+ wave.x = Math.random() * 1800 + 124;
+ wave.y = -100;
+ waves.push(wave);
+ game.addChild(wave);
+}
+function spawnRock() {
+ var rock = new Rock();
+ rock.x = Math.random() * 1800 + 124;
+ rock.y = -100;
+ rocks.push(rock);
+ game.addChild(rock);
+}
+function spawnPowerUp() {
+ var powerup = new PowerUp();
+ powerup.x = Math.random() * 1800 + 124;
+ powerup.y = -100;
+ powerups.push(powerup);
+ game.addChild(powerup);
+}
+// Input handling
+game.down = function (x, y, obj) {
+ isDragging = true;
+ surfer.targetX = x;
+};
+game.move = function (x, y, obj) {
+ if (isDragging) {
+ surfer.targetX = Math.max(100, Math.min(1948, x));
+ }
+};
+game.up = function (x, y, obj) {
+ isDragging = false;
+};
+// Main game loop
+game.update = function () {
+ distance += gameSpeed;
+ // Increase difficulty over time
+ if (LK.ticks % 600 === 0) {
+ gameSpeed += 0.2;
+ }
+ // Spawn waves
+ if (LK.ticks - lastWaveSpawn > 90 - gameSpeed * 2) {
+ spawnWave();
+ lastWaveSpawn = LK.ticks;
+ }
+ // Spawn rocks
+ if (LK.ticks - lastRockSpawn > 180 - gameSpeed * 3) {
+ spawnRock();
+ lastRockSpawn = LK.ticks;
+ }
+ // Spawn power-ups
+ if (LK.ticks - lastPowerUpSpawn > 300) {
+ spawnPowerUp();
+ lastPowerUpSpawn = LK.ticks;
+ }
+ // Update waves
+ for (var i = waves.length - 1; i >= 0; i--) {
+ var wave = waves[i];
+ wave.speed = gameSpeed;
+ if (wave.y > 2832) {
+ wave.destroy();
+ waves.splice(i, 1);
+ }
+ }
+ // Update and check collisions for rocks
+ for (var j = rocks.length - 1; j >= 0; j--) {
+ var rock = rocks[j];
+ rock.speed = gameSpeed;
+ if (rock.y > 2832) {
+ rock.destroy();
+ rocks.splice(j, 1);
+ continue;
+ }
+ // Collision with surfer
+ if (surfer.intersects(rock)) {
+ LK.getSound('crash').play();
+ LK.effects.flashScreen(0xff0000, 800);
+ LK.showGameOver();
+ return;
+ }
+ }
+ // Update and check collisions for power-ups
+ for (var k = powerups.length - 1; k >= 0; k--) {
+ var powerup = powerups[k];
+ powerup.speed = gameSpeed;
+ if (powerup.y > 2832) {
+ powerup.destroy();
+ powerups.splice(k, 1);
+ continue;
+ }
+ // Collection by surfer
+ if (!powerup.collected && surfer.intersects(powerup)) {
+ powerup.collected = true;
+ LK.setScore(LK.getScore() + 50);
+ LK.getSound('collect').play();
+ // Fade out effect
+ tween(powerup, {
+ alpha: 0,
+ scaleX: 2,
+ scaleY: 2
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ powerup.destroy();
+ }
+ });
+ powerups.splice(k, 1);
+ }
+ }
+ // Update score based on distance
+ if (LK.ticks % 10 === 0) {
+ LK.setScore(LK.getScore() + 1);
+ }
+ // Update UI
+ scoreText.setText('Score: ' + LK.getScore());
+ distanceText.setText('Distance: ' + Math.floor(distance / 10) + 'm');
+};
\ No newline at end of file