User prompt
Agrega un botón en la tienda para volver al menú en la parte inferior izquierda
User prompt
Haz que en la partida haya un fondo y igual que en el menú, haz nuevos botones para las ofertas, no reutilizes los de jugar
User prompt
Cambia la posición del botón de la tienda a abajo del de ajustes y haz que el botón de ir al menú solo se pueda tocar en partida, y que esté en la parte inferior derecha de la partida
User prompt
Haz que en la tienda con las ofertas que compres adquieras aspectos para los sushis personalizables y luego poder equiparlos desde un nuevo botón del menú llamado taquilla! ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Agrega en el menú un botón más que sea la tienda del juego en la que haya ofertas que valgan monedas del juego, haz que puedan haber ofertas de 100 de 300 de 500 de 750 de 1000 de 1500 y de 2200 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Arregla el error de que no se puedan tocar unas bolas y agrega un botón en medio de la partida para volver al menu
User prompt
Haz que en menú haya un botón de ajustes para poner la dificultad fácil, medio o difícil, en fácil, los sushis caen lento, en medio caen normal y en difícil más rápido, haz que dependiendo del numero de sushis que cortes te den monedas del juego, que salgan las que has acumulado en el menú en la parte superior derecha ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Haz que cuando le dé a play empiezan a caer sushis de la parte de arriba y lo los tengo que cortar antes de que caigan
User prompt
Haz un menú de inicio del juego en el que haya un botón para jugar
User prompt
Sushi Catch
Initial prompt
Crea un juego en el que caigan sushis de la parte de arriba de la pantalla y haya que tocarlos antes de que toquen la linea roja de abajo
/****
* Plugins
****/
var storage = LK.import("@upit/storage.v1", {
coins: 0,
sushiSkins: {},
equippedSkin: "default"
});
/****
* Classes
****/
// Initialize assets for play button
var Sushi = Container.expand(function () {
var self = Container.call(this);
var equippedSkinColor = 0xffa500;
for (var skinIdx = 0; skinIdx < availableSkins.length; skinIdx++) {
if (availableSkins[skinIdx].id === storage.equippedSkin) {
equippedSkinColor = availableSkins[skinIdx].color;
break;
}
}
var sushiGraphics = self.attachAsset('sushi', {
anchorX: 0.5,
anchorY: 0.5
});
sushiGraphics.tint = equippedSkinColor;
self.speed = 5;
self.caught = false;
self.lastY = self.y;
self.interactive = true;
self.down = function (x, y, obj) {
if (!self.caught) {
self.caught = true;
LK.setScore(LK.getScore() + 1);
var coinsEarned = currentDifficulty === 'easy' ? 1 : currentDifficulty === 'medium' ? 2 : 3;
storage.coins = (storage.coins || 0) + coinsEarned;
coinsTxt.setText(storage.coins);
scoreTxt.setText(LK.getScore());
self.destroy();
}
};
self.update = function () {
self.lastY = self.y;
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Create danger line at bottom
// Initialize assets for play button
var dangerLine = LK.getAsset('dangerLine', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2500
});
game.addChild(dangerLine);
// Score display
var scoreTxt = new Text2('0', {
size: 150,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Coins display
var coinsTxt = new Text2('Coins: ' + storage.coins, {
size: 100,
fill: 0xFFD700
});
coinsTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(coinsTxt);
// Game variables
var sushiArray = [];
var sushiSpawnTimer = null;
// Game update loop
game.update = function () {
if (gameState === 'playing') {
// Spawn sushi periodically
if (LK.ticks % sushiSpawnRate === 0) {
var newSushi = new Sushi();
newSushi.x = Math.random() * 1800 + 100;
newSushi.y = -100;
newSushi.lastY = newSushi.y;
newSushi.speed = currentDifficulty === 'easy' ? 3 : currentDifficulty === 'medium' ? 5 : 8;
sushiArray.push(newSushi);
game.addChild(newSushi);
}
// Update and check sushi
for (var i = sushiArray.length - 1; i >= 0; i--) {
var sushi = sushiArray[i];
if (sushi.lastY <= 2500 && sushi.y > 2500) {
LK.effects.flashScreen(0xff0000, 500);
LK.showGameOver();
}
}
}
};
// Game state
var gameState = 'menu'; // 'menu', 'playing', or 'settings'
var currentDifficulty = 'medium'; // 'easy', 'medium', or 'hard'
var sushiSpawnRate = 60; // ticks between spawns
// Create main menu UI
var menuContainer = new Container();
game.addChild(menuContainer);
// Menu title
var titleText = new Text2('Sushi Catch', {
size: 200,
fill: 0xFF6B6B
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 800;
menuContainer.addChild(titleText);
// Play button
var playButtonBg = LK.getAsset('playButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1400
});
menuContainer.addChild(playButtonBg);
var playButtonText = new Text2('PLAY', {
size: 100,
fill: 0xFFFFFF
});
playButtonText.anchor.set(0.5, 0.5);
playButtonText.x = 1024;
playButtonText.y = 1400;
menuContainer.addChild(playButtonText);
// Make play button interactive
playButtonBg.interactive = true;
playButtonBg.down = function (x, y, obj) {
gameState = 'playing';
menuContainer.visible = false;
gameMenuButtonBg.visible = true;
gameMenuButtonText.visible = true;
};
// Settings button
var settingsButtonBg = LK.getAsset('settingsButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1650
});
menuContainer.addChild(settingsButtonBg);
var settingsButtonText = new Text2('⚙️', {
size: 80,
fill: 0xFFFFFF
});
settingsButtonText.anchor.set(0.5, 0.5);
settingsButtonText.x = 1024;
settingsButtonText.y = 1650;
menuContainer.addChild(settingsButtonText);
settingsButtonBg.interactive = true;
settingsButtonBg.down = function (x, y, obj) {
gameState = 'settings';
menuContainer.visible = false;
settingsMenuContainer.visible = true;
};
// Shop button
var shopButtonBg = LK.getAsset('settingsButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1900
});
menuContainer.addChild(shopButtonBg);
var shopButtonText = new Text2('🛍️', {
size: 80,
fill: 0xFFFFFF
});
shopButtonText.anchor.set(0.5, 0.5);
shopButtonText.x = 1024;
shopButtonText.y = 1900;
menuContainer.addChild(shopButtonText);
shopButtonBg.interactive = true;
shopButtonBg.down = function (x, y, obj) {
gameState = 'shop';
menuContainer.visible = false;
shopMenuContainer.visible = true;
};
// Settings menu container
var settingsMenuContainer = new Container();
game.addChild(settingsMenuContainer);
settingsMenuContainer.visible = false;
// Shop menu container
var shopMenuContainer = new Container();
game.addChild(shopMenuContainer);
shopMenuContainer.visible = false;
var shopTitle = new Text2('Shop', {
size: 180,
fill: 0xFF6B6B
});
shopTitle.anchor.set(0.5, 0.5);
shopTitle.x = 1024;
shopTitle.y = 400;
shopMenuContainer.addChild(shopTitle);
// Shop offers: 100, 300, 500, 750, 1000, 1500, 2200
var offers = [100, 300, 500, 750, 1000, 1500, 2200];
var offerButtonsShop = [];
for (var o = 0; o < offers.length; o++) {
var offerY = 800 + o * 220;
var offerBg = LK.getAsset('playButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: offerY
});
shopMenuContainer.addChild(offerBg);
var offerText = new Text2(offers[o] + ' Coins', {
size: 80,
fill: 0xFFFFFF
});
offerText.anchor.set(0.5, 0.5);
offerText.x = 1024;
offerText.y = offerY;
shopMenuContainer.addChild(offerText);
offerBg.interactive = true;
offerBg.offerAmount = offers[o];
offerBg.offerIndex = o;
offerBg.down = function (x, y, obj) {
var skinIndex = obj.offerIndex;
if (skinIndex > 0 && skinIndex < availableSkins.length) {
var skinToUnlock = availableSkins[skinIndex];
storage.sushiSkins[skinToUnlock.id] = true;
}
storage.coins = (storage.coins || 0) + obj.offerAmount;
coinsTxt.setText(storage.coins);
};
offerButtonsShop.push(offerBg);
}
// Shop back button
var shopBackButtonBg = LK.getAsset('playButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2300
});
shopMenuContainer.addChild(shopBackButtonBg);
var shopBackButtonText = new Text2('BACK', {
size: 80,
fill: 0xFFFFFF
});
shopBackButtonText.anchor.set(0.5, 0.5);
shopBackButtonText.x = 1024;
shopBackButtonText.y = 2300;
shopMenuContainer.addChild(shopBackButtonText);
shopBackButtonBg.interactive = true;
shopBackButtonBg.down = function (x, y, obj) {
gameState = 'menu';
shopMenuContainer.visible = false;
menuContainer.visible = true;
};
// Wardrobe button
var wardrobeButtonBg = LK.getAsset('settingsButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 150,
y: 150
});
menuContainer.addChild(wardrobeButtonBg);
var wardrobeButtonText = new Text2('👕', {
size: 80,
fill: 0xFFFFFF
});
wardrobeButtonText.anchor.set(0.5, 0.5);
wardrobeButtonText.x = 150;
wardrobeButtonText.y = 150;
menuContainer.addChild(wardrobeButtonText);
wardrobeButtonBg.interactive = true;
wardrobeButtonBg.down = function (x, y, obj) {
gameState = 'wardrobe';
menuContainer.visible = false;
wardrobeMenuContainer.visible = true;
};
// Wardrobe menu container
var wardrobeMenuContainer = new Container();
game.addChild(wardrobeMenuContainer);
wardrobeMenuContainer.visible = false;
var wardrobeTitle = new Text2('Wardrobe', {
size: 180,
fill: 0xFF6B6B
});
wardrobeTitle.anchor.set(0.5, 0.5);
wardrobeTitle.x = 1024;
wardrobeTitle.y = 300;
wardrobeMenuContainer.addChild(wardrobeTitle);
// Initialize sushi skins in storage if not exists
if (!storage.sushiSkins) {
storage.sushiSkins = {};
}
// Available skins with their costs and colors
var availableSkins = [{
id: 'default',
name: 'Default',
color: 0xffa500,
cost: 0
}, {
id: 'gold',
name: 'Gold',
color: 0xFFD700,
cost: 100
}, {
id: 'purple',
name: 'Purple',
color: 0x9D4EDD,
cost: 300
}, {
id: 'cyan',
name: 'Cyan',
color: 0x00F5FF,
cost: 500
}, {
id: 'lime',
name: 'Lime',
color: 0x00FF00,
cost: 750
}, {
id: 'pink',
name: 'Pink',
color: 0xFF1493,
cost: 1000
}, {
id: 'silver',
name: 'Silver',
color: 0xC0C0C0,
cost: 1500
}];
// Display skins in wardrobe
var skinY = 700;
for (var s = 0; s < availableSkins.length; s++) {
var skin = availableSkins[s];
var skinButtonBg = LK.getAsset('playButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: skinY
});
wardrobeMenuContainer.addChild(skinButtonBg);
var skinText = new Text2(skin.name + (storage.sushiSkins[skin.id] ? ' ✓' : ' (' + skin.cost + ')'), {
size: 70,
fill: 0xFFFFFF
});
skinText.anchor.set(0.5, 0.5);
skinText.x = 1024;
skinText.y = skinY;
wardrobeMenuContainer.addChild(skinText);
skinButtonBg.interactive = true;
skinButtonBg.skinId = skin.id;
skinButtonBg.down = function (x, y, obj) {
storage.equippedSkin = obj.skinId;
refreshWardrobeDisplay();
};
skinY += 200;
}
function refreshWardrobeDisplay() {
wardrobeMenuContainer.children.forEach(function (child) {
if (child.skinId) {
var foundSkin = availableSkins.find(function (s) {
return s.id === child.skinId;
});
if (foundSkin) {
child.children[0].setText(foundSkin.name + (storage.equippedSkin === child.skinId ? ' [EQUIPPED]' : storage.sushiSkins[child.skinId] ? ' ✓' : ' (' + foundSkin.cost + ')'));
}
}
});
}
// Wardrobe back button
var wardrobeBackButtonBg = LK.getAsset('playButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2300
});
wardrobeMenuContainer.addChild(wardrobeBackButtonBg);
var wardrobeBackButtonText = new Text2('BACK', {
size: 80,
fill: 0xFFFFFF
});
wardrobeBackButtonText.anchor.set(0.5, 0.5);
wardrobeBackButtonText.x = 1024;
wardrobeBackButtonText.y = 2300;
wardrobeMenuContainer.addChild(wardrobeBackButtonText);
wardrobeBackButtonBg.interactive = true;
wardrobeBackButtonBg.down = function (x, y, obj) {
gameState = 'menu';
wardrobeMenuContainer.visible = false;
menuContainer.visible = true;
};
var settingsTitle = new Text2('Difficulty', {
size: 180,
fill: 0xFF6B6B
});
settingsTitle.anchor.set(0.5, 0.5);
settingsTitle.x = 1024;
settingsTitle.y = 600;
settingsMenuContainer.addChild(settingsTitle);
// Easy button
var easyButtonBg = LK.getAsset('playButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1100
});
settingsMenuContainer.addChild(easyButtonBg);
var easyButtonText = new Text2('EASY', {
size: 80,
fill: 0xFFFFFF
});
easyButtonText.anchor.set(0.5, 0.5);
easyButtonText.x = 1024;
easyButtonText.y = 1100;
settingsMenuContainer.addChild(easyButtonText);
easyButtonBg.interactive = true;
easyButtonBg.down = function (x, y, obj) {
currentDifficulty = 'easy';
sushiSpawnRate = 90;
returnToMenu();
};
// Medium button
var mediumButtonBg = LK.getAsset('playButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1350
});
settingsMenuContainer.addChild(mediumButtonBg);
var mediumButtonText = new Text2('MEDIUM', {
size: 80,
fill: 0xFFFFFF
});
mediumButtonText.anchor.set(0.5, 0.5);
mediumButtonText.x = 1024;
mediumButtonText.y = 1350;
settingsMenuContainer.addChild(mediumButtonText);
mediumButtonBg.interactive = true;
mediumButtonBg.down = function (x, y, obj) {
currentDifficulty = 'medium';
sushiSpawnRate = 60;
returnToMenu();
};
// Hard button
var hardButtonBg = LK.getAsset('playButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1600
});
settingsMenuContainer.addChild(hardButtonBg);
var hardButtonText = new Text2('HARD', {
size: 80,
fill: 0xFFFFFF
});
hardButtonText.anchor.set(0.5, 0.5);
hardButtonText.x = 1024;
hardButtonText.y = 1600;
settingsMenuContainer.addChild(hardButtonText);
hardButtonBg.interactive = true;
hardButtonBg.down = function (x, y, obj) {
currentDifficulty = 'hard';
sushiSpawnRate = 40;
returnToMenu();
};
// Back button
var backButtonBg = LK.getAsset('playButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1900
});
settingsMenuContainer.addChild(backButtonBg);
var backButtonText = new Text2('BACK', {
size: 80,
fill: 0xFFFFFF
});
backButtonText.anchor.set(0.5, 0.5);
backButtonText.x = 1024;
backButtonText.y = 1900;
settingsMenuContainer.addChild(backButtonText);
backButtonBg.interactive = true;
backButtonBg.down = function (x, y, obj) {
returnToMenu();
};
// In-game menu button
var gameMenuButtonBg = LK.getAsset('settingsButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 1898,
y: 2582
});
game.addChild(gameMenuButtonBg);
gameMenuButtonBg.visible = false;
var gameMenuButtonText = new Text2('≡', {
size: 80,
fill: 0xFFFFFF
});
gameMenuButtonText.anchor.set(0.5, 0.5);
gameMenuButtonText.x = 1898;
gameMenuButtonText.y = 2582;
game.addChild(gameMenuButtonText);
gameMenuButtonText.visible = false;
gameMenuButtonBg.interactive = true;
gameMenuButtonBg.down = function (x, y, obj) {
if (gameState === 'playing') {
// Reset game state
gameState = 'menu';
menuContainer.visible = true;
gameMenuButtonBg.visible = false;
gameMenuButtonText.visible = false;
// Clear all sushi from the array and game
for (var i = sushiArray.length - 1; i >= 0; i--) {
sushiArray[i].destroy();
}
sushiArray = [];
// Reset score
LK.setScore(0);
scoreTxt.setText('0');
}
};
function returnToMenu() {
gameState = 'menu';
settingsMenuContainer.visible = false;
shopMenuContainer.visible = false;
menuContainer.visible = true;
gameMenuButtonBg.visible = false;
gameMenuButtonText.visible = false;
} ===================================================================
--- original.js
+++ change.js
@@ -56,10 +56,10 @@
/****
* Game Code
****/
-// Initialize assets for play button
// Create danger line at bottom
+// Initialize assets for play button
var dangerLine = LK.getAsset('dangerLine', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
@@ -142,8 +142,10 @@
playButtonBg.interactive = true;
playButtonBg.down = function (x, y, obj) {
gameState = 'playing';
menuContainer.visible = false;
+ gameMenuButtonBg.visible = true;
+ gameMenuButtonText.visible = true;
};
// Settings button
var settingsButtonBg = LK.getAsset('settingsButtonBg', {
anchorX: 0.5,
@@ -169,19 +171,19 @@
// Shop button
var shopButtonBg = LK.getAsset('settingsButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
- x: 1900,
- y: 150
+ x: 1024,
+ y: 1900
});
menuContainer.addChild(shopButtonBg);
var shopButtonText = new Text2('🛍️', {
size: 80,
fill: 0xFFFFFF
});
shopButtonText.anchor.set(0.5, 0.5);
-shopButtonText.x = 1900;
-shopButtonText.y = 150;
+shopButtonText.x = 1024;
+shopButtonText.y = 1900;
menuContainer.addChild(shopButtonText);
shopButtonBg.interactive = true;
shopButtonBg.down = function (x, y, obj) {
gameState = 'shop';
@@ -493,26 +495,30 @@
// In-game menu button
var gameMenuButtonBg = LK.getAsset('settingsButtonBg', {
anchorX: 0.5,
anchorY: 0.5,
- x: 150,
- y: 150
+ x: 1898,
+ y: 2582
});
game.addChild(gameMenuButtonBg);
+gameMenuButtonBg.visible = false;
var gameMenuButtonText = new Text2('≡', {
size: 80,
fill: 0xFFFFFF
});
gameMenuButtonText.anchor.set(0.5, 0.5);
-gameMenuButtonText.x = 150;
-gameMenuButtonText.y = 150;
+gameMenuButtonText.x = 1898;
+gameMenuButtonText.y = 2582;
game.addChild(gameMenuButtonText);
+gameMenuButtonText.visible = false;
gameMenuButtonBg.interactive = true;
gameMenuButtonBg.down = function (x, y, obj) {
if (gameState === 'playing') {
// Reset game state
gameState = 'menu';
menuContainer.visible = true;
+ gameMenuButtonBg.visible = false;
+ gameMenuButtonText.visible = false;
// Clear all sushi from the array and game
for (var i = sushiArray.length - 1; i >= 0; i--) {
sushiArray[i].destroy();
}
@@ -526,5 +532,7 @@
gameState = 'menu';
settingsMenuContainer.visible = false;
shopMenuContainer.visible = false;
menuContainer.visible = true;
+ gameMenuButtonBg.visible = false;
+ gameMenuButtonText.visible = false;
}
\ No newline at end of file
Un sushi con cara traviesa. In-Game asset. 2d. High contrast. No shadows
Un botón de jugar de color naranja sushi. In-Game asset. 2d. High contrast. No shadows
Un engranaje de ajustes naranja muy cute. In-Game asset. 2d. High contrast. No shadows
Sushi congelado con cara cute. In-Game asset. 2d. High contrast. No shadows
Sushi con apariencia de santa Claus/papa noel. In-Game asset. 2d. High contrast. No shadows
Un sushi con cara traviesa y con aspecto de elfo navideño. In-Game asset. 2d. High contrast. No shadows
Letrero rectangular pequeño que diga "caza de sushis". In-Game asset. 2d. High contrast. No shadows
Botón rectangular naranja color sushi. In-Game asset. 2d. High contrast. No shadows
Genera una línea horizontal de fuego con detalles ígneos!. In-Game asset. 2d. High contrast. No shadows
Genera una imagen de un sushi con cara de calavera, que sea un botón circular y que se vea muy epico. In-Game asset. 2d. High contrast. No shadows
Un botón rectangular azul. In-Game asset. 2d. High contrast. No shadows