User prompt
porfavor corrige esto: necesito que separes los grounds, es decir añade un ground para el minijuego atletismo y otro ground por separado para el minijuego baloncesto
User prompt
“Agrega un botón en la esquina inferior de la pantalla del minijuego que diga ‘Volver al menú’. Cuando el jugador toque ese botón, debe regresar inmediatamente al menú principal. Haz que el botón sea simple, fácil de ver y compatible con Upit.”
User prompt
**“Reemplaza el minijuego de ciclismo por un minijuego muy simple de tiro libre de baloncesto. Debe funcionar así: El jugador toca o hace click en la pelota. Arrastra hacia arriba para elegir la fuerza y dirección del tiro. Suelta para lanzar la pelota usando esa fuerza. Si la pelota entra en el aro, el nivel termina. Cuando termina, el juego debe volver al menú de inicio. Haz el código lo más simple posible y compatible con Upit. No uses físicas avanzadas.”**
User prompt
corrige esto: se debe volver al menu principal al jugar el minijuego de ciclismo
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'addEventListener')' in or related to this line: 'document.addEventListener('keydown', function (e) {' Line Number: 513
User prompt
arregla lo que esta mal
User prompt
corrige esto: en el minijuego de ciclismo quiero que el jugador avance al presionar la tecla K y L, cuando el jugador llegue a la meta, volver al menu principal
User prompt
“Reemplaza el minijuego de lanzamiento de jabalina por un minijuego simple de ciclismo en 2D. El jugador debe avanzar usando doble-click: cada doble-click aumenta un poco la velocidad. La velocidad baja lentamente con el tiempo. La pista debe moverse hacia la izquierda para simular que el ciclista avanza. El nivel termina cuando se llega a la meta. Después de llegar a la meta, el juego debe regresar automáticamente al menú de inicio. Haz el código muy simple, compatible con Upit y sin funciones avanzadas.”
User prompt
“Quiero reemplazar el minijuego de lanzamiento de jabalina por uno de ciclismo. Crea un minijuego simple de ciclismo en 2D donde el jugador avanza alternando las teclas A y D. Cada alternancia aumenta un poco la velocidad, y la velocidad baja lentamente con el tiempo. La pista debe moverse hacia la izquierda para simular el avance. El jugador gana cuando llega a la meta.
User prompt
corrige esto: quiero que añadas y pongas 1 finish line para atletismo y otro finish line para natacion
User prompt
corrige esto> quiero que añadas 1 player distinto para cada uno de los juegos( atletismo, natacion, jabalina)
User prompt
corregir esto:Descripción: El personaje está quieto en el lado izquierdo de la pantalla. Al hacer clic izquierdo, el personaje lanza la jabalina hacia la derecha con una trayectoria diagonal simple. No hay barra de potencia ni movimiento del jugador. Cuando la jabalina termina su trayectoria o toca el suelo, el juego regresa automáticamente al menú principal. No es necesario mostrar botones ni mensajes. Solo una animación rápida del lanzamiento y el regreso al menú. Notas para la IA: Input: mouse left click = lanzar jabalina. Después del lanzamiento y caída, cargar la escena del menú principal. No usar físicas avanzadas ni temporizadores complicados, solo una pequeña pausa (1–2 segundos) antes de volver al menú.
User prompt
corregir esto en jabalina:Descripción: El personaje permanece quieto en el lado izquierdo. Al hacer clic izquierdo, el personaje lanza la jabalina hacia la derecha en una trayectoria diagonal simple. Cuando la jabalina cae al suelo, aparece el texto “¡Buen lanzamiento!”. Luego de unos segundos, el juego reinicia automáticamente o se muestra un botón de “Reintentar”. Al hacer clic en “Reintentar”, la jabalina vuelve a su posición inicial y se puede volver a lanzar normalmente. El personaje no se mueve. No hay barra de fuerza ni físicas avanzadas. Cada clic solo lanza una jabalina a la vez. Notas para la IA: Asegurarse de que al reiniciar el nivel o presionar “Reintentar”, la jabalina: Se haga visible de nuevo. Regrese a su posición original. Esté lista para ser lanzada otra vez. Input: mouse left click = lanzar jabalina.
User prompt
Descripción general: El personaje está quieto en el lado izquierdo de la pantalla. Cuando el jugador da clic con el mouse (clic izquierdo), el personaje lanza la jabalina inmediatamente. La jabalina vuela en diagonal hacia la derecha y luego cae al suelo. No hay barra de potencia ni carga. Al caer la jabalina, aparece un texto que muestra algo simple como “¡Buen lanzamiento!” o una distancia fija. No se usan físicas avanzadas, solo una animación simple de movimiento diagonal. Al terminar el lanzamiento, se puede mostrar un botón de “Reintentar” o “Volver al menú”. Notas para la IA: Input: mouse left click → acción de lanzar. La jabalina solo se lanza una vez por clic. El personaje no debe moverse. El vuelo puede ser una animación simple (por ejemplo, moverse hacia arriba y a la derecha y luego caer).
User prompt
corrige esto:Descripción general: El jugador controla a un personaje que permanece quieto en el suelo (no se mueve lateralmente). El objetivo es lanzar una jabalina lo más lejos posible presionando una tecla o botón en el momento correcto. Mecánica del lanzamiento: El personaje no se mueve del lugar. Cuando el jugador mantiene presionada una tecla (por ejemplo, barra espaciadora), aparece una barra de potencia que sube y baja. Al soltar la tecla, la jabalina se lanza con la fuerza correspondiente al nivel de la barra. La distancia del lanzamiento depende de la potencia. La jabalina vuela en diagonal y cae después de unos segundos.
User prompt
corrige esto:Nivel 2: Natación (nueva versión simple) El personaje nada automáticamente hacia la derecha. Al presionar la tecla espacio, el personaje nada más rápido por un momento. Si el jugador deja de presionar, el personaje vuelve a su velocidad normal. Puede moverse arriba o abajo con las flechas para esquivar obstáculos opcionales. El nivel termina cuando el personaje llega al final de la piscina (lado derecho de la pantalla). No usar físicas de agua ni sistemas avanzados, solo movimiento básico.
User prompt
corregir esto:🧭 Navegación entre escenas (simple) Cuando el jugador presiona un botón del menú principal (Atletismo, Natación o Jabalina), el juego debe cerrar u ocultar el menú principal y abrir solo el nivel elegido. El menú no debe permanecer visible durante el juego. Cada nivel funciona en su propia pantalla o escena. Al finalizar el nivel, mostrar un botón “Volver al menú”, que regrese al jugador a la pantalla principal. No usar sistemas de carga complejos; solo mostrar y ocultar pantallas o cambiar escenas de forma sencilla.
User prompt
Porfavor mejoremos esto: 🧩 Menú del juego Pantalla inicial con el título “Mini Juegos Olímpicos”. Tres botones: “Atletismo”, “Natación” y “Jabalina”. Al ganar un nivel, mostrar un mensaje de victoria y opción de volver al menú.Nivel 1: Atletismo (Carrera de 100 metros) El personaje corre en una pista. El jugador presiona espacio repetidamente para hacerlo avanzar. Gana si llega a la meta en el menor tiempo posible. Mostrar una línea de salida, meta y un fondo de estadio. Incluir un contador de tiempo y una animación sencilla de correr. 🥈 Nivel 2: Natación (Evita obstáculos) El personaje nada automáticamente hacia adelante. El jugador usa las flechas ↑ y ↓ para moverse arriba o abajo. En el camino hay obstáculos flotantes (como boyas o pelotas) que se deben esquivar. Si el personaje choca con un obstáculo, se ralentiza un poco. El nivel termina al llegar al final de la piscina. Mostrar una barra de progreso o simplemente la meta al fondo. Fondo azul con burbujas o líneas para simular el agua. 🥉 Nivel 3: Lanzamiento de jabalina El personaje corre automáticamente unos pasos. El jugador mantiene presionado espacio para cargar fuerza y lo suelta para lanzar. Entre más tiempo lo mantenga (hasta un límite), más lejos lanza. Mostrar una animación simple del lanzamiento. Al final, mostrar la distancia alcanzada.
Code edit (1 edits merged)
Please save this source code
User prompt
Mini Juegos Olímpicos
Initial prompt
Crea un videojuego 2D estilo pixel art llamado "Mini Juegos Olímpicos", con 3 niveles diferentes, cada uno representando una disciplina olímpica: 1️⃣ Atletismo (Carrera de 100 metros): el jugador debe presionar repetidamente una tecla (por ejemplo, "espacio") para correr más rápido y llegar primero a la meta. 2️⃣ Natación: el personaje debe alternar dos teclas (por ejemplo, "A" y "D") para nadar, evitando perder ritmo y manteniendo la barra de energía. 3️⃣ Lanzamiento de jabalina: el jugador debe mantener una tecla para cargar fuerza y soltarla en el ángulo correcto para lograr el mejor lanzamiento.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Basketball = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('ball', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = 1024;
self.y = 1800;
self.vx = 0;
self.vy = 0;
self.gravity = 0.5;
self.isDragging = false;
self.dragStartX = 0;
self.dragStartY = 0;
self.lastX = self.x;
self.lastY = self.y;
self.isThrown = false;
self.update = function () {
if (!self.isDragging && self.isThrown) {
self.vy += self.gravity;
self.x += self.vx;
self.y += self.vy;
self.lastX = self.x;
self.lastY = self.y;
if (self.y > 2000) {
self.isThrown = false;
self.vx = 0;
self.vy = 0;
self.x = 1024;
self.y = 1800;
}
}
};
self.startDrag = function (x, y) {
self.isDragging = true;
self.dragStartX = x;
self.dragStartY = y;
};
self.updateDrag = function (x, y) {
if (self.isDragging) {
self.x = x;
self.y = y;
}
};
self.release = function () {
if (self.isDragging) {
self.isDragging = false;
self.isThrown = true;
var deltaX = self.dragStartX - self.x;
var deltaY = self.dragStartY - self.y;
self.vx = deltaX * 0.08;
self.vy = deltaY * 0.08;
}
};
return self;
});
var CyclingPlayer = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('playerCycling', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = 300;
self.y = 1000;
self.speed = 0;
self.maxSpeed = 20;
self.acceleration = 1.2;
self.deceleration = 0.02;
self.lastKeyPressed = '';
self.trackOffset = 0;
self.update = function () {
if (self.speed > 0) {
self.speed -= self.deceleration;
if (self.speed < 0) {
self.speed = 0;
}
}
self.trackOffset += self.speed;
};
self.pedalA = function () {
if (self.lastKeyPressed !== 'A') {
if (self.speed < self.maxSpeed) {
self.speed += self.acceleration;
}
self.lastKeyPressed = 'A';
}
};
self.pedalD = function () {
if (self.lastKeyPressed !== 'D') {
if (self.speed < self.maxSpeed) {
self.speed += self.acceleration;
}
self.lastKeyPressed = 'D';
}
};
return self;
});
var Hoop = Container.expand(function () {
var self = Container.call(this);
var hoopGraphics = self.attachAsset('hoop', {
anchorX: 0.5,
anchorY: 0.5
});
var backboardGraphics = self.attachAsset('backboard', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = 1024;
self.y = 600;
return self;
});
var JavelinThrower = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('playerJavelin', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = 200;
self.y = 2200;
self.angle = 45;
self.thrown = false;
self.throwDistance = 150;
self.update = function () {};
self.throwJavelin = function () {
self.thrown = true;
return self.throwDistance;
};
return self;
});
var MenuButton = Container.expand(function () {
var self = Container.call(this);
var buttonBg = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
buttonBg.width = 400;
buttonBg.height = 100;
buttonBg.tint = 0x2c3e50;
self.buttonText = new Text2('', {
size: 80,
fill: '#ffffff'
});
self.addChild(self.buttonText);
self.buttonText.anchor.set(0.5, 0.5);
self.callback = null;
self.isHovered = false;
self.down = function (x, y, obj) {
if (self.callback) {
self.callback();
}
};
self.move = function (x, y, obj) {};
return self;
});
var SprintPlayer = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('playerSprint', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 0;
self.maxSpeed = 15;
self.acceleration = 0.5;
self.x = 200;
self.y = 400;
self.update = function () {
self.x += self.speed;
if (self.speed > 0) {
self.speed *= 0.98;
}
};
self.accelerate = function () {
if (self.speed < self.maxSpeed) {
self.speed += self.acceleration;
}
};
return self;
});
var Swimmer = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('playerSwim', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = 200;
self.y = 1366;
self.normalSpeed = 4;
self.boostedSpeed = 8;
self.currentSpeed = self.normalSpeed;
self.isBoosting = false;
self.boostDuration = 0;
self.maxBoostDuration = 20;
self.minY = 1100;
self.maxY = 1600;
self.update = function () {
self.x += self.currentSpeed;
if (self.isBoosting) {
self.boostDuration--;
if (self.boostDuration <= 0) {
self.isBoosting = false;
self.currentSpeed = self.normalSpeed;
}
}
self.y = Math.max(self.minY, Math.min(self.maxY, self.y));
};
self.startBoost = function () {
self.isBoosting = true;
self.boostDuration = self.maxBoostDuration;
self.currentSpeed = self.boostedSpeed;
};
return self;
});
var ThrownJavelin = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('javelin', {
anchorX: 0.5,
anchorY: 0.5
});
self.startX = 200;
self.startY = 2200;
self.x = self.startX;
self.y = self.startY;
self.distance = 0;
self.maxDistance = 200;
self.speed = 12;
self.angle = 45;
self.verticalVelocity = 0;
self.gravity = 0.3;
self.landed = false;
self.hasShownResult = false;
self.rotation = 0;
self.update = function () {
if (!self.landed) {
var angleRad = self.angle * Math.PI / 180;
self.x += Math.cos(angleRad) * self.speed;
self.y -= Math.sin(angleRad) * self.speed - self.verticalVelocity;
self.verticalVelocity -= self.gravity;
self.distance = Math.sqrt(Math.pow(self.x - self.startX, 2) + Math.pow(self.y - self.startY, 2));
self.rotation = angleRad;
if (self.y >= 2200 || self.distance > self.maxDistance) {
self.landed = true;
self.y = 2200;
self.distance = Math.abs(self.x - self.startX);
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var currentEvent = 0;
var eventComplete = false;
var events = ['sprint', 'swimming', 'cycling'];
var keysPressed = {};
var scores = {
sprint: 0,
swimming: 0,
cycling: 0
};
var eventTimes = {
sprint: 0,
swimming: 0
};
var eventDistances = {
javelin: 0,
cycling: 0
};
var sprintPlayer = null;
var swimmer = null;
var javelinThrower = null;
var thrownJavelin = null;
var cyclingPlayer = null;
var leftZoneActive = false;
var rightZoneActive = false;
var gameUI = new Container();
gameUI.visible = false;
game.addChild(gameUI);
var gameState = 'menu';
var menuContainer = new Container();
menuContainer.visible = true;
game.addChild(menuContainer);
var eventTitle = new Text2('Sprint Event', {
size: 120,
fill: '#000000'
});
eventTitle.anchor.set(0.5, 0);
eventTitle.x = 1024;
eventTitle.y = 100;
LK.gui.top.addChild(eventTitle);
var scoreDisplay = new Text2('Distance: 0m', {
size: 100,
fill: '#000000'
});
scoreDisplay.anchor.set(0.5, 0);
scoreDisplay.x = 1024;
scoreDisplay.y = 250;
LK.gui.top.addChild(scoreDisplay);
var instructionText = new Text2('Tap rapidly to sprint!', {
size: 80,
fill: '#333333'
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 1366;
LK.gui.center.addChild(instructionText);
var resultMessage = new Text2('', {
size: 100,
fill: '#27ae60'
});
resultMessage.anchor.set(0.5, 0.5);
resultMessage.x = 1024;
resultMessage.y = 1366;
LK.gui.center.addChild(resultMessage);
var retryButton = new MenuButton();
retryButton.x = 1024;
retryButton.y = 1700;
retryButton.visible = false;
LK.gui.bottom.addChild(retryButton);
function initSprintEvent() {
gameUI.removeChildren();
eventComplete = false;
eventTimes.sprint = 0;
var ground = gameUI.addChild(LK.getAsset('groundAthletics', {
anchorX: 0,
anchorY: 1
}));
ground.x = 0;
ground.y = 800;
var finishLine = gameUI.addChild(LK.getAsset('finishLine', {
anchorX: 1,
anchorY: 1
}));
finishLine.x = 2048;
finishLine.y = 800;
sprintPlayer = gameUI.addChild(new SprintPlayer());
sprintPlayer.y = 650;
eventTitle.setText('Sprint Event - 100m Dash');
instructionText.setText('Tap to accelerate!');
scoreDisplay.setText('Distance: 0m');
}
function initSwimmingEvent() {
gameUI.removeChildren();
eventComplete = false;
eventTimes.swimming = 0;
var waterZone = gameUI.addChild(LK.getAsset('waterZone', {
anchorX: 0,
anchorY: 0
}));
waterZone.x = 0;
waterZone.y = 1000;
var finishLine = gameUI.addChild(LK.getAsset('finishLine', {
anchorX: 1,
anchorY: 1
}));
finishLine.x = 2048;
finishLine.y = 1600;
swimmer = gameUI.addChild(new Swimmer());
eventTitle.setText('Swimming Event - Pool Sprint');
instructionText.setText('Hold space to boost! Use arrows to move up/down!');
scoreDisplay.setText('Distance: 0m');
}
function initBasketballEvent() {
gameUI.removeChildren();
eventComplete = false;
var ground = gameUI.addChild(LK.getAsset('groundBasketball', {
anchorX: 0,
anchorY: 1
}));
ground.x = 0;
ground.y = 2100;
var hoop = gameUI.addChild(new Hoop());
basketball = gameUI.addChild(new Basketball());
var backToMenuButton = gameUI.addChild(new MenuButton());
backToMenuButton.x = 1800;
backToMenuButton.y = 2550;
backToMenuButton.buttonText.setText('Volver');
backToMenuButton.callback = function () {
showMainMenu();
};
eventTitle.setText('Basketball - Free Throw');
instructionText.setText('Drag the ball upward and release to shoot!');
scoreDisplay.setText('Ready to shoot!');
}
function completeEvent() {
eventComplete = true;
instructionText.setText('Event Complete! Returning to menu...');
var nextEventTimeout = LK.setTimeout(function () {
currentEvent++;
if (currentEvent >= events.length) {
showMainMenu();
} else {
showMainMenu();
}
}, 2000);
}
function showMainMenu() {
gameState = 'menu';
menuContainer.visible = true;
gameUI.visible = false;
menuContainer.removeChildren();
gameUI.removeChildren();
var menuTitle = new Text2('Mini Juegos Olímpicos', {
size: 150,
fill: '#ffffff'
});
menuTitle.anchor.set(0.5, 0.5);
menuTitle.x = 1024;
menuTitle.y = 500;
menuContainer.addChild(menuTitle);
var sprintButton = menuContainer.addChild(new MenuButton());
sprintButton.x = 1024;
sprintButton.y = 1000;
sprintButton.buttonText.setText('Atletismo');
sprintButton.callback = function () {
currentEvent = 0;
gameState = 'playing';
startNextEvent();
};
var swimmingButton = menuContainer.addChild(new MenuButton());
swimmingButton.x = 1024;
swimmingButton.y = 1300;
swimmingButton.buttonText.setText('Natación');
swimmingButton.callback = function () {
currentEvent = 1;
gameState = 'playing';
startNextEvent();
};
var basketballButton = menuContainer.addChild(new MenuButton());
basketballButton.x = 1024;
basketballButton.y = 1600;
basketballButton.buttonText.setText('Baloncesto');
basketballButton.callback = function () {
currentEvent = 2;
gameState = 'playing';
startNextEvent();
};
}
function startNextEvent() {
menuContainer.visible = false;
gameUI.visible = true;
if (currentEvent === 0) {
initSprintEvent();
} else if (currentEvent === 1) {
initSwimmingEvent();
} else if (currentEvent === 2) {
initBasketballEvent();
}
}
var basketball = null;
var hoopX = 1024;
var hoopY = 600;
game.down = function (x, y, obj) {
if (gameState === 'menu') return;
if (eventComplete) return;
if (currentEvent === 0) {
if (sprintPlayer) {
sprintPlayer.accelerate();
LK.getSound('sprint').play();
}
} else if (currentEvent === 1) {
if (swimmer) {
swimmer.startBoost();
LK.getSound('swim').play();
}
} else if (currentEvent === 2) {
if (basketball && !basketball.isThrown) {
basketball.startDrag(x, y);
}
}
};
game.move = function (x, y, obj) {
if (gameState === 'menu') return;
if (eventComplete) return;
if (currentEvent === 1) {
if (swimmer) {
swimmer.y = y;
}
} else if (currentEvent === 2) {
if (basketball && basketball.isDragging) {
basketball.updateDrag(x, y);
}
}
};
game.up = function (x, y, obj) {
if (currentEvent === 2) {
if (basketball) {
basketball.release();
}
}
};
game.update = function () {
if (gameState === 'menu') return;
if (eventComplete) return;
if (currentEvent === 0) {
if (sprintPlayer) {
sprintPlayer.update();
var distance = Math.round((sprintPlayer.x - 200) / 16);
scoreDisplay.setText('Distance: ' + distance + 'm');
if (sprintPlayer.x >= 1800) {
eventTimes.sprint = LK.ticks;
completeEvent();
}
}
} else if (currentEvent === 1) {
if (swimmer) {
swimmer.update();
var distance = Math.round((swimmer.x - 200) / 16);
scoreDisplay.setText('Distance: ' + distance + 'm');
if (swimmer.x >= 1800) {
eventTimes.swimming = LK.ticks;
completeEvent();
}
}
} else if (currentEvent === 2) {
if (basketball) {
basketball.update();
var ballInHoop = basketball.x >= hoopX - 50 && basketball.x <= hoopX + 50 && basketball.y >= hoopY - 30 && basketball.y <= hoopY + 50 && basketball.lastY <= hoopY && basketball.y > hoopY;
if (ballInHoop) {
scoreDisplay.setText('GOAL! Excellent shot!');
completeEvent();
}
}
}
};
showMainMenu();
LK.playMusic('bgmusic');
;
; ===================================================================
--- original.js
+++ change.js
@@ -337,9 +337,9 @@
function initSprintEvent() {
gameUI.removeChildren();
eventComplete = false;
eventTimes.sprint = 0;
- var ground = gameUI.addChild(LK.getAsset('ground', {
+ var ground = gameUI.addChild(LK.getAsset('groundAthletics', {
anchorX: 0,
anchorY: 1
}));
ground.x = 0;
@@ -379,9 +379,9 @@
}
function initBasketballEvent() {
gameUI.removeChildren();
eventComplete = false;
- var ground = gameUI.addChild(LK.getAsset('ground', {
+ var ground = gameUI.addChild(LK.getAsset('groundBasketball', {
anchorX: 0,
anchorY: 1
}));
ground.x = 0;
una pelota de basketball. In-Game asset. 2d. High contrast. No shadows
“Necesito una pista de atletismo en vista lateral 2D. Debe tener carriles rojos con líneas blancas. Debe ser larga, horizontal y ocupar todo el ancho. No quiero público ni edificios, solo la pista. El estilo debe ser simple para un videojuego 2D.”. In-Game asset. 2d. High contrast. No shadows
fondo de una cancha de baloncesto animada. In-Game asset. 2d. High contrast. No shadows
make a animated guy swimming. In-Game asset. 2d. High contrast. No shadows
quiero que hagas un titulo en 2d que diga mini juegos olimpicos, la tipografia me gustaria tipo mario bros. In-Game asset. 2d. High contrast. No shadows
quiero que hagas un titulo 2d que diga atletismo, con tipografia estilo mario bros. In-Game asset. 2d. High contrast. No shadows
quiero que hagas un titulo 2d que diga natación, con tipografia estilo mario bros. In-Game asset. 2d. High contrast. No shadows
quiero que hagas un titulo 2d que diga baloncesto, con tipografia estilo mario bros. In-Game asset. 2d. High contrast. No shadows
has un fondo de agua animada con algunos objetos como flotadores. In-Game asset. 2d. High contrast. No shadows
has personajes animados estilo arcade en un ambiente de juesgo olimpicos. In-Game asset. 2d. High contrast. No shadows
quiero que hagas un personaje animado que este nadando. In-Game asset. 2d. High contrast. No shadows