Code edit (5 edits merged)
Please save this source code
User prompt
change speed to 12
User prompt
chose a different sound for the blocks from the list of tracks and if you can create a match with sounds to work well with game music βͺπ‘ Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
more speed
User prompt
add more speed
User prompt
add some speed for the respawning blocks
User prompt
Add gamemusic1
User prompt
fix the sounds or the tween plugin to make the sounds playing very good! βͺπ‘ Consider importing and using the following plugins: @upit/tween.v1
User prompt
add orangesound1 for terrainblockorange. add yellowsound1 for terrainblockyellow. add greensound1 for terrainblockgreen. add bluesound1 for terrainblockblue. add purplesound1 for terrainblockindigo. add pinksound1 for terrainblockviolet.
User prompt
add redsound1 for terrainblockred
User prompt
Don't change the color of the player let it brown transparent
User prompt
let the player can collect any color
User prompt
let the player can change the color of any respawning color but start from the first respawned one
User prompt
player change randomly to the respawning colors
User prompt
fix it!
User prompt
if any color is next so the player must change to that color
User prompt
the player not changing for other colors like yellow,blue,pink,orange,purple,green!
User prompt
Add the 7 colors to the player list of changing colors to change to it.
User prompt
change the player color to the first respawning color and when i match it change to the next respawned color so on..
User prompt
change the colors auto not by click
User prompt
the player didn't change same like the blocks colors!
User prompt
if the respawning color is blue change player to blue if green change to green etc..
User prompt
change the player colors to the respawning colors not just red!
User prompt
change to next color when i match
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var PlayerCharacter = Container.expand(function () { var self = Container.call(this); var colors = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet']; var currentColorIndex = 0; var characterGraphics = self.attachAsset('playerCharacter', { anchorX: 0.5, anchorY: 0.5 }); self.getColor = function () { return colors[currentColorIndex]; }; self.cycleColor = function () { currentColorIndex = (currentColorIndex + 1) % colors.length; characterGraphics.tint = parseInt('0x' + colorMap[self.getColor()].slice(1)); }; // Initialize with the first color characterGraphics.tint = parseInt('0x' + colorMap[self.getColor()].slice(1)); return self; }); //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 TerrainBlock = Container.expand(function (color, speed, noteId) { var self = Container.call(this); self.color = color; self.speed = speed; self.noteId = noteId; var blockGraphics = self.attachAsset('terrainBlock' + self.color, { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * 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 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 */ //Note game dimensions are 2048x2732 var terrainBlocks = []; var playerCharacter = null; var scoreTxt = null; var spawnInterval = 1000; // Milliseconds between block spawns var lastSpawnTime = 0; var terrainSpeed = 5; // Mapping colors to hex and sound IDs var colorMap = { 'Red': '#FF0000', 'Orange': '#FFA500', 'Yellow': '#FFFF00', 'Green': '#008000', 'Blue': '#0000FF', 'Indigo': '#4B0082', 'Violet': '#EE82EE' }; var colorNoteMap = { 'Red': 'noteC', 'Orange': 'noteD', 'Yellow': 'noteE', 'Green': 'noteF', 'Blue': 'noteG', 'Indigo': 'noteA', 'Violet': 'noteB' }; game.setBackgroundColor(0x000000); // Change background color to black scoreTxt = new Text2('0', { size: 150, fill: 0xFFFFFF }); scoreTxt.setText(LK.getScore()); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); playerCharacter = new PlayerCharacter(); // Position player character near the bottom center playerCharacter.x = 2048 / 2; playerCharacter.y = 2732 - playerCharacter.height - 100; // Offset from bottom game.addChild(playerCharacter); var dragNode = null; // Keep track of the element being dragged // Handle touch down on the game area game.down = function (x, y, obj) { // Check if the touch is on the player character dragNode = playerCharacter; // If not on the player, cycle color playerCharacter.cycleColor(); }; // Handle touch move on the game area game.move = function (x, y, obj) { // Move the player character horizontally based on the cursor's x position, // ensuring it stays within the horizontal bounds of the screen. playerCharacter.x = Math.max(playerCharacter.width / 2, Math.min(2048 - playerCharacter.width / 2, x)); }; // Handle touch up on the game area game.up = function (x, y, obj) { dragNode = null; // Stop dragging }; game.update = function () { var currentTime = Date.now(); // Spawn new terrain blocks if (currentTime - lastSpawnTime > spawnInterval) { var colors = Object.keys(colorMap); var randomColor = colors[Math.floor(Math.random() * colors.length)]; var noteId = colorNoteMap[randomColor]; var newBlock = new TerrainBlock(randomColor, terrainSpeed, noteId); // Position block randomly at the top within game width newBlock.x = Math.random() * (2048 - newBlock.width) + newBlock.width / 2; newBlock.y = -newBlock.height; // Start above the screen terrainBlocks.push(newBlock); game.addChild(newBlock); lastSpawnTime = currentTime; // Gradually increase game speed / difficulty // spawnInterval = Math.max(500, spawnInterval - 1); // terrainSpeed = Math.min(15, terrainSpeed + 0.05); playerCharacter.cycleColor(); // Change player color when a block spawns } // Update and check collisions for terrain blocks for (var i = terrainBlocks.length - 1; i >= 0; i--) { var block = terrainBlocks[i]; if (block.lastY === undefined) block.lastY = block.y; // Check if block is off-screen if (block.lastY < 2732 + block.height && block.y >= 2732 + block.height) { // Missed block - game over LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); break; // Exit loop as game is over } // Check for intersection with player character var currentIntersecting = block.intersects(playerCharacter); if (currentIntersecting) { if (block.color === playerCharacter.getColor()) { // Correct color match - collect block LK.setScore(LK.getScore() + 10); scoreTxt.setText(LK.getScore()); LK.getSound(block.noteId).play(); playerCharacter.cycleColor(); // Change player color when a match is made block.destroy(); terrainBlocks.splice(i, 1); } else { // Wrong color match - game over LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); break; // Exit loop as game is over } } block.lastY = block.y; } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var PlayerCharacter = Container.expand(function () {
var self = Container.call(this);
var colors = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet'];
var currentColorIndex = 0;
var characterGraphics = self.attachAsset('playerCharacter', {
anchorX: 0.5,
anchorY: 0.5
});
self.getColor = function () {
return colors[currentColorIndex];
};
self.cycleColor = function () {
currentColorIndex = (currentColorIndex + 1) % colors.length;
characterGraphics.tint = parseInt('0x' + colorMap[self.getColor()].slice(1));
};
// Initialize with the first color
characterGraphics.tint = parseInt('0x' + colorMap[self.getColor()].slice(1));
return self;
});
//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 TerrainBlock = Container.expand(function (color, speed, noteId) {
var self = Container.call(this);
self.color = color;
self.speed = speed;
self.noteId = noteId;
var blockGraphics = self.attachAsset('terrainBlock' + self.color, {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* 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 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
*/
//Note game dimensions are 2048x2732
var terrainBlocks = [];
var playerCharacter = null;
var scoreTxt = null;
var spawnInterval = 1000; // Milliseconds between block spawns
var lastSpawnTime = 0;
var terrainSpeed = 5;
// Mapping colors to hex and sound IDs
var colorMap = {
'Red': '#FF0000',
'Orange': '#FFA500',
'Yellow': '#FFFF00',
'Green': '#008000',
'Blue': '#0000FF',
'Indigo': '#4B0082',
'Violet': '#EE82EE'
};
var colorNoteMap = {
'Red': 'noteC',
'Orange': 'noteD',
'Yellow': 'noteE',
'Green': 'noteF',
'Blue': 'noteG',
'Indigo': 'noteA',
'Violet': 'noteB'
};
game.setBackgroundColor(0x000000); // Change background color to black
scoreTxt = new Text2('0', {
size: 150,
fill: 0xFFFFFF
});
scoreTxt.setText(LK.getScore());
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
playerCharacter = new PlayerCharacter();
// Position player character near the bottom center
playerCharacter.x = 2048 / 2;
playerCharacter.y = 2732 - playerCharacter.height - 100; // Offset from bottom
game.addChild(playerCharacter);
var dragNode = null; // Keep track of the element being dragged
// Handle touch down on the game area
game.down = function (x, y, obj) {
// Check if the touch is on the player character
dragNode = playerCharacter;
// If not on the player, cycle color
playerCharacter.cycleColor();
};
// Handle touch move on the game area
game.move = function (x, y, obj) {
// Move the player character horizontally based on the cursor's x position,
// ensuring it stays within the horizontal bounds of the screen.
playerCharacter.x = Math.max(playerCharacter.width / 2, Math.min(2048 - playerCharacter.width / 2, x));
};
// Handle touch up on the game area
game.up = function (x, y, obj) {
dragNode = null; // Stop dragging
};
game.update = function () {
var currentTime = Date.now();
// Spawn new terrain blocks
if (currentTime - lastSpawnTime > spawnInterval) {
var colors = Object.keys(colorMap);
var randomColor = colors[Math.floor(Math.random() * colors.length)];
var noteId = colorNoteMap[randomColor];
var newBlock = new TerrainBlock(randomColor, terrainSpeed, noteId);
// Position block randomly at the top within game width
newBlock.x = Math.random() * (2048 - newBlock.width) + newBlock.width / 2;
newBlock.y = -newBlock.height; // Start above the screen
terrainBlocks.push(newBlock);
game.addChild(newBlock);
lastSpawnTime = currentTime;
// Gradually increase game speed / difficulty
// spawnInterval = Math.max(500, spawnInterval - 1);
// terrainSpeed = Math.min(15, terrainSpeed + 0.05);
playerCharacter.cycleColor(); // Change player color when a block spawns
}
// Update and check collisions for terrain blocks
for (var i = terrainBlocks.length - 1; i >= 0; i--) {
var block = terrainBlocks[i];
if (block.lastY === undefined) block.lastY = block.y;
// Check if block is off-screen
if (block.lastY < 2732 + block.height && block.y >= 2732 + block.height) {
// Missed block - game over
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
break; // Exit loop as game is over
}
// Check for intersection with player character
var currentIntersecting = block.intersects(playerCharacter);
if (currentIntersecting) {
if (block.color === playerCharacter.getColor()) {
// Correct color match - collect block
LK.setScore(LK.getScore() + 10);
scoreTxt.setText(LK.getScore());
LK.getSound(block.noteId).play();
playerCharacter.cycleColor(); // Change player color when a match is made
block.destroy();
terrainBlocks.splice(i, 1);
} else {
// Wrong color match - game over
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
break; // Exit loop as game is over
}
}
block.lastY = block.y;
}
};