User prompt
move Cosmic Credits a bit lower
User prompt
put Cosmic Credits below High Score
User prompt
make a new currency named "Cosmic Credits" under High Score. 5 cosmic credits per enemy
User prompt
under high score, make a currency system called "Cosmic Credits"
User prompt
name the button test
User prompt
add an interactive button asset at the bottom left of the screen
User prompt
make the font size on the button 50
User prompt
change the button name to "10 Bullets: 50 Cosmic Credits"
User prompt
Fix Bug: 'TypeError: self.containsPoint is not a function' in this line: 'if (self.containsPoint(pos)) {' Line Number: 83
User prompt
Fix Bug: 'TypeError: self.containsPoint is not a function' in this line: 'if (self.containsPoint(pos)) {' Line Number: 83
User prompt
Fix Bug: 'TypeError: self.containsPoint is not a function' in this line: 'if (self.containsPoint(pos)) {' Line Number: 83
User prompt
at the bottom left of the screen, add a button
User prompt
put the button on the bottom left
User prompt
make the button grey so that it is visible
User prompt
make the button visible
User prompt
add button on the bottom left of the screen. Call the button "10 Bullets: 50 Cosmic Credits"
User prompt
remove the lower red line
User prompt
make enemy and bulletpack disappear and become null when hitting the red line
User prompt
move the red line to 5/8 of the screen
User prompt
make the hero a bit lower
User prompt
make the hero a bit loweer
User prompt
make the hero a bit lower
User prompt
make the bottom button a button
User prompt
if i have 50 cosmic credits and i press on the bottom button, i will gain 10 purplebullets
User prompt
the button should be interactive
/**** * Classes ****/ // BulletPack class var BulletPack = Container.expand(function () { var self = Container.call(this); var bulletPackGraphics = self.createAsset('bulletPack', 'Bullet Pack', 0.5, 0.5); self.speed = 4; self.direction = Math.random() < 0.5 ? -1 : 1; self.move = function () { var speedIncreaseFactor = 0.1 + LK.ticks * 0.0002; self.y += self.speed + speedIncreaseFactor; self.x += self.direction * (10 + speedIncreaseFactor); if (self.x < 0 || self.x > game.width) { self.direction *= -1; } }; }); // Character class var Hero = Container.expand(function () { var self = Container.call(this); var heroGraphics = self.createAsset('hero', 'Hero', 0.5, 0.5); self.bulletLimit = 3; // Initialize bullet limit self.canShoot = true; // Allow shooting initially self.update = function () { // Hero update logic }; self.shoot = function () { if (this.bulletLimit > 0 && this.canShoot) { var bullet = new Bullet(); bullet.x = this.x; bullet.y = this.y - this.height / 2; heroBullets.push(bullet); game.addChild(bullet); this.bulletLimit--; bulletCountTxt.setText('Bullets: ' + this.bulletLimit); // Update bullet count display this.canShoot = false; // Set shooting cooldown LK.setTimeout(function () { self.canShoot = true; }, 500); // Cooldown of 500ms before next shot } }; }); // Bullet class var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.createAsset('purpleBullet', 'Purple Bullet', 0.0625, 0.0625); self.speed = -10; self.move = function () { self.y += self.speed; }; }); // Enemy class var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.createAsset('enemy', 'Enemy character', 0.5, 0.5); self.speed = 4; self.direction = Math.random() < 0.5 ? -1 : 1; self.move = function () { self.y += self.speed; var speedIncreaseFactor = 0.1 + LK.ticks * 0.0002; // Increase the speed factor over time self.x += self.direction * (4 + speedIncreaseFactor); if (self.x < 0 || self.x > game.width) { self.direction *= -1; } self.speed += 0.02 + LK.ticks * 0.0001; // Increase speed over time with an accelerating factor }; }); var Button = Container.expand(function (text, positionX, positionY, onClickCallback) { var self = Container.call(this); var buttonText = new Text2(text, { size: 200, fill: "#ffffff" }); buttonText.anchor.set(0.5); self.addChild(buttonText); self.x = positionX; self.y = positionY; self.interactive = true; self.containsPoint = function (point) { var bounds = buttonText.getBounds(); return point.x >= bounds.x && point.x <= bounds.x + bounds.width && point.y >= bounds.y && point.y <= bounds.y + bounds.height; }; self.on('down', function (obj) { var event = obj.event; var pos = event.getLocalPosition(game); if (self.containsPoint(pos)) { onClickCallback(); } }); }); // JoystickAsset class var JoystickAsset = Container.expand(function () { var self = Container.call(this); self.interactive = true; self.isDragging = false; self.onMoveCallback = null; self.setMoveCallback = function (callback) { self.onMoveCallback = function (direction) { callback({ x: direction.x, y: 0 }); }; }; self.on('down', function (obj) { self.isDragging = true; }); self.on('up', function (obj) { self.isDragging = false; stickGraphics.x = stickOrigin.x; stickGraphics.y = stickOrigin.y; if (self.onMoveCallback) { self.onMoveCallback({ x: 0, y: 0 }); } }); self.on('move', function (obj) { if (self.isDragging) { var event = obj.event; var pos = event.getLocalPosition(self); var dx = pos.x - stickOrigin.x; var maxDistance = stickGraphics.width * 0.5; if (Math.abs(dx) > maxDistance) { dx = maxDistance * (dx > 0 ? 1 : -1); } stickGraphics.x = stickOrigin.x + dx; stickGraphics.y = stickOrigin.y; if (self.onMoveCallback) { self.onMoveCallback({ x: dx / maxDistance, y: 0 }); } } }); self.containsPoint = function (point) { return point.x >= self.x - self.width / 2 && point.x <= self.x + self.width / 2 && point.y >= self.y - self.height / 2 && point.y <= self.y + self.height / 2; }; }); // Button class var BottomButton = Container.expand(function (text, onClickCallback) { var self = Container.call(this); var buttonText = new Text2(text, { size: 100, fill: "#ffffff" }); buttonText.anchor.set(0.5); self.addChild(buttonText); self.y = game.height - buttonText.height / 2 - 50; // Position at the bottom of the screen self.x = buttonText.width / 2 + 50; // Position at the bottom left self.interactive = true; self.containsPoint = function (point) { var bounds = buttonText.getBounds(); return point.x >= bounds.x + self.x - buttonText.width / 2 && point.x <= bounds.x + self.x + buttonText.width / 2 && point.y >= bounds.y + self.y - buttonText.height / 2 && point.y <= bounds.y + self.y + buttonText.height / 2; }; self.on('down', function (obj) { var event = obj.event; var pos = event.getLocalPosition(game); if (self.containsPoint(pos)) { onClickCallback(); } }); }); var CosmicCredits = Container.expand(function () { var self = Container.call(this); self.amount = 0; self.creditTxt = new Text2('Cosmic Credits: 0', { size: 50, fill: "#ffffff" }); self.creditTxt.anchor.set(1, 0); self.creditTxt.y = highScoreTxt.height * 2 + 40; LK.gui.topRight.addChild(self.creditTxt); self.addCredits = function (amount) { self.amount += amount; self.creditTxt.setText('Cosmic Credits: ' + self.amount); }; self.spendCredits = function (amount) { if (self.amount >= amount) { self.amount -= amount; self.creditTxt.setText('Cosmic Credits: ' + self.amount); return true; } return false; }; }); /**** * Initialize Game ****/ // Create left movement button var game = new LK.Game({ title: '(WIP)', backgroundColor: 0x000000 // Init game with black background }); /**** * Game Code ****/ // Initialize important asset arrays var heroBullets = []; var enemies = []; // Create score display var scoreTxt = new Text2('Score: 0', { size: 50, fill: "#ffffff" }); var highScoreTxt = new Text2('High Score: 0 (WIP)', { size: 50, fill: "#ffffff" }); scoreTxt.anchor.set(1, 0); highScoreTxt.anchor.set(1, 0); highScoreTxt.y = scoreTxt.height + 20; LK.gui.topRight.addChild(scoreTxt); LK.gui.topRight.addChild(highScoreTxt); // Create a red line 3/4 down the screen var redLine = LK.getAsset('redLine', 'Horizontal Red Line', 0, 0); redLine.width = game.width; redLine.height = 5; redLine.y = game.height * 0.75; game.addChild(redLine); // Create character var hero = game.addChild(new Hero()); hero.x = game.width / 2; hero.y = redLine.y + hero.height / 2; var cosmicCredits = game.addChild(new CosmicCredits()); var highScoreTxt = new Text2('High Score: 0 (WIP)', { size: 50, fill: "#ffffff" }); scoreTxt.anchor.set(1, 0); highScoreTxt.anchor.set(1, 0); highScoreTxt.y = scoreTxt.height + 20; LK.gui.topRight.addChild(scoreTxt); LK.gui.topRight.addChild(highScoreTxt); // Create bullet count display var bulletCountTxt = new Text2('Bullets: 3', { size: 100, fill: "#ffffff" }); bulletCountTxt.anchor.set(0, 0); bulletCountTxt.y = scoreTxt.height + 50; // Position below the score display LK.gui.topLeft.addChild(bulletCountTxt); // Create instructions display var instructionsTxt = new Text2('Tap anywhere to shoot', { size: 50, fill: "#ffffff" }); instructionsTxt.anchor.set(0, 0); LK.gui.topLeft.addChild(instructionsTxt); // Create a red line 3/4 down the screen var redLine = LK.getAsset('redLine', 'Horizontal Red Line', 0, 0); redLine.width = game.width; redLine.height = 5; redLine.y = game.height * 0.75; game.addChild(redLine); // Create joystick instance var joystick = new JoystickAsset(); joystick.x = joystick.width / 2 + 150; joystick.y = game.height - joystick.height / 2 - 150; joystick.setMoveCallback(function (direction) { hero.x = Math.max(hero.width / 2, Math.min(game.width - hero.width / 2, hero.x + direction.x * 10)); }); game.addChild(joystick); // Handle hero dragging var dragNode = null; game.on('down', function (obj) { hero.shoot(); }); game.on('move', function (obj) { var event = obj.event; var pos = event.getLocalPosition(game); hero.x = pos.x; // hero.y = pos.y; // Removed the line that sets the hero's y position }); // Global event listener for shooting bullets // Game tick event LK.on('tick', function () { // Update character hero.update(); // Move and check bullets for (var i = heroBullets.length - 1; i >= 0; i--) { var bullet = heroBullets[i]; bullet.move(); // Check for bullet collision with enemies and bullet packs for (var j = enemies.length - 1; j >= 0; j--) { if (bullet.intersects(enemies[j])) { if (enemies[j] instanceof BulletPack) { // If the enemy is a bullet pack // Increment character's bullet limit by 5 hero.bulletLimit += 5; } else { // If the enemy is an actual enemy // Update score var newScore = LK.getScore() + 1; LK.setScore(newScore); scoreTxt.setText('Score: ' + newScore); var highScore = Math.max(newScore, Number((typeof localStorage !== 'undefined' ? localStorage.getItem('highScore') : '0') || '0')); highScoreTxt.setText('High Score: ' + highScore + ' (WIP)'); cosmicCredits.addCredits(5); // Award 5 Cosmic Credits for each enemy killed if (typeof localStorage !== 'undefined' && newScore > highScore) { localStorage.setItem('highScore', newScore.toString()); } // Increment character's bullet limit hero.bulletLimit++; } bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); // Update bullet count display // Destroy enemy/bullet pack and bullet enemies[j].destroy(); enemies.splice(j, 1); bullet.destroy(); heroBullets.splice(i, 1); break; } } // Remove off-screen bullets and end the game if it's the last one if (bullet.y < 0) { bullet.destroy(); heroBullets.splice(i, 1); if (heroBullets.length === 0 && hero.bulletLimit === 0) { LK.showGameOver(); // End the game when the last bullet is out of frame } } } // Move enemies and check if they pass the red line for (var k = enemies.length - 1; k >= 0; k--) { enemies[k].move(); if (enemies[k].y > game.height * 0.75) { enemies[k].destroy(); enemies[k] = null; enemies.splice(k, 1); } } var enemySpawnRate = 60; // Initialize enemy spawn rate // Spawn enemies and bullet packs if (LK.ticks % enemySpawnRate == 0) { var enemy = new Enemy(); enemy.x = Math.random() * (game.width - enemy.width) + enemy.width / 2; enemy.y = -enemy.height; enemies.push(enemy); game.addChild(enemy); if (enemySpawnRate > 30) { enemySpawnRate -= 0.5; } // Decrease spawn rate over time to a minimum of 30 ticks } if (LK.ticks % 600 == 0) { // Spawn a bullet pack every 600 ticks var bulletPack = new BulletPack(); bulletPack.x = Math.random() * (game.width - bulletPack.width) + bulletPack.width / 2; bulletPack.y = -bulletPack.height; enemies.push(bulletPack); // Add bullet pack to enemies array for collision detection game.addChild(bulletPack); } }); // Create BottomButton instance var bottomButton = new BottomButton('Bottom Button', function () { if (cosmicCredits.spendCredits(50)) { hero.bulletLimit += 10; bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); } }); game.addChild(bottomButton);
===================================================================
--- original.js
+++ change.js
@@ -177,8 +177,16 @@
self.addCredits = function (amount) {
self.amount += amount;
self.creditTxt.setText('Cosmic Credits: ' + self.amount);
};
+ self.spendCredits = function (amount) {
+ if (self.amount >= amount) {
+ self.amount -= amount;
+ self.creditTxt.setText('Cosmic Credits: ' + self.amount);
+ return true;
+ }
+ return false;
+ };
});
/****
* Initialize Game
@@ -349,8 +357,10 @@
}
});
// Create BottomButton instance
var bottomButton = new BottomButton('Bottom Button', function () {
- console.log('Bottom button was pressed');
- // Button click logic here
+ if (cosmicCredits.spendCredits(50)) {
+ hero.bulletLimit += 10;
+ bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
+ }
});
game.addChild(bottomButton);
\ No newline at end of file
android. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
letter X png. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
space background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
galaxy background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
galaxy background. High quality
space background.. High contrast