Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'ReferenceError: joystickBaseGraphics is not defined' in or related to this line: 'var maxDistance = joystickBaseGraphics.width / 2;' Line Number: 146
User prompt
Fix Bug: 'ReferenceError: easyMenuPage is not defined' in or related to this line: 'LK.showMenuPage(easyMenuPage);' Line Number: 409
User prompt
Fix Bug: 'ReferenceError: baseGraphics is not defined' in or related to this line: 'var maxDistance = baseGraphics.width / 2;' Line Number: 146
User prompt
Fix Bug: 'Point is not a constructor' in or related to this line: 'self.anchor = new Point();' Line Number: 93
User prompt
Fix Bug: 'Point is not a constructor' in or related to this line: 'self.anchor = new Point();' Line Number: 93
User prompt
Fix Bug: 'Uncaught TypeError: Point is not a constructor' in or related to this line: 'self.anchor = new Point();' Line Number: 93
User prompt
Fix Bug: 'Uncaught TypeError: Point is not a constructor' in or related to this line: 'self.anchor = new Point();' Line Number: 93
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'Uncaught TypeError: Point is not a constructor' in or related to this line: 'self.anchor = new Point();' Line Number: 93
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: hero.hitTestObject is not a function' in or related to this line: 'if (hero.hitTestObject(enemy)) {' Line Number: 275
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'set')' in or related to this line: 'startButton.anchor.set(0.5, 0);' Line Number: 410
User prompt
Fix Bug: 'Uncaught TypeError: LK.Text2 is not a constructor' in or related to this line: 'var title = new LK.Text2('Game Title', {' Line Number: 401
User prompt
Fix Bug: 'Uncaught TypeError: LK.Container is not a constructor' in or related to this line: 'var mainMenuPage = new LK.Container();' Line Number: 400
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'load')' in or related to this line: 'LK.loader.load(function () {' Line Number: 397
User prompt
Fix Bug: 'Uncaught TypeError: LK.showLoader is not a function' in or related to this line: 'LK.showLoader();' Line Number: 395
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'set')' in or related to this line: 'startButton.anchor.set(0.5, 0);' Line Number: 313
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'Uncaught TypeError: Point is not a constructor' in or related to this line: 'self.anchor = new Point();' Line Number: 94
User prompt
Fix Bug: 'Uncaught TypeError: Point is not a constructor' in or related to this line: 'self.anchor = new Point();' Line Number: 94
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'Point is not a constructor' in or related to this line: 'self.anchor = new Point();' Line Number: 94
User prompt
Fix Bug: 'Uncaught TypeError: Point is not a constructor' in or related to this line: 'self.anchor = new Point();' Line Number: 94
User prompt
Fix Bug: 'Uncaught TypeError: Point is not a constructor' in or related to this line: 'self.anchor = new Point();' Line Number: 94
/**** * Classes ****/ var PurchaseButtonWithText = Container.expand(function (buttonAssetId, buttonText, buttonSubText, positionX, positionY, onClickCallback) { var self = Container.call(this); var button = self.attachAsset('purchase1', { anchorX: 0.5, anchorY: 0.5 }); var text = new Text2(buttonText, { size: 45, fill: "#ffffff" }); var subText = new Text2(buttonSubText, { size: 45, fill: "#ffffff" }); text.anchor.set(0.5, 1); subText.anchor.set(0.5, 0); text.y = -button.height / 2 - 10; subText.y = button.height / 2 + 10; self.addChild(text); self.addChild(subText); self.x = positionX; self.y = positionY; self.interactive = true; self.on('down', function (obj) { self.alpha = 0.5; onClickCallback(); }); self.on('up', function (obj) { self.alpha = 1.0; }); }); // BulletPack class var BulletPack = Container.expand(function () { var self = Container.call(this); var bulletPackGraphics = self.attachAsset('bulletPack', { anchorX: 0.5, anchorY: 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.attachAsset('hero', { anchorX: 0.5, anchorY: 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.attachAsset('Bullet', { anchorX: 0.0625, anchorY: 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.attachAsset('enemy', { anchorX: 0.5, anchorY: 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.on('down', function (obj) { self.alpha = 0.5; onClickCallback(); }); self.on('up', function (obj) { self.alpha = 1.0; }); }); // 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; }; }); /**** * Initialize Game ****/ // Create left movement button var game = new LK.Game({ title: 'gameplaypage', backgroundColor: 0x000000 // Init game with black background }); /**** * Game Code ****/ var Purchase1 = game.addChild(new PurchaseButtonWithText('purchase1', '10 Bullets for:', '50 Cosmic Credits', 200, game.height - 200, function () { if (cosmicCredits >= 50) { cosmicCredits -= 50; hero.bulletLimit += 10; bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits); } })); Purchase1.interactive = true; Purchase1.on('down', function () { Purchase1.alpha = 0.5; if (cosmicCredits >= 50) { cosmicCredits -= 50; hero.bulletLimit += 10; bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits); } }); Purchase1.on('up', function () { Purchase1.alpha = 1.0; }); var purchase2 = game.addChild(new PurchaseButtonWithText('purchase2', '20 Bullets for:', '75 Cosmic Credits', game.width - 200, game.height - 200, function () { if (cosmicCredits >= 75) { cosmicCredits -= 75; hero.bulletLimit += 20; bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits); } })); purchase2.interactive = true; purchase2.on('down', function () { purchase2.alpha = 0.5; if (cosmicCredits >= 75) { cosmicCredits -= 75; hero.bulletLimit += 20; bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits); } }); purchase2.on('up', function () { purchase2.alpha = 1.0; }); // Initialize important asset arrays var heroBullets = []; var enemies = []; // Create character var hero = game.addChild(new Hero()); hero.x = game.width / 2; hero.y = game.height - 100; var cosmicCredits = 0; // Initialize cosmic credits // 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" }); var cosmicCreditsTxt = new Text2('Cosmic Credits: 0', { size: 50, fill: "#ffffff" }); // New currency display scoreTxt.anchor.set(1, 0); highScoreTxt.anchor.set(1, 0); cosmicCreditsTxt.anchor.set(1, 0); highScoreTxt.y = scoreTxt.height + 20; cosmicCreditsTxt.y = highScoreTxt.y + highScoreTxt.height + 20; // Position below the high score display LK.gui.topRight.addChild(scoreTxt); LK.gui.topRight.addChild(highScoreTxt); LK.gui.topRight.addChild(cosmicCreditsTxt); // Add the cosmic credits display to the GUI // Create version display var versionTxt = new Text2('v0.2 BETA', { size: 50, fill: "#ffffff" }); versionTxt.anchor.set(1, 0); versionTxt.y = cosmicCreditsTxt.y + cosmicCreditsTxt.height + 20; // Position below the cosmic credits display LK.gui.topRight.addChild(versionTxt); // Add the version display to the GUI // 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', {}); 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 tap on the game stage to shoot bullets, excluding buttons var dragNode = null; game.on('down', function (obj) { var event = obj.event; var pos = event.getLocalPosition(game); // Check if the tap is not on any button var purchaseButtonBoundsLeft = Purchase1.getBounds(); var purchaseButtonBoundsRight = purchase2.getBounds(); if (!(pos.x >= purchaseButtonBoundsLeft.x && pos.x <= purchaseButtonBoundsLeft.x + purchaseButtonBoundsLeft.width && pos.y >= purchaseButtonBoundsLeft.y && pos.y <= purchaseButtonBoundsLeft.y + purchaseButtonBoundsLeft.height || pos.x >= purchaseButtonBoundsRight.x && pos.x <= purchaseButtonBoundsRight.x + purchaseButtonBoundsRight.width && pos.y >= purchaseButtonBoundsRight.y && pos.y <= purchaseButtonBoundsRight.y + purchaseButtonBoundsRight.height) && !joystick.containsPoint(pos)) { 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 }); // 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 and increase cosmic credits by 5 var newScore = LK.getScore() + 1; LK.setScore(newScore); scoreTxt.setText('Score: ' + newScore); cosmicCredits += 5; cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits); var highScore = Math.max(newScore, Number((typeof localStorage !== 'undefined' ? localStorage.getItem('highScore') : '0') || '0')); highScoreTxt.setText('High Score: ' + highScore + ' (WIP)'); 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); } });
===================================================================
--- original.js
+++ change.js
@@ -1,7 +1,38 @@
/****
* Classes
****/
+var PurchaseButtonWithText = Container.expand(function (buttonAssetId, buttonText, buttonSubText, positionX, positionY, onClickCallback) {
+ var self = Container.call(this);
+ var button = self.attachAsset('purchase1', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var text = new Text2(buttonText, {
+ size: 45,
+ fill: "#ffffff"
+ });
+ var subText = new Text2(buttonSubText, {
+ size: 45,
+ fill: "#ffffff"
+ });
+ text.anchor.set(0.5, 1);
+ subText.anchor.set(0.5, 0);
+ text.y = -button.height / 2 - 10;
+ subText.y = button.height / 2 + 10;
+ self.addChild(text);
+ self.addChild(subText);
+ self.x = positionX;
+ self.y = positionY;
+ self.interactive = true;
+ self.on('down', function (obj) {
+ self.alpha = 0.5;
+ onClickCallback();
+ });
+ self.on('up', function (obj) {
+ self.alpha = 1.0;
+ });
+});
// BulletPack class
var BulletPack = Container.expand(function () {
var self = Container.call(this);
var bulletPackGraphics = self.attachAsset('bulletPack', {
@@ -25,10 +56,9 @@
var heroGraphics = self.attachAsset('hero', {
anchorX: 0.5,
anchorY: 0.5
});
- self.bulletLimit = difficulty === 'medium' ? 3 : difficulty === 'hard' ? 5 : 2; // Initialize bullet limit based on difficulty
- self.bulletsInPlay = 0; // Track bullets currently in play
+ self.bulletLimit = 3; // Initialize bullet limit
self.canShoot = true; // Allow shooting initially
self.update = function () {
// Hero update logic
};
@@ -38,9 +68,8 @@
bullet.x = this.x;
bullet.y = this.y - this.height / 2;
heroBullets.push(bullet);
game.addChild(bullet);
- this.bulletsInPlay++; // Increment bullets in play
this.bulletLimit--;
bulletCountTxt.setText('Bullets: ' + this.bulletLimit); // Update bullet count display
this.canShoot = false; // Set shooting cooldown
LK.setTimeout(function () {
@@ -76,40 +105,29 @@
self.x += self.direction * (4 + speedIncreaseFactor);
if (self.x < 0 || self.x > game.width) {
self.direction *= -1;
}
- self.speed += difficulty === 'easy' ? 0.01 + LK.ticks * 0.00005 : difficulty === 'medium' ? 0.02 + LK.ticks * 0.0001 : 0.03 + LK.ticks * 0.00015; // Increase speed over time with an accelerating factor based on difficulty
+ 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, 0.5);
+ buttonText.anchor.set(0.5);
self.addChild(buttonText);
- self.width = buttonText.width;
- self.height = buttonText.height;
- // The 'anchor' property is already set by default in LK Containers, so this line is not needed and can be removed.
- // Use Point instead of Point
self.x = positionX;
self.y = positionY;
self.interactive = true;
self.on('down', function (obj) {
- var event = obj.event;
- var pos = event.getLocalPosition(game);
- if (self.containsPoint(pos)) {
- self.alpha = 0.5;
- onClickCallback();
- }
+ self.alpha = 0.5;
+ onClickCallback();
});
self.on('up', function (obj) {
self.alpha = 1.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;
- };
});
// JoystickAsset class
var JoystickAsset = Container.expand(function () {
var self = Container.call(this);
@@ -123,12 +141,8 @@
y: 0
});
};
};
- var joystickBaseGraphics = self.attachAsset('joystickBase', {
- anchorX: 0.5,
- anchorY: 0.5
- });
self.on('down', function (obj) {
self.isDragging = true;
});
self.on('up', function (obj) {
@@ -146,275 +160,240 @@
if (self.isDragging) {
var event = obj.event;
var pos = event.getLocalPosition(self);
var dx = pos.x - stickOrigin.x;
- var maxDistance = joystickBaseGraphics.width / 2;
- var distance = Math.min(maxDistance, Math.sqrt(dx * dx));
- var angle = Math.atan2(pos.y - stickOrigin.y, pos.x - stickOrigin.x);
- var x = distance * Math.cos(angle);
- var y = distance * Math.sin(angle);
- stickGraphics.x = stickOrigin.x + x;
- stickGraphics.y = stickOrigin.y + y;
+ 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: x / maxDistance,
- y: y / maxDistance
+ 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;
+ };
});
/****
* Initialize Game
****/
-/****
-* Game Initialization
-****/
-// Constants
-// Set a default difficulty level
+// Create left movement button
var game = new LK.Game({
- backgroundColor: 0x000000
+ title: 'gameplaypage',
+ backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
-// Constants
-/****
-* Game Initialization
-****/
-// Constants
-/****
-* Game Initialization
-****/
-var difficulty = 'easy';
-var WIDTH = 600;
-var HEIGHT = 800;
-var STAGE_SCALE_MODE = 0;
-var LOADER_SCALE_MODE = 0;
-var BG_COLOR = 0x111111;
-// Initialize the game
-// The game is already initialized at the top with 'new LK.Game({backgroundColor: 0x000000});'
-// No need to re-initialize the game here.
-/****
-* Game Logic
-****/
-// Game variables
-var hero;
-var heroBullets = [];
-var enemies = [];
-var bulletPacks = [];
-var stickGraphics;
-var stickOrigin;
-// Game setup function
-function setup() {
- // Initialize game variables
- hero = new Hero();
- hero.x = game.width / 2;
- hero.y = game.height - 100;
- game.addChild(hero);
- // Initialize joystick
- var joystick = new JoystickAsset();
- joystick.x = 150;
- joystick.y = game.height - 150;
- game.addChild(joystick);
- stickGraphics = joystick.attachAsset('joystickStick', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- stickOrigin = {
- x: stickGraphics.x,
- y: stickGraphics.y
- };
- // Start the game loop
- LK.on('tick', update);
-}
-// Game update function
-function update() {
- // Hero movement based on joystick input
- hero.x += stickGraphics.x * 10;
- hero.y += stickGraphics.y * 10;
- // Update bullets
- for (var i = heroBullets.length - 1; i >= 0; i--) {
- var bullet = heroBullets[i];
- bullet.move();
- if (bullet.y < 0) {
- // Remove bullets that are off-screen
- heroBullets.splice(i, 1);
- game.removeChild(bullet);
- hero.bulletsInPlay--; // Decrement bullets in play
- hero.bulletLimit++;
- bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); // Update bullet count display
- }
+var Purchase1 = game.addChild(new PurchaseButtonWithText('purchase1', '10 Bullets for:', '50 Cosmic Credits', 200, game.height - 200, function () {
+ if (cosmicCredits >= 50) {
+ cosmicCredits -= 50;
+ hero.bulletLimit += 10;
+ bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
+ cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
}
- // Update enemies
- for (var i = enemies.length - 1; i >= 0; i--) {
- var enemy = enemies[i];
- enemy.move();
- if (enemy.y > game.height) {
- // Remove enemies that are off-screen
- enemies.splice(i, 1);
- game.removeChild(enemy);
- }
+}));
+Purchase1.interactive = true;
+Purchase1.on('down', function () {
+ Purchase1.alpha = 0.5;
+ if (cosmicCredits >= 50) {
+ cosmicCredits -= 50;
+ hero.bulletLimit += 10;
+ bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
+ cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
}
- // Check for collisions between bullets and enemies
- for (var i = heroBullets.length - 1; i >= 0; i--) {
- var bullet = heroBullets[i];
- for (var j = enemies.length - 1; j >= 0; j--) {
- var enemy = enemies[j];
- if (bullet.hitTestObject(enemy)) {
- // Remove the bullet and the enemy upon collision
- heroBullets.splice(i, 1);
- game.removeChild(bullet);
- enemies.splice(j, 1);
- game.removeChild(enemy);
- hero.bulletsInPlay--; // Decrement bullets in play
- hero.bulletLimit++;
- bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); // Update bullet count display
- }
- }
+});
+Purchase1.on('up', function () {
+ Purchase1.alpha = 1.0;
+});
+var purchase2 = game.addChild(new PurchaseButtonWithText('purchase2', '20 Bullets for:', '75 Cosmic Credits', game.width - 200, game.height - 200, function () {
+ if (cosmicCredits >= 75) {
+ cosmicCredits -= 75;
+ hero.bulletLimit += 20;
+ bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
+ cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
}
- // Check for collisions between hero and enemies
- for (var i = enemies.length - 1; i >= 0; i--) {
- var enemy = enemies[i];
- if (hero.intersects(enemy)) {
- // Game over if hero collides with an enemy
- LK.showGameOver();
- return;
- }
+}));
+purchase2.interactive = true;
+purchase2.on('down', function () {
+ purchase2.alpha = 0.5;
+ if (cosmicCredits >= 75) {
+ cosmicCredits -= 75;
+ hero.bulletLimit += 20;
+ bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
+ cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
}
- // Spawn enemies randomly
- if (Math.random() < 0.01) {
- var enemy = new Enemy();
- enemy.x = Math.random() * game.width;
- enemies.push(enemy);
- game.addChild(enemy);
- }
- // Spawn bullet packs randomly
- if (Math.random() < 0.01) {
- var bulletPack = new BulletPack();
- bulletPack.x = Math.random() * game.width;
- bulletPacks.push(bulletPack);
- game.addChild(bulletPack);
- }
-}
-/****
-* Game Start
-****/
-// Show loader
-// Load assets
-setup();
-// Show main menu
-var mainMenuPage = new Container();
-var title = new Text2('Game Title', {
+});
+purchase2.on('up', function () {
+ purchase2.alpha = 1.0;
+});
+// Initialize important asset arrays
+var heroBullets = [];
+var enemies = [];
+// Create character
+var hero = game.addChild(new Hero());
+hero.x = game.width / 2;
+hero.y = game.height - 100;
+var cosmicCredits = 0; // Initialize cosmic credits
+// 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"
+});
+var cosmicCreditsTxt = new Text2('Cosmic Credits: 0', {
+ size: 50,
+ fill: "#ffffff"
+}); // New currency display
+scoreTxt.anchor.set(1, 0);
+highScoreTxt.anchor.set(1, 0);
+cosmicCreditsTxt.anchor.set(1, 0);
+highScoreTxt.y = scoreTxt.height + 20;
+cosmicCreditsTxt.y = highScoreTxt.y + highScoreTxt.height + 20; // Position below the high score display
+LK.gui.topRight.addChild(scoreTxt);
+LK.gui.topRight.addChild(highScoreTxt);
+LK.gui.topRight.addChild(cosmicCreditsTxt); // Add the cosmic credits display to the GUI
+// Create version display
+var versionTxt = new Text2('v0.2 BETA', {
+ size: 50,
+ fill: "#ffffff"
+});
+versionTxt.anchor.set(1, 0);
+versionTxt.y = cosmicCreditsTxt.y + cosmicCreditsTxt.height + 20; // Position below the cosmic credits display
+LK.gui.topRight.addChild(versionTxt); // Add the version display to the GUI
+// Create bullet count display
+var bulletCountTxt = new Text2('Bullets: 3', {
size: 100,
fill: "#ffffff"
});
-title.anchor.set(0.5, 0);
-mainMenuPage.addChild(title);
-var startButton = new Button('Start', game.width / 2, title.height + 50, function () {
- var easyMenuPage = new Container();
- LK.showMenuPage(easyMenuPage);
+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"
});
-// The 'anchor' property is not available on 'startButton' as it is not an LK.Container with an anchor.
-// Therefore, the line setting the anchor is removed to prevent the TypeError.
-mainMenuPage.addChild(startButton);
-mainMenuPage.backgroundColor = '#000000';
-game.addChild(mainMenuPage);
-/****
-* Game Logic (Continued)
-****/
-// Game update function (Continued)
-function updateContinued() {
- // Hero movement based on joystick input
- hero.x += stickGraphics.x * 10;
- hero.y += stickGraphics.y * 10;
- // Update bullets
+instructionsTxt.anchor.set(0, 0);
+LK.gui.topLeft.addChild(instructionsTxt);
+// Create a red line 3/4 down the screen
+var redLine = LK.getAsset('redLine', {});
+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 tap on the game stage to shoot bullets, excluding buttons
+var dragNode = null;
+game.on('down', function (obj) {
+ var event = obj.event;
+ var pos = event.getLocalPosition(game);
+ // Check if the tap is not on any button
+ var purchaseButtonBoundsLeft = Purchase1.getBounds();
+ var purchaseButtonBoundsRight = purchase2.getBounds();
+ if (!(pos.x >= purchaseButtonBoundsLeft.x && pos.x <= purchaseButtonBoundsLeft.x + purchaseButtonBoundsLeft.width && pos.y >= purchaseButtonBoundsLeft.y && pos.y <= purchaseButtonBoundsLeft.y + purchaseButtonBoundsLeft.height || pos.x >= purchaseButtonBoundsRight.x && pos.x <= purchaseButtonBoundsRight.x + purchaseButtonBoundsRight.width && pos.y >= purchaseButtonBoundsRight.y && pos.y <= purchaseButtonBoundsRight.y + purchaseButtonBoundsRight.height) && !joystick.containsPoint(pos)) {
+ 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
+});
+// 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 and increase cosmic credits by 5
+ var newScore = LK.getScore() + 1;
+ LK.setScore(newScore);
+ scoreTxt.setText('Score: ' + newScore);
+ cosmicCredits += 5;
+ cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
+ var highScore = Math.max(newScore, Number((typeof localStorage !== 'undefined' ? localStorage.getItem('highScore') : '0') || '0'));
+ highScoreTxt.setText('High Score: ' + highScore + ' (WIP)');
+ 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) {
- // Remove bullets that are off-screen
+ bullet.destroy();
heroBullets.splice(i, 1);
- game.removeChild(bullet);
- hero.bulletsInPlay--; // Decrement bullets in play
- hero.bulletLimit++;
- bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); // Update bullet count display
- }
- }
- // Update enemies
- for (var i = enemies.length - 1; i >= 0; i--) {
- var enemy = enemies[i];
- enemy.move();
- if (enemy.y > game.height) {
- // Remove enemies that are off-screen
- enemies.splice(i, 1);
- game.removeChild(enemy);
- }
- }
- // Check for collisions between bullets and enemies
- for (var i = heroBullets.length - 1; i >= 0; i--) {
- var bullet = heroBullets[i];
- for (var j = enemies.length - 1; i >= 0; j--) {
- var enemy = enemies[j];
- if (bullet.hitTestObject(enemy)) {
- // Remove the bullet and the enemy upon collision
- heroBullets.splice(i, 1);
- game.removeChild(bullet);
- enemies.splice(j, 1);
- game.removeChild(enemy);
- hero.bulletsInPlay--; // Decrement bullets in play
- hero.bulletLimit++;
- bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); // Update bullet count display
+ if (heroBullets.length === 0 && hero.bulletLimit === 0) {
+ LK.showGameOver(); // End the game when the last bullet is out of frame
}
}
}
- // Check for collisions between hero and enemies
- for (var i = enemies.length - 1; i >= 0; i--) {
- var enemy = enemies[i];
- if (hero.hitTestObject(enemy)) {
- // Game over if hero collides with an enemy
- LK.showGameOver();
- return;
+ // 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);
}
}
- // Spawn enemies randomly
- if (Math.random() < 0.01) {
+ 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.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
}
- // Spawn bullet packs randomly
- if (Math.random() < 0.01) {
+ if (LK.ticks % 600 == 0) {
+ // Spawn a bullet pack every 600 ticks
var bulletPack = new BulletPack();
- bulletPack.x = Math.random() * game.width;
- bulletPacks.push(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);
}
-}
-// Continue with the rest of your code...
-/****
-* Game Start (Continued)
-****/
-// Show loader
-// Removed call to non-existent function LK.showLoader
-// Load assets
-// Initialize the game
-setup();
-// Show main menu
-var mainMenuPage = new Container();
-var title = new Text2('Game Title', {
- size: 100,
- fill: "#ffffff"
-});
-title.anchor.set(0.5, 0);
-mainMenuPage.addChild(title);
-var startButton = new Button('Start', game.width / 2, title.height + 50, function () {
- LK.showMenuPage(easyMenuPage);
-});
-mainMenuPage.addChild(startButton);
-mainMenuPage.backgroundColor = '#000000';
-game.addChild(mainMenuPage);
-// Rest of the code...
-// (You can continue with other parts of your game logic)
\ No newline at end of file
+});
\ 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