/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var CashOutButton = Container.expand(function () {
var self = Container.call(this);
var buttonBg = self.attachAsset('cashOutButton', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2('CASH OUT', {
size: 40,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.down = function (x, y, obj) {
if (gameState === 'flying') {
cashOut();
}
};
return self;
});
var Rocket = Container.expand(function () {
var self = Container.call(this);
var rocketGraphics = self.attachAsset('rocket', {
anchorX: 0.5,
anchorY: 1.0
});
var flame = self.attachAsset('flame', {
anchorX: 0.5,
anchorY: 0,
y: 5
});
self.speed = 0;
self.trailTimer = 0;
self.update = function () {
// Add flame animation
flame.scaleX = 0.8 + Math.sin(LK.ticks * 0.3) * 0.3;
flame.scaleY = 0.8 + Math.sin(LK.ticks * 0.2) * 0.4;
// Create trail particles
self.trailTimer++;
if (self.trailTimer % 3 === 0) {
var trail = new TrailParticle();
trail.x = self.x + (Math.random() - 0.5) * 20;
trail.y = self.y + 10;
game.addChild(trail);
trailParticles.push(trail);
}
};
return self;
});
var TrailParticle = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('trail', {
anchorX: 0.5,
anchorY: 0.5
});
self.life = 60;
self.maxLife = 60;
self.update = function () {
self.life--;
graphics.alpha = self.life / self.maxLife;
if (self.life <= 0) {
self.destroy();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x001122
});
/****
* Game Code
****/
// Game state variables
var gameState = 'betting'; // 'betting', 'flying', 'crashed'
var currentMultiplier = 1.0;
var betAmount = 10;
var crashPoint = 0;
var rocketStartY = 2400;
var rocketCurrentY = rocketStartY;
var flightStartTime = 0;
var hasPlayerCashedOut = false;
var playerBalance = storage.balance || 1000;
var trailParticles = [];
var previousCrashes = storage.crashes || [];
// UI Elements
var backgroundGraphics = game.attachAsset('background', {
anchorX: 0,
anchorY: 0
});
var rocket = new Rocket();
rocket.x = 1024;
rocket.y = rocketStartY;
game.addChild(rocket);
var multiplierText = new Text2('1.00x', {
size: 80,
fill: 0xFFFFFF
});
multiplierText.anchor.set(0.5, 0);
LK.gui.top.addChild(multiplierText);
multiplierText.y = 200;
var balanceText = new Text2('Balance: $' + playerBalance, {
size: 40,
fill: 0xFFFFFF
});
balanceText.anchor.set(0, 0);
LK.gui.topRight.addChild(balanceText);
balanceText.x = -20;
balanceText.y = 20;
var betText = new Text2('Bet: $' + betAmount, {
size: 50,
fill: 0xFFFFFF
});
betText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(betText);
betText.y = -200;
var statusText = new Text2('Place your bet and tap to launch!', {
size: 40,
fill: 0xFFFF00
});
statusText.anchor.set(0.5, 0.5);
LK.gui.center.addChild(statusText);
var cashOutButton = new CashOutButton();
cashOutButton.x = 1024;
cashOutButton.y = 2200;
cashOutButton.alpha = 0;
game.addChild(cashOutButton);
var betButton = game.attachAsset('betButton', {
anchorX: 0.5,
anchorY: 1,
x: 1024,
y: 2600
});
var betButtonText = new Text2('LAUNCH ($' + betAmount + ')', {
size: 30,
fill: 0xFFFFFF
});
betButtonText.anchor.set(0.5, 0.5);
betButtonText.x = 1024;
betButtonText.y = 2570;
game.addChild(betButtonText);
// Previous crashes display
var crashHistoryText = new Text2('Previous crashes: ' + (previousCrashes.length > 0 ? previousCrashes.slice(-5).join('x, ') + 'x' : 'None'), {
size: 30,
fill: 0x888888
});
crashHistoryText.anchor.set(0.5, 0);
LK.gui.top.addChild(crashHistoryText);
crashHistoryText.y = 120;
function generateCrashPoint() {
// Generate crash point between 1.01x and 10.00x with higher probability for lower values
var random = Math.random();
if (random < 0.5) {
return 1.01 + Math.random() * 1.99; // 1.01x - 3.00x (50% chance)
} else if (random < 0.8) {
return 3.0 + Math.random() * 2.0; // 3.00x - 5.00x (30% chance)
} else {
return 5.0 + Math.random() * 5.0; // 5.00x - 10.00x (20% chance)
}
}
function startRound() {
if (playerBalance < betAmount) {
statusText.setText('Insufficient balance!');
return;
}
gameState = 'flying';
playerBalance -= betAmount;
hasPlayerCashedOut = false;
crashPoint = generateCrashPoint();
flightStartTime = LK.ticks;
rocketCurrentY = rocketStartY;
currentMultiplier = 1.0;
// Update UI
balanceText.setText('Balance: $' + Math.floor(playerBalance));
statusText.setText('Cash out before it crashes!');
// Show cash out button
tween(cashOutButton, {
alpha: 1
}, {
duration: 300
});
// Hide bet button
tween(betButton, {
alpha: 0
}, {
duration: 300
});
tween(betButtonText, {
alpha: 0
}, {
duration: 300
});
LK.getSound('launch').play();
}
function cashOut() {
if (gameState !== 'flying' || hasPlayerCashedOut) return;
hasPlayerCashedOut = true;
var winnings = Math.floor(betAmount * currentMultiplier);
playerBalance += winnings;
statusText.setText('Cashed out! Won $' + winnings);
balanceText.setText('Balance: $' + Math.floor(playerBalance));
// Hide cash out button
tween(cashOutButton, {
alpha: 0
}, {
duration: 300
});
LK.getSound('cashout').play();
// End round after delay
LK.setTimeout(function () {
endRound();
}, 2000);
}
function crashRocket() {
gameState = 'crashed';
if (!hasPlayerCashedOut) {
statusText.setText('CRASHED! You lost $' + betAmount);
}
// Add crash point to history
previousCrashes.push(parseFloat(currentMultiplier.toFixed(2)));
if (previousCrashes.length > 10) {
previousCrashes.shift();
}
// Flash screen red
LK.effects.flashScreen(0xff0000, 500);
// Hide cash out button
tween(cashOutButton, {
alpha: 0
}, {
duration: 300
});
LK.getSound('crash').play();
// End round after delay
LK.setTimeout(function () {
endRound();
}, 2000);
}
function endRound() {
gameState = 'betting';
// Reset rocket position
rocket.y = rocketStartY;
rocketCurrentY = rocketStartY;
// Clear trail particles
for (var i = trailParticles.length - 1; i >= 0; i--) {
trailParticles[i].destroy();
trailParticles.splice(i, 1);
}
// Show bet button
betButton.alpha = 1;
betButtonText.alpha = 1;
betButtonText.setText('LAUNCH ($' + betAmount + ')');
// Update crash history
crashHistoryText.setText('Previous crashes: ' + (previousCrashes.length > 0 ? previousCrashes.slice(-5).join('x, ') + 'x' : 'None'));
statusText.setText('Place your bet and tap to launch!');
// Save data
storage.balance = playerBalance;
storage.crashes = previousCrashes;
}
// Event handlers
game.down = function (x, y, obj) {
var localPos = game.toLocal({
x: x,
y: y
});
// Check if bet button was clicked
if (gameState === 'betting' && localPos.x > betButton.x - 100 && localPos.x < betButton.x + 100 && localPos.y > betButton.y - 30 && localPos.y < betButton.y + 30) {
startRound();
}
};
game.update = function () {
// Update trail particles
for (var i = trailParticles.length - 1; i >= 0; i--) {
if (trailParticles[i] && trailParticles[i].life <= 0) {
trailParticles.splice(i, 1);
}
}
if (gameState === 'flying') {
// Calculate flight time and multiplier
var flightTime = (LK.ticks - flightStartTime) / 60; // Convert to seconds
currentMultiplier = 1.0 + flightTime * 0.5; // Multiplier increases by 0.5 per second
// Update rocket position (move up as multiplier increases)
var progress = (currentMultiplier - 1.0) / 9.0; // Progress from 0 to 1 over 9x multiplier
rocket.y = rocketStartY - progress * 1800;
// Add slight wobble to rocket
rocket.x = 1024 + Math.sin(LK.ticks * 0.1) * 10;
// Update multiplier display
multiplierText.setText(currentMultiplier.toFixed(2) + 'x');
// Check if rocket should crash
if (currentMultiplier >= crashPoint && !hasPlayerCashedOut) {
crashRocket();
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,305 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var CashOutButton = Container.expand(function () {
+ var self = Container.call(this);
+ var buttonBg = self.attachAsset('cashOutButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var buttonText = new Text2('CASH OUT', {
+ size: 40,
+ fill: 0xFFFFFF
+ });
+ buttonText.anchor.set(0.5, 0.5);
+ self.addChild(buttonText);
+ self.down = function (x, y, obj) {
+ if (gameState === 'flying') {
+ cashOut();
+ }
+ };
+ return self;
+});
+var Rocket = Container.expand(function () {
+ var self = Container.call(this);
+ var rocketGraphics = self.attachAsset('rocket', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ var flame = self.attachAsset('flame', {
+ anchorX: 0.5,
+ anchorY: 0,
+ y: 5
+ });
+ self.speed = 0;
+ self.trailTimer = 0;
+ self.update = function () {
+ // Add flame animation
+ flame.scaleX = 0.8 + Math.sin(LK.ticks * 0.3) * 0.3;
+ flame.scaleY = 0.8 + Math.sin(LK.ticks * 0.2) * 0.4;
+ // Create trail particles
+ self.trailTimer++;
+ if (self.trailTimer % 3 === 0) {
+ var trail = new TrailParticle();
+ trail.x = self.x + (Math.random() - 0.5) * 20;
+ trail.y = self.y + 10;
+ game.addChild(trail);
+ trailParticles.push(trail);
+ }
+ };
+ return self;
+});
+var TrailParticle = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('trail', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.life = 60;
+ self.maxLife = 60;
+ self.update = function () {
+ self.life--;
+ graphics.alpha = self.life / self.maxLife;
+ if (self.life <= 0) {
+ self.destroy();
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x001122
+});
+
+/****
+* Game Code
+****/
+// Game state variables
+var gameState = 'betting'; // 'betting', 'flying', 'crashed'
+var currentMultiplier = 1.0;
+var betAmount = 10;
+var crashPoint = 0;
+var rocketStartY = 2400;
+var rocketCurrentY = rocketStartY;
+var flightStartTime = 0;
+var hasPlayerCashedOut = false;
+var playerBalance = storage.balance || 1000;
+var trailParticles = [];
+var previousCrashes = storage.crashes || [];
+// UI Elements
+var backgroundGraphics = game.attachAsset('background', {
+ anchorX: 0,
+ anchorY: 0
+});
+var rocket = new Rocket();
+rocket.x = 1024;
+rocket.y = rocketStartY;
+game.addChild(rocket);
+var multiplierText = new Text2('1.00x', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+multiplierText.anchor.set(0.5, 0);
+LK.gui.top.addChild(multiplierText);
+multiplierText.y = 200;
+var balanceText = new Text2('Balance: $' + playerBalance, {
+ size: 40,
+ fill: 0xFFFFFF
+});
+balanceText.anchor.set(0, 0);
+LK.gui.topRight.addChild(balanceText);
+balanceText.x = -20;
+balanceText.y = 20;
+var betText = new Text2('Bet: $' + betAmount, {
+ size: 50,
+ fill: 0xFFFFFF
+});
+betText.anchor.set(0.5, 1);
+LK.gui.bottom.addChild(betText);
+betText.y = -200;
+var statusText = new Text2('Place your bet and tap to launch!', {
+ size: 40,
+ fill: 0xFFFF00
+});
+statusText.anchor.set(0.5, 0.5);
+LK.gui.center.addChild(statusText);
+var cashOutButton = new CashOutButton();
+cashOutButton.x = 1024;
+cashOutButton.y = 2200;
+cashOutButton.alpha = 0;
+game.addChild(cashOutButton);
+var betButton = game.attachAsset('betButton', {
+ anchorX: 0.5,
+ anchorY: 1,
+ x: 1024,
+ y: 2600
+});
+var betButtonText = new Text2('LAUNCH ($' + betAmount + ')', {
+ size: 30,
+ fill: 0xFFFFFF
+});
+betButtonText.anchor.set(0.5, 0.5);
+betButtonText.x = 1024;
+betButtonText.y = 2570;
+game.addChild(betButtonText);
+// Previous crashes display
+var crashHistoryText = new Text2('Previous crashes: ' + (previousCrashes.length > 0 ? previousCrashes.slice(-5).join('x, ') + 'x' : 'None'), {
+ size: 30,
+ fill: 0x888888
+});
+crashHistoryText.anchor.set(0.5, 0);
+LK.gui.top.addChild(crashHistoryText);
+crashHistoryText.y = 120;
+function generateCrashPoint() {
+ // Generate crash point between 1.01x and 10.00x with higher probability for lower values
+ var random = Math.random();
+ if (random < 0.5) {
+ return 1.01 + Math.random() * 1.99; // 1.01x - 3.00x (50% chance)
+ } else if (random < 0.8) {
+ return 3.0 + Math.random() * 2.0; // 3.00x - 5.00x (30% chance)
+ } else {
+ return 5.0 + Math.random() * 5.0; // 5.00x - 10.00x (20% chance)
+ }
+}
+function startRound() {
+ if (playerBalance < betAmount) {
+ statusText.setText('Insufficient balance!');
+ return;
+ }
+ gameState = 'flying';
+ playerBalance -= betAmount;
+ hasPlayerCashedOut = false;
+ crashPoint = generateCrashPoint();
+ flightStartTime = LK.ticks;
+ rocketCurrentY = rocketStartY;
+ currentMultiplier = 1.0;
+ // Update UI
+ balanceText.setText('Balance: $' + Math.floor(playerBalance));
+ statusText.setText('Cash out before it crashes!');
+ // Show cash out button
+ tween(cashOutButton, {
+ alpha: 1
+ }, {
+ duration: 300
+ });
+ // Hide bet button
+ tween(betButton, {
+ alpha: 0
+ }, {
+ duration: 300
+ });
+ tween(betButtonText, {
+ alpha: 0
+ }, {
+ duration: 300
+ });
+ LK.getSound('launch').play();
+}
+function cashOut() {
+ if (gameState !== 'flying' || hasPlayerCashedOut) return;
+ hasPlayerCashedOut = true;
+ var winnings = Math.floor(betAmount * currentMultiplier);
+ playerBalance += winnings;
+ statusText.setText('Cashed out! Won $' + winnings);
+ balanceText.setText('Balance: $' + Math.floor(playerBalance));
+ // Hide cash out button
+ tween(cashOutButton, {
+ alpha: 0
+ }, {
+ duration: 300
+ });
+ LK.getSound('cashout').play();
+ // End round after delay
+ LK.setTimeout(function () {
+ endRound();
+ }, 2000);
+}
+function crashRocket() {
+ gameState = 'crashed';
+ if (!hasPlayerCashedOut) {
+ statusText.setText('CRASHED! You lost $' + betAmount);
+ }
+ // Add crash point to history
+ previousCrashes.push(parseFloat(currentMultiplier.toFixed(2)));
+ if (previousCrashes.length > 10) {
+ previousCrashes.shift();
+ }
+ // Flash screen red
+ LK.effects.flashScreen(0xff0000, 500);
+ // Hide cash out button
+ tween(cashOutButton, {
+ alpha: 0
+ }, {
+ duration: 300
+ });
+ LK.getSound('crash').play();
+ // End round after delay
+ LK.setTimeout(function () {
+ endRound();
+ }, 2000);
+}
+function endRound() {
+ gameState = 'betting';
+ // Reset rocket position
+ rocket.y = rocketStartY;
+ rocketCurrentY = rocketStartY;
+ // Clear trail particles
+ for (var i = trailParticles.length - 1; i >= 0; i--) {
+ trailParticles[i].destroy();
+ trailParticles.splice(i, 1);
+ }
+ // Show bet button
+ betButton.alpha = 1;
+ betButtonText.alpha = 1;
+ betButtonText.setText('LAUNCH ($' + betAmount + ')');
+ // Update crash history
+ crashHistoryText.setText('Previous crashes: ' + (previousCrashes.length > 0 ? previousCrashes.slice(-5).join('x, ') + 'x' : 'None'));
+ statusText.setText('Place your bet and tap to launch!');
+ // Save data
+ storage.balance = playerBalance;
+ storage.crashes = previousCrashes;
+}
+// Event handlers
+game.down = function (x, y, obj) {
+ var localPos = game.toLocal({
+ x: x,
+ y: y
+ });
+ // Check if bet button was clicked
+ if (gameState === 'betting' && localPos.x > betButton.x - 100 && localPos.x < betButton.x + 100 && localPos.y > betButton.y - 30 && localPos.y < betButton.y + 30) {
+ startRound();
+ }
+};
+game.update = function () {
+ // Update trail particles
+ for (var i = trailParticles.length - 1; i >= 0; i--) {
+ if (trailParticles[i] && trailParticles[i].life <= 0) {
+ trailParticles.splice(i, 1);
+ }
+ }
+ if (gameState === 'flying') {
+ // Calculate flight time and multiplier
+ var flightTime = (LK.ticks - flightStartTime) / 60; // Convert to seconds
+ currentMultiplier = 1.0 + flightTime * 0.5; // Multiplier increases by 0.5 per second
+ // Update rocket position (move up as multiplier increases)
+ var progress = (currentMultiplier - 1.0) / 9.0; // Progress from 0 to 1 over 9x multiplier
+ rocket.y = rocketStartY - progress * 1800;
+ // Add slight wobble to rocket
+ rocket.x = 1024 + Math.sin(LK.ticks * 0.1) * 10;
+ // Update multiplier display
+ multiplierText.setText(currentMultiplier.toFixed(2) + 'x');
+ // Check if rocket should crash
+ if (currentMultiplier >= crashPoint && !hasPlayerCashedOut) {
+ crashRocket();
+ }
+ }
+};
\ No newline at end of file