User prompt
When the players touch the key the key stays with the player and if the player goes to the door the door opens to a new room
User prompt
When the alien gets shot four times the alien drops the key and a note and if the player tap the key the player has the key in the player's hand and the key unlocks the door
User prompt
Can you re-add the key please
User prompt
When the alien is shot by the bullet four times the alien drops a note and when the player taps the note the note says that the alien ate the Player's classmates
User prompt
When the alien gets hit by the bullets four times the alien drops the key to unlock the door
User prompt
Add the life's for the monster the monster has four life's and add one for the player and the player has three lifes
User prompt
Add a key to collect and unlock the door
User prompt
Add a door to unlock
User prompt
If the player swipe up the player goes up same thing if the player swipes down
User prompt
Make the player run away and if you swipe left the player goes left but if you swipe right the player goes right
User prompt
No I said change character name to player
User prompt
If the player taps the monster the player wins
User prompt
Make the player running
User prompt
Delete the part I said if the monster running the player runs to but he finds a key
User prompt
If the player tap on the key the player wins
User prompt
Create a key
User prompt
If the monster running the player.runs to but he finds a key create a key
User prompt
If you swipe the screen to player follows
User prompt
Every time the bullet hits the monster the monster has a health button
User prompt
Make a control button
User prompt
Make a control button for the player
User prompt
Please fix the bug: 'Uncaught TypeError: character.hitTest is not a function' in or related to this line: 'if (character.hitTest(charLocalPos.x, charLocalPos.y)) {' Line Number: 156
User prompt
Make the player controllable
User prompt
Please fix the bug: 'Uncaught TypeError: character.containsPoint is not a function' in or related to this line: 'if (character.containsPoint(charLocalPos)) {' Line Number: 156
User prompt
Make the monster chase the player
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ //Storage library which should be used for persistent game data // var storage = LK.import('@upit/storage.v1'); //Library for using the camera (the background becomes the user's camera video feed) and the microphone. It can access face coordinates for interactive play, as well detect microphone volume / voice interactions // var facekit = LK.import('@upit/facekit.v1'); //Classes can only be defined here. You cannot create inline classes in the games code. var Bullet = Container.expand(function () { var self = Container.call(this); //Create and attach asset. This is the same as calling var xxx = self.addChild(LK.getAsset(...)) var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); //Set bullet speed self.speed = 20; // Bullet speed //If this instance of bullet is attached, this method will be called every tick by the LK engine automatically. //To not manually call .updated methods. If you want to manually call a method every tick on a class, use a different name than update. //As .update is called from the LK engine directly, .update cannot have method arguments. self.update = function () { self.y -= self.speed; // Move bullet upwards }; return self; //You must return self if you want other classes to be able to inherit from this class }); // Legacy event model examples (commented out as per instructions) /* Lk.on('tick', function(){ //Called every tick. }) game.on('down', function(x,y,obj){ console.log("Game was clicked at", x,y) }) */ var ControlButton = Container.expand(function () { var self = Container.call(this); self.direction = 0; // 0: up, 1: right, 2: down, 3: left // Temporary graphic for the button var buttonGraphic = self.attachAsset('bullet', { // Using bullet asset for now anchorX: 0.5, anchorY: 0.5, scaleX: 2, // Make it larger than a bullet scaleY: 2 }); self.down = function (x, y, obj) { // Start moving the character in the specified direction character.isMoving = true; character.moveDirection = self.direction; }; self.up = function (x, y, obj) { // Stop moving the character character.isMoving = false; }; return self; }); //Make a Character class by using the LK expand method to extend Container. var HealthBar = Container.expand(function () { var self = Container.call(this); var maxWidth = 200; var height = 20; var background = self.addChild(LK.getAsset('bullet', { // Using bullet as a temporary graphic width: maxWidth, height: height, tint: 0x808080, // Grey background anchorX: 0, anchorY: 0 })); var foreground = self.addChild(LK.getAsset('bullet', { // Using bullet as a temporary graphic width: maxWidth, height: height, tint: 0x00ff00, // Green foreground anchorX: 0, anchorY: 0 })); self.setMaxHealth = function (maxHealth) { self._maxHealth = maxHealth; self.setHealth(maxHealth); }; self.setHealth = function (health) { self._health = Math.max(0, Math.min(self._maxHealth, health)); foreground.width = self._health / self._maxHealth * maxWidth; }; self.getHealth = function () { return self._health; }; return self; }); var PlayerCharacter = Container.expand(function () { var self = Container.call(this); //Get and automatically addChild to self asset with id 'character' with the anchor point set to .5, .5 var characterGraphics = self.attachAsset('character', { anchorX: 0.5, anchorY: 0.5 }); self.isMoving = false; self.moveDirection = 0; // 0: up, 1: right, 2: down, 3: left self.update = function () { if (self.isMoving) { var moveSpeed = 10; switch (self.moveDirection) { case 0: // Up self.y -= moveSpeed; break; case 1: // Right self.x += moveSpeed; break; case 2: // Down self.y += moveSpeed; break; case 3: // Left self.x -= moveSpeed; break; } // Clamp character position to be within the bottom half of the screen self.x = Math.max(self.width / 2, Math.min(2048 - self.width / 2, self.x)); self.y = Math.max(2732 / 2, Math.min(2732 - self.height / 2, self.y)); } }; return self; //You must return self if you want other classes to be able to inherit from this class }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ //Minimalistic tween library which should be used for animations over time, including tinting / colouring an object, scaling, rotating, or changing any game object property. //Only include the plugins you need to create the game. //We have access to the following plugins. (Note that the variable names used are mandetory for each plugin) // Initialize music // Blue character // Purple alien // Yellow bullet // Initialize assets used in this game. Scale them according to what is needed for the game. // or via static code analysis based on their usage in the code. // Assets are automatically created and loaded either dynamically during gameplay /* Supported Types: 1. Shape: - Simple geometric figures with these properties: * width: (required) pixel width of the shape. * height: (required) pixel height of the shape. * color: (required) color of the shape. * shape: (required) type of shape. Valid options: 'box', 'ellipse'. 2. Image: - Imported images with these properties: * width: (required) pixel resolution width. * height: (required) pixel resolution height. * id: (required) identifier for the image. * flipX: (optional) horizontal flip. Valid values: 0 (no flip), 1 (flip). * flipY: (optional) vertical flip. Valid values: 0 (no flip), 1 (flip). * orientation: (optional) rotation in multiples of 90 degrees, clockwise. Valid values: - 0: No rotation. - 1: Rotate 90 degrees. - 2: Rotate 180 degrees. - 3: Rotate 270 degrees. Note: Width and height remain unchanged upon flipping. 3. Sound: - Sound effects with these properties: * id: (required) identifier for the sound. * volume: (optional) custom volume. Valid values are a float from 0 to 1. 4. Music: - In contract to sound effects, only one music can be played at a time - Music is using the same API to initilize just like sound. - Music loops by default - Music with these config options: * id: (required) identifier for the sound. * volume: (optional) custom volume. Valid values are a float from 0 to 1. * start: (optional) a float from 0 to 1 used for cropping and indicates the start of the cropping * end: (optional) a float from 0 to 1 used for cropping and indicates the end of the cropping */ //Init game with black background //Note game dimensions are 2048x2732 // Global variables var alien; var character; var bullets = []; var scoreTxt; var dragNode = null; var lastCharacterIntersectingAlien = false; var WIN_SCORE = 50; // Score to win var monsterHealth = 100; // Monster's initial health var monsterMaxHealth = 100; // Monster's maximum health var healthBar; // Health bar instance // Change background color game.setBackgroundColor(0x1a1a1a); // Dark grey background // Create and position the alien in the center alien = game.addChild(LK.getAsset('alien', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 })); alien.lastIntersectingCharacter = false; // Initialize for intersection tracking alien.lastIntersectingBullet = false; // Initialize for intersection tracking // Create and add health bar for the monster healthBar = game.addChild(new HealthBar()); healthBar.setMaxHealth(monsterMaxHealth); healthBar.x = alien.x - healthBar.width / 2; // Position above the alien healthBar.y = alien.y - alien.height / 2 - healthBar.height - 20; // 20px padding above alien // Create and position the player character at the bottom center character = game.addChild(new PlayerCharacter()); character.x = 2048 / 2; character.y = 2732 - character.height / 2 - 100; // Position near bottom character.lastIntersectingAlien = false; // Initialize for intersection tracking // Create and add score display scoreTxt = new Text2('0', { size: 150, fill: 0xFFFFFF }); scoreTxt.setText(LK.getScore()); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Mouse or touch up event on the game object game.up = function (x, y, obj) { dragNode = null; }; // Add control buttons var buttonSize = 150; var buttonPadding = 50; var upButton = new ControlButton(); upButton.direction = 0; upButton.x = 2048 / 2; upButton.y = 2732 - buttonSize - buttonPadding; LK.gui.bottom.addChild(upButton); var rightButton = new ControlButton(); rightButton.direction = 1; rightButton.x = 2048 / 2 + buttonSize + buttonPadding; rightButton.y = 2732 - buttonSize - buttonPadding + buttonSize / 2; LK.gui.bottom.addChild(rightButton); var downButton = new ControlButton(); downButton.direction = 2; downButton.x = 2048 / 2; downButton.y = 2732 - buttonSize - buttonPadding + buttonSize * 2; LK.gui.bottom.addChild(downButton); var leftButton = new ControlButton(); leftButton.direction = 3; leftButton.x = 2048 / 2 - buttonSize - buttonPadding; leftButton.y = 2732 - buttonSize - buttonPadding + buttonSize / 2; LK.gui.bottom.addChild(leftButton); // Ask LK engine to update game every game tick game.update = function () { // Update and manage bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; // We always keep track of last and current values to detect state changes if (bullet.lastY === undefined) bullet.lastY = bullet.y; // Initialize lastY for tracking changes on Y if (bullet.lastIntersectingAlien === undefined) bullet.lastIntersectingAlien = false; // Initialize for intersection tracking // Off-Screen Detection: Destroy bullet if it goes off the top edge if (bullet.lastY >= -bullet.height && bullet.y < -bullet.height) { bullet.destroy(); // Destroy can only be called from the main 'Game' class bullets.splice(i, 1); continue; // Skip further checks for this bullet } // Intersection Detection: Check for bullet collision with alien var currentIntersectingAlien = bullet.intersects(alien); if (!bullet.lastIntersectingAlien && currentIntersectingAlien) { // Intersection just started LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore()); LK.getSound('hit').play(); // Play hit sound // Decrease monster health monsterHealth -= 10; // Decrease health by 10 per hit healthBar.setHealth(monsterHealth); // Update health bar display // Check if monster health is zero or less if (monsterHealth <= 0) { LK.showYouWin(); // Show "you win" and reset } // Winning condition (if score is still a win condition) if (LK.getScore() >= WIN_SCORE) { LK.showYouWin(); // Show "you win" and reset } bullet.destroy(); // Destroy bullet on hit bullets.splice(i, 1); continue; // Skip further checks for this bullet } // Update last known states bullet.lastY = bullet.y; bullet.lastIntersectingAlien = currentIntersectingAlien; } // Character movement is handled by the PlayerCharacter update method. // Move the alien towards the character var moveSpeed = 5; // Adjust speed as needed var dx = character.x - alien.x; var dy = character.y - alien.y; var angle = Math.atan2(dy, dx); alien.x += Math.cos(angle) * moveSpeed; alien.y += Math.sin(angle) * moveSpeed; // Check for character collision with alien var currentCharacterIntersectingAlien = character.intersects(alien); if (!lastCharacterIntersectingAlien && currentCharacterIntersectingAlien) { // Collision just started LK.effects.flashScreen(0xff0000, 1000); // Flash screen red LK.showGameOver(); // Show game over and reset } lastCharacterIntersectingAlien = currentCharacterIntersectingAlien; // Fire a bullet periodically (every 15 ticks = ~4 times per second) if (LK.ticks % 15 == 0) { var newBullet = new Bullet(); // We always keep track of last and current values newBullet.x = character.x; newBullet.y = character.y; newBullet.lastY = newBullet.y; // Initialize lastY for tracking changes on Y newBullet.lastIntersectingAlien = newBullet.intersects(alien); // Initialize for intersection tracking bullets.push(newBullet); game.addChild(newBullet); LK.getSound('shoot').play(); // Play shoot sound } }; // Play background music LK.playMusic('bgmusic');
===================================================================
--- original.js
+++ change.js
@@ -60,8 +60,43 @@
};
return self;
});
//Make a Character class by using the LK expand method to extend Container.
+var HealthBar = Container.expand(function () {
+ var self = Container.call(this);
+ var maxWidth = 200;
+ var height = 20;
+ var background = self.addChild(LK.getAsset('bullet', {
+ // Using bullet as a temporary graphic
+ width: maxWidth,
+ height: height,
+ tint: 0x808080,
+ // Grey background
+ anchorX: 0,
+ anchorY: 0
+ }));
+ var foreground = self.addChild(LK.getAsset('bullet', {
+ // Using bullet as a temporary graphic
+ width: maxWidth,
+ height: height,
+ tint: 0x00ff00,
+ // Green foreground
+ anchorX: 0,
+ anchorY: 0
+ }));
+ self.setMaxHealth = function (maxHealth) {
+ self._maxHealth = maxHealth;
+ self.setHealth(maxHealth);
+ };
+ self.setHealth = function (health) {
+ self._health = Math.max(0, Math.min(self._maxHealth, health));
+ foreground.width = self._health / self._maxHealth * maxWidth;
+ };
+ self.getHealth = function () {
+ return self._health;
+ };
+ return self;
+});
var PlayerCharacter = Container.expand(function () {
var self = Container.call(this);
//Get and automatically addChild to self asset with id 'character' with the anchor point set to .5, .5
var characterGraphics = self.attachAsset('character', {
@@ -163,8 +198,11 @@
var scoreTxt;
var dragNode = null;
var lastCharacterIntersectingAlien = false;
var WIN_SCORE = 50; // Score to win
+var monsterHealth = 100; // Monster's initial health
+var monsterMaxHealth = 100; // Monster's maximum health
+var healthBar; // Health bar instance
// Change background color
game.setBackgroundColor(0x1a1a1a); // Dark grey background
// Create and position the alien in the center
alien = game.addChild(LK.getAsset('alien', {
@@ -174,8 +212,13 @@
y: 2732 / 2
}));
alien.lastIntersectingCharacter = false; // Initialize for intersection tracking
alien.lastIntersectingBullet = false; // Initialize for intersection tracking
+// Create and add health bar for the monster
+healthBar = game.addChild(new HealthBar());
+healthBar.setMaxHealth(monsterMaxHealth);
+healthBar.x = alien.x - healthBar.width / 2; // Position above the alien
+healthBar.y = alien.y - alien.height / 2 - healthBar.height - 20; // 20px padding above alien
// Create and position the player character at the bottom center
character = game.addChild(new PlayerCharacter());
character.x = 2048 / 2;
character.y = 2732 - character.height / 2 - 100; // Position near bottom
@@ -235,9 +278,16 @@
// Intersection just started
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
LK.getSound('hit').play(); // Play hit sound
- // Winning condition
+ // Decrease monster health
+ monsterHealth -= 10; // Decrease health by 10 per hit
+ healthBar.setHealth(monsterHealth); // Update health bar display
+ // Check if monster health is zero or less
+ if (monsterHealth <= 0) {
+ LK.showYouWin(); // Show "you win" and reset
+ }
+ // Winning condition (if score is still a win condition)
if (LK.getScore() >= WIN_SCORE) {
LK.showYouWin(); // Show "you win" and reset
}
bullet.destroy(); // Destroy bullet on hit
A blue demon alien. In-Game asset. High contrast. No shadows
The character is a little boy that is sad and 17 years old. In-Game asset. 2d. High contrast. No shadows. Kid
Key. In-Game asset. High contrast. No shadows. 2d
Door. In-Game asset. No shadows. 2d
A note that says dear player I ate classmates from alien. In-Game asset. High contrast. No shadows