Code edit (1 edits merged)
Please save this source code
User prompt
Every 0.5 seconds, spawn a rectangular dollar bill behind the arrow matching the direction of the arrow. If the arrow is facing northeast, the spawned dollar bill should be green. If the arrow is facing southeast, the spawned dollar bill should be red.
Code edit (3 edits merged)
Please save this source code
User prompt
Use a continuous tiled background.
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'tileSprite is not defined' in or related to this line: 'var background = tileSprite.create(backgroundTexture, 2048, 2732);' Line Number: 177
User prompt
Please fix the bug: 'tileSprite is not defined' in or related to this line: 'var background = tileSprite.create(backgroundTexture, 2048, 2732);' Line Number: 177
User prompt
Please fix the bug: 'LK.TilingSprite is not a constructor' in or related to this line: 'var background = new LK.TilingSprite(backgroundTexture, 2048, 2732);' Line Number: 177
User prompt
The background should repeat instead of being resized.
User prompt
Please fix the bug: 'TilingSprite is not defined' in or related to this line: 'var background = new TilingSprite(LK.getAsset('background', {}), 10000, 10000);' Line Number: 170
User prompt
Please fix the bug: 'TilingSprite is not defined' in or related to this line: 'var background = new TilingSprite(LK.getAsset('background', {}), 10000, 10000);' Line Number: 170
User prompt
The background should be tiled across instead of resizing.
User prompt
There shouldn't be any X-axis boundaries either
User prompt
There shouldn't be any boundaries for the arrow.
User prompt
The game needs to expand as the player goes northeast, so the arrow can continue rising.
Code edit (1 edits merged)
Please save this source code
User prompt
Create a square-shaped spawning zone for bonuses and obstacles with a width of 400 pixels and a lower-left corner origin located at 2048,0.
User prompt
The obstacles and bonuses themselves should not move, it should just be the arrow itself moving towards the obstacles and bonuses and the camera following the arrow.
User prompt
The obstacles and bonuses should randomly spawn relative to the position of the arrow just beyond the edge of the screen near the upper-right corner. Once they spawn, as the arrow moves in their general direction (northeast), the obstacles will be within the camera view where the arrow will need to maneuver around them.
User prompt
The obstacles and bonuses should move southwest (towards the lower-left corner of the screen).
User prompt
Randomly spawn obstacles and bonuses off-screen around the upper-right corner of the screen, so that as the arrow goes in that direction it will need to maneuver around them.
User prompt
Invert movement so that when the player is touching the screen the arrow goes northeast and when the player is not touching the screen the arrow goes southeast.
User prompt
Make the game end if the stonk market cap reaches -10.
User prompt
The score (the stonk market cap) should actually decrease if the player is going southeast.
User prompt
The game should only increase the score (the stonk market cap) when the player is going northeast or when grabbing a bonus, not when the player is going southeast.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Arrow = Container.expand(function () { var self = Container.call(this); var arrowGraphics = self.attachAsset('arrow', { anchorX: 0.5, anchorY: 0.5 }); self.direction = "northeast"; // Starting direction self.speed = 8; // Movement speed self.path = []; // Track arrow's path self.update = function () { // Move based on current touch state if (!game.isTouching) { // Not touching - go northeast self.direction = "northeast"; self.x += self.speed; self.y -= self.speed; arrowGraphics.rotation = -Math.PI / 4; // 45 degrees up } else { // Touching - go southeast self.direction = "southeast"; self.x += self.speed; self.y += self.speed; arrowGraphics.rotation = Math.PI / 4; // 45 degrees down } // Record path for replay at game end if (game.ticks % 5 === 0) { self.path.push({ x: self.x, y: self.y }); } }; // Direction is now controlled by touch state in update method return self; }); var Bonus = Container.expand(function () { var self = Container.call(this); var bonusGraphics = self.attachAsset('bonus', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -8; self.collected = false; self.update = function () { // Bonuses are stationary, only rotate bonusGraphics.rotation += 0.05; }; self.collect = function () { self.collected = true; tween(bonusGraphics, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 300, easing: tween.easeOut }); }; return self; }); var DollarBill = Container.expand(function (direction) { var self = Container.call(this); var color = direction === "northeast" ? 0x00FF00 : 0xFF0000; var dollarGraphics = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5, tint: color }); dollarGraphics.rotation = Math.random() * Math.PI * 2; // Random rotation dollarGraphics.scale.set(0.8, 0.5); // Make it more bill-shaped 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 = -10; self.update = function () { // Obstacles are stationary }; return self; }); var StonksText = Container.expand(function (message, color) { var self = Container.call(this); var text = new Text2(message || "STONKS!", { size: 100, fill: color || "#00FF00" }); text.anchor.set(0.5, 0.5); self.addChild(text); self.animate = function () { self.alpha = 1; tween(self, { alpha: 0, y: self.y - 200 }, { duration: 1500, easing: tween.easeOut }); tween(self.scale, { x: 2, y: 2 }, { duration: 1500, easing: tween.easeOut }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x0066ff }); /**** * Game Code ****/ // Game variables // Track if the screen is being touched game.isTouching = false; var gameStarted = false; // Track if the game has been started by the first touch var Camera = function Camera() { this.target = null; this.container = null; this.offsetX = 0; this.offsetY = 0; this.init = function (container) { this.container = container; }; this.setTarget = function (target) { this.target = target; }; this.setOffset = function (x, y) { this.offsetX = x; this.offsetY = y; }; this.update = function () { if (!this.target || !this.container) { return; } // Move the container in the opposite direction of target this.container.x = this.offsetX - this.target.x; this.container.y = this.offsetY - this.target.y; }; }; var camera = new Camera(); var arrow; var obstacles = []; var bonuses = []; var stonksTexts = []; var dollarBills = []; var lastObstacleTime = 0; var lastBonusTime = 0; var lastDollarTime = 0; var marketCap = 0; var gameActive = true; // Create background var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2, width: 10000, height: 10000 }); game.addChild(background); // Create GUI elements var marketCapText = new Text2("Stonk Market Cap: $0.00", { size: 60, fill: 0xFFFFFF }); marketCapText.anchor.set(0.5, 0); LK.gui.top.addChild(marketCapText); marketCapText.visible = false; // Hide initially // Create startup logo var logoText = new Text2("Stonks Go Up", { size: 150, fill: 0x00FF00 }); logoText.anchor.set(0.5, 0.5); logoText.x = 2048 / 2; logoText.y = 2732 / 2; game.addChild(logoText); // Add tap to start instruction var startInstructionText = new Text2("Tap to Start", { size: 80, fill: 0xFFFFFF }); startInstructionText.anchor.set(0.5, 0.5); startInstructionText.x = 2048 / 2; startInstructionText.y = 2732 / 2 + 200; game.addChild(startInstructionText); // Make the text pulse tween(startInstructionText.scale, { x: 1.1, y: 1.1 }, { duration: 800, easing: tween.easeInOut, loop: -1, yoyo: true }); // Create arrow arrow = new Arrow(); arrow.x = 300; arrow.y = 2732 / 2; game.addChild(arrow); // Setup camera to follow arrow camera.init(game); camera.setTarget(arrow); camera.setOffset(2048 / 2, 2732 / 2); // Center the camera on the arrow // Play background music LK.playMusic('bgMusic'); // Handle touch events game.down = function (x, y, obj) { if (!gameStarted) { // First touch - start the game gameStarted = true; // Hide the logo and instruction tween(logoText, { alpha: 0 }, { duration: 500, easing: tween.easeOut, onComplete: function onComplete() { logoText.destroy(); } }); tween(startInstructionText, { alpha: 0 }, { duration: 500, easing: tween.easeOut, onComplete: function onComplete() { startInstructionText.destroy(); } }); // Show the market cap text marketCapText.visible = true; // Set touch state game.isTouching = true; } else if (gameActive) { game.isTouching = true; } }; game.up = function (x, y, obj) { if (gameActive) { game.isTouching = false; } }; // Generate obstacles function createObstacle() { var obstacle = new Obstacle(); // Get visible screen bounds relative to arrow var screenRight = arrow.x + 1024; // Half screen width var screenTop = arrow.y - 1366; // Half screen height // Spawn obstacles just beyond the upper-right corner of visible screen var spawnRegion = Math.random(); if (spawnRegion < 0.7) { // Spawn to the right obstacle.x = screenRight + Math.random() * 400; // Just off-screen to the right obstacle.y = arrow.y - Math.random() * 800; // Spread around arrow's height } else { // Spawn above obstacle.x = arrow.x + Math.random() * 800; // Spread to the right of arrow obstacle.y = screenTop - Math.random() * 300; // Just above the visible screen } obstacles.push(obstacle); game.addChild(obstacle); } // Generate bonuses function createBonus() { var bonus = new Bonus(); // Get visible screen bounds relative to arrow var screenRight = arrow.x + 1024; // Half screen width var screenTop = arrow.y - 1366; // Half screen height // Spawn bonuses just beyond the upper-right corner of visible screen var spawnRegion = Math.random(); if (spawnRegion < 0.6) { // Spawn to the right bonus.x = screenRight + Math.random() * 500; // Just off-screen to the right bonus.y = arrow.y - Math.random() * 700; // Spread around arrow's height } else { // Spawn above bonus.x = arrow.x + Math.random() * 700; // Spread to the right of arrow bonus.y = screenTop - Math.random() * 300; // Just above the visible screen } bonuses.push(bonus); game.addChild(bonus); } // Create dollar bill behind arrow function createDollarBill() { if (!arrow || !gameActive) { return; } var dollarBill = new DollarBill(arrow.direction); // Position the dollar bill behind the arrow based on direction if (arrow.direction === "northeast") { dollarBill.x = arrow.x - 50; dollarBill.y = arrow.y + 50; } else { dollarBill.x = arrow.x - 50; dollarBill.y = arrow.y - 50; } dollarBills.push(dollarBill); game.addChild(dollarBill); } // Create stonks text popup function createStonksText(isPositive, x, y) { var message = isPositive ? "STONKS!" : "NOT STONKS!"; var color = isPositive ? "#00FF00" : "#FF0000"; var stonksText = new StonksText(message, color); stonksText.x = x; stonksText.y = y; stonksText.animate(); stonksTexts.push(stonksText); game.addChild(stonksText); } // Game update loop game.update = function () { if (!gameStarted || !gameActive) { return; } // Update the camera to follow the arrow camera.update(); // Create obstacles at regular intervals if (game.ticks - lastObstacleTime > 60) { createObstacle(); lastObstacleTime = game.ticks; } // Create bonuses less frequently if (game.ticks - lastBonusTime > 180) { createBonus(); lastBonusTime = game.ticks; } // Create dollar bills every 0.5 seconds (30 ticks) if (game.ticks - lastDollarTime > 30) { createDollarBill(); lastDollarTime = game.ticks; } // Update marketCap - increase when going northeast, decrease when going southeast if (arrow.direction === "northeast") { marketCap += 1; } else if (arrow.direction === "southeast") { marketCap -= 1; } // Check if market cap has reached game-ending threshold of -10 if (marketCap <= -10 && gameActive) { // Game over gameActive = false; createStonksText(false, arrow.x, arrow.y); LK.getSound('crash').play(); // Flash screen red LK.effects.flashScreen(0xFF0000, 1000); // Show game over LK.setTimeout(function () { LK.setScore(marketCap); LK.showGameOver(); }, 1500); } marketCapText.setText("Stonk Market Cap: $" + marketCap + ".00"); // Check if obstacles are completely off-screen relative to arrow position for (var i = obstacles.length - 1; i >= 0; i--) { // Only remove obstacles that are far behind the arrow (to the left) if (obstacles[i].x < arrow.x - 1500) { obstacles[i].destroy(); obstacles.splice(i, 1); } } // Check for bonuses that are far behind the arrow for (var i = bonuses.length - 1; i >= 0; i--) { if (bonuses[i].x < arrow.x - 1500 || bonuses[i].collected) { bonuses[i].destroy(); bonuses.splice(i, 1); } } // Remove faded stonks texts for (var i = stonksTexts.length - 1; i >= 0; i--) { if (stonksTexts[i].alpha <= 0) { stonksTexts[i].destroy(); stonksTexts.splice(i, 1); } } // Clean up dollar bills that are far behind the arrow for (var i = dollarBills.length - 1; i >= 0; i--) { if (dollarBills[i].x < arrow.x - 1500) { dollarBills[i].destroy(); dollarBills.splice(i, 1); } } // Check for collisions with obstacles for (var i = 0; i < obstacles.length; i++) { if (arrow.intersects(obstacles[i])) { // Game over gameActive = false; createStonksText(false, arrow.x, arrow.y); LK.getSound('crash').play(); // Flash screen red LK.effects.flashScreen(0xFF0000, 1000); // Show game over LK.setTimeout(function () { LK.setScore(marketCap); LK.showGameOver(); }, 1500); break; } } // Check for collisions with bonuses for (var i = bonuses.length - 1; i >= 0; i--) { if (!bonuses[i].collected && arrow.intersects(bonuses[i])) { // Collect bonus bonuses[i].collect(); LK.getSound('collect').play(); // Add bonus score var bonusValue = Math.floor(Math.random() * 500) + 500; marketCap += bonusValue; // Show stonks text createStonksText(true, arrow.x, arrow.y); // Flash screen green LK.effects.flashScreen(0x00FF00, 300); } } // Objects don't move, so no need to increase difficulty by changing their speed };
===================================================================
--- original.js
+++ change.js
@@ -66,8 +66,20 @@
});
};
return self;
});
+var DollarBill = Container.expand(function (direction) {
+ var self = Container.call(this);
+ var color = direction === "northeast" ? 0x00FF00 : 0xFF0000;
+ var dollarGraphics = self.attachAsset('obstacle', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ tint: color
+ });
+ dollarGraphics.rotation = Math.random() * Math.PI * 2; // Random rotation
+ dollarGraphics.scale.set(0.8, 0.5); // Make it more bill-shaped
+ return self;
+});
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
@@ -149,10 +161,12 @@
var arrow;
var obstacles = [];
var bonuses = [];
var stonksTexts = [];
+var dollarBills = [];
var lastObstacleTime = 0;
var lastBonusTime = 0;
+var lastDollarTime = 0;
var marketCap = 0;
var gameActive = true;
// Create background
var background = LK.getAsset('background', {
@@ -287,8 +301,25 @@
}
bonuses.push(bonus);
game.addChild(bonus);
}
+// Create dollar bill behind arrow
+function createDollarBill() {
+ if (!arrow || !gameActive) {
+ return;
+ }
+ var dollarBill = new DollarBill(arrow.direction);
+ // Position the dollar bill behind the arrow based on direction
+ if (arrow.direction === "northeast") {
+ dollarBill.x = arrow.x - 50;
+ dollarBill.y = arrow.y + 50;
+ } else {
+ dollarBill.x = arrow.x - 50;
+ dollarBill.y = arrow.y - 50;
+ }
+ dollarBills.push(dollarBill);
+ game.addChild(dollarBill);
+}
// Create stonks text popup
function createStonksText(isPositive, x, y) {
var message = isPositive ? "STONKS!" : "NOT STONKS!";
var color = isPositive ? "#00FF00" : "#FF0000";
@@ -315,8 +346,13 @@
if (game.ticks - lastBonusTime > 180) {
createBonus();
lastBonusTime = game.ticks;
}
+ // Create dollar bills every 0.5 seconds (30 ticks)
+ if (game.ticks - lastDollarTime > 30) {
+ createDollarBill();
+ lastDollarTime = game.ticks;
+ }
// Update marketCap - increase when going northeast, decrease when going southeast
if (arrow.direction === "northeast") {
marketCap += 1;
} else if (arrow.direction === "southeast") {
@@ -358,8 +394,15 @@
stonksTexts[i].destroy();
stonksTexts.splice(i, 1);
}
}
+ // Clean up dollar bills that are far behind the arrow
+ for (var i = dollarBills.length - 1; i >= 0; i--) {
+ if (dollarBills[i].x < arrow.x - 1500) {
+ dollarBills[i].destroy();
+ dollarBills.splice(i, 1);
+ }
+ }
// Check for collisions with obstacles
for (var i = 0; i < obstacles.length; i++) {
if (arrow.intersects(obstacles[i])) {
// Game over
arrow pointing to the right like on a stock market ticker. No shadows
cartoonish dollar bill. In-Game asset. 2d. High contrast. No shadows
green stock market chart candle. In-Game asset. 2d. High contrast. No shadows
red stock market chart candle. In-Game asset. 2d. High contrast. No shadows
screen-wrappable repeating blue grid on dark background. In-Game asset. 2d. High contrast. No shadows
white full moon. In-Game asset. 2d. High contrast. No shadows