User prompt
Agrega un texto arriba de los dados para que avisé cuando se puede lanzar y cuando están cambiando. También agrega un contador con segundos y decimales 1.00s (que se actualice a tiempo) al finalizar el cambio antes de poder lanzar ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Haz que se tenga que esperar mínimo 1 segundos antes de hacer otro tiro
User prompt
Tiñe de un color amarillo suave los dados iguales y con colores random los dados iguales pero que son inferiores al grupo grande ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Agrega un texto en la parte superior centrado diciendo 0/8. El cero representa la cantidad de dados iguales (solo aplica el que mas se repita. Ej: si hay 2 dados de 4 y 4 dados de 1 solo contará el grupo más grande)
User prompt
El sonido no se escucha, haz que la lógica de sonido este por separado
User prompt
Agrega un sonido cada que los dados cambian
User prompt
Haz que suene roll cada que los dados se tiran (haz que se escuche un máximo de 4 roll sound para evitar sonidos fuertes)
User prompt
Agrega un efecto de rebote cada vez que cabía ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Arregla el error que hace que el asset de dado desaparezca por momentos, haz que el cambio entre asset no se vea con lagasos (no tweet plugin)
User prompt
Arregla el error que hace que el asset de dado desaparezca por momentos, haz que el cambio entre asset no se vea con lagasos (no tweet plugin)
User prompt
Arregla el error que hace que el asset de dado desaparezca por momentos, haz que el cambio entre asset no se vea con lagasos ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Arregla el error que hace que no cambie los asset con los valores
User prompt
Haz que el objeto no se borre y cree otro, que simplemente cambie asset
User prompt
Agrega un evento llamado "lanzamiento" con un activador bolano. Haz que cada dado cambie aleatoriamente entre 6 a 12 veces empezando rápido y terminando cada vez más lento hasta finalizar. Una vez el último dado para se puede volver a tirar (sin tweet plugin, ni comentarios)
User prompt
Sin tweet plugin
User prompt
Agrega un evento llamado "lanzamiento" con un activador bolano. Haz que cada dado cambie aleatoriamente entre 6 a 12 veces empezando rápido y terminando cada vez más lento hasta finalizar. Una vez el último dado para se puede volver a tirar ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Quiero que al tocar la pantalla los números cambien aleatoriamente
Code edit (1 edits merged)
Please save this source code
User prompt
Asigna un asset diferente para cada valor del dado
User prompt
Agrega a cada dado una varisble numérica llamada "valor"
User prompt
Agrega una variable Number a cada dado
User prompt
Agrega una variable number a cada dado, haz que cada segundo de la animación roll su variable cambie aleatorio en un rango entre 1 a 6, haz que su aset cambie durante la animación correspondiente la variable con el número del dado ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Agrega una flag para permitir el rodamiento una vez finaliza la animación y pasa un segundo ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Agrega una animación al tocar la pantalla donde los dados dan 3 giros en su propio eje ↪💡 Consider importing and using the following plugins: @upit/tween.v1
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Dice = Container.expand(function () { var self = Container.call(this); // Add numeric variable valor self.valor = 1; // Add rolling animation variables self.isRolling = false; self.rollCount = 0; self.rollTarget = 0; self.rollTimer = 0; var diceGraphics = self.attachAsset('Dice' + self.valor, { anchorX: 0.5, anchorY: 0.5 }); // Method to update dice visual based on valor self.updateVisual = function () { // Create new graphics based on valor first var newGraphics = self.attachAsset('Dice' + self.valor, { anchorX: 0.5, anchorY: 0.5 }); // Remove old graphics after new one is created self.removeChild(diceGraphics); // Update reference to new graphics diceGraphics = newGraphics; // Add bounce effect when value changes during rolling if (self.isRolling) { self.playDiceSound(); diceGraphics.scaleX = 1; diceGraphics.scaleY = 1; tween(diceGraphics, { scaleX: 1.2, scaleY: 1.2 }, { duration: 100, easing: tween.bounceOut, onFinish: function onFinish() { tween(diceGraphics, { scaleX: 1, scaleY: 1 }, { duration: 100, easing: tween.bounceOut }); } }); } }; // Method to play dice sound self.playDiceSound = function () { LK.getSound('Roll').play(); }; // Method to start rolling animation self.startRoll = function () { self.isRolling = true; self.rollCount = 0; self.rollTarget = Math.floor(Math.random() * 7) + 6; // 6 to 12 rolls self.rollTimer = 0; }; // Update method for rolling animation self.update = function () { if (self.isRolling) { var rollSpeed = Math.floor(self.rollCount * 1.5) + 3; // Start fast, get slower if (self.rollTimer >= rollSpeed) { self.valor = Math.floor(Math.random() * 6) + 1; self.updateVisual(); self.rollCount++; self.rollTimer = 0; if (self.rollCount >= self.rollTarget) { self.isRolling = false; } } else { self.rollTimer++; } } }; return self; }); /**** * Initialize Game ****/ // Create array to hold all dice var game = new LK.Game({ backgroundColor: 0xFFFFFF }); /**** * Game Code ****/ // Create array to hold all dice var diceArray = []; // Add lanzamiento boolean variable var lanzamiento = false; // Add timer to enforce minimum 1 second wait between rolls var lastRollFinishTime = 0; var minimumWaitTime = 1000; // 1 second in milliseconds // Calculate center positions for two columns var centerX = 2048 / 2; var centerY = 2732 / 2; var columnSpacing = 330; // Space between columns var rowSpacing = 300; // Space between rows // Create matching dice counter text var counterText = new Text2('0/8', { size: 80, fill: 0x000000 }); counterText.anchor.set(0.5, 0); counterText.y = 100; // Move down to make space for status text LK.gui.top.addChild(counterText); // Create status text above dice var statusText = new Text2('Toca para lanzar', { size: 60, fill: 0x333333 }); statusText.anchor.set(0.5, 0.5); statusText.x = centerX; statusText.y = centerY - 400; // Position above dice grid game.addChild(statusText); // Create countdown text var countdownText = new Text2('', { size: 50, fill: 0x666666 }); countdownText.anchor.set(0.5, 0.5); countdownText.x = centerX; countdownText.y = centerY - 340; // Position below status text game.addChild(countdownText); // Function to count matching dice function countMatchingDice() { var counts = {}; // Count occurrences of each dice value for (var i = 0; i < diceArray.length; i++) { var value = diceArray[i].valor; counts[value] = (counts[value] || 0) + 1; } // Find the highest count var maxCount = 0; for (var value in counts) { if (counts[value] > maxCount) { maxCount = counts[value]; } } return maxCount; } // Function to apply tint colors to dice based on matching groups function applyDiceTints() { var counts = {}; // Count occurrences of each dice value for (var i = 0; i < diceArray.length; i++) { var value = diceArray[i].valor; counts[value] = (counts[value] || 0) + 1; } // Find the highest count and value var maxCount = 0; var maxValue = 0; for (var value in counts) { if (counts[value] > maxCount) { maxCount = counts[value]; maxValue = parseInt(value); } } // Generate random colors for smaller groups var randomColors = [0xFF6B6B, 0x4ECDC4, 0x45B7D1, 0x96CEB4, 0xFECE00, 0xF38BA8]; var colorIndex = 0; var usedColors = {}; // Apply tints to all dice for (var i = 0; i < diceArray.length; i++) { var dice = diceArray[i]; var value = dice.valor; if (value == maxValue && counts[value] == maxCount) { // Largest group gets soft yellow tint dice.children[0].tint = 0xFFFF99; // Soft yellow } else if (counts[value] > 1) { // Smaller matching groups get random colors if (!usedColors[value]) { usedColors[value] = randomColors[colorIndex % randomColors.length]; colorIndex++; } dice.children[0].tint = usedColors[value]; } else { // Single dice get no tint (white) dice.children[0].tint = 0xFFFFFF; } } } // Create 8 dice in two columns (4 rows each) for (var col = 0; col < 2; col++) { for (var row = 0; row < 4; row++) { var dice = new Dice(); // Assign random valor from 1 to 6 dice.valor = Math.floor(Math.random() * 6) + 1; // Update visual based on valor dice.updateVisual(); // Position dice in grid dice.x = centerX + (col - 0.5) * columnSpacing; dice.y = centerY + (row - 1.5) * rowSpacing; // Add to game and array game.addChild(dice); diceArray.push(dice); } // Game update method to handle dice rolling game.update = function () { // Update status and countdown text based on current state var currentTime = Date.now(); var timeSinceLastRoll = currentTime - lastRollFinishTime; var timeRemaining = minimumWaitTime - timeSinceLastRoll; if (lanzamiento) { // Currently rolling statusText.setText('Cambiando dados...'); countdownText.setText(''); } else if (timeRemaining > 0) { // Waiting period - show countdown statusText.setText('Espera para lanzar'); var secondsRemaining = timeRemaining / 1000; countdownText.setText(secondsRemaining.toFixed(2) + 's'); } else { // Ready to roll statusText.setText('Toca para lanzar'); countdownText.setText(''); } // Check if all dice have finished rolling if (lanzamiento) { var allFinished = true; for (var i = 0; i < diceArray.length; i++) { if (diceArray[i].isRolling) { allFinished = false; break; } } // Reset lanzamiento when all dice are done if (allFinished) { lanzamiento = false; // Record the time when rolling finished lastRollFinishTime = Date.now(); // Update counter text with matching dice count var matchingCount = countMatchingDice(); counterText.setText(matchingCount + '/8'); // Apply tint colors to dice based on matching groups applyDiceTints(); } } }; // Add screen tap handler for lanzamiento event game.down = function (x, y, obj) { // Check if enough time has passed since last roll finished var currentTime = Date.now(); var timeSinceLastRoll = currentTime - lastRollFinishTime; // Only allow new roll if not currently rolling AND minimum wait time has passed if (!lanzamiento && timeSinceLastRoll >= minimumWaitTime) { lanzamiento = true; // Start rolling animation for all dice for (var i = 0; i < diceArray.length; i++) { diceArray[i].startRoll(); } } }; }
===================================================================
--- original.js
+++ change.js
@@ -112,9 +112,28 @@
size: 80,
fill: 0x000000
});
counterText.anchor.set(0.5, 0);
+counterText.y = 100; // Move down to make space for status text
LK.gui.top.addChild(counterText);
+// Create status text above dice
+var statusText = new Text2('Toca para lanzar', {
+ size: 60,
+ fill: 0x333333
+});
+statusText.anchor.set(0.5, 0.5);
+statusText.x = centerX;
+statusText.y = centerY - 400; // Position above dice grid
+game.addChild(statusText);
+// Create countdown text
+var countdownText = new Text2('', {
+ size: 50,
+ fill: 0x666666
+});
+countdownText.anchor.set(0.5, 0.5);
+countdownText.x = centerX;
+countdownText.y = centerY - 340; // Position below status text
+game.addChild(countdownText);
// Function to count matching dice
function countMatchingDice() {
var counts = {};
// Count occurrences of each dice value
@@ -188,8 +207,26 @@
diceArray.push(dice);
}
// Game update method to handle dice rolling
game.update = function () {
+ // Update status and countdown text based on current state
+ var currentTime = Date.now();
+ var timeSinceLastRoll = currentTime - lastRollFinishTime;
+ var timeRemaining = minimumWaitTime - timeSinceLastRoll;
+ if (lanzamiento) {
+ // Currently rolling
+ statusText.setText('Cambiando dados...');
+ countdownText.setText('');
+ } else if (timeRemaining > 0) {
+ // Waiting period - show countdown
+ statusText.setText('Espera para lanzar');
+ var secondsRemaining = timeRemaining / 1000;
+ countdownText.setText(secondsRemaining.toFixed(2) + 's');
+ } else {
+ // Ready to roll
+ statusText.setText('Toca para lanzar');
+ countdownText.setText('');
+ }
// Check if all dice have finished rolling
if (lanzamiento) {
var allFinished = true;
for (var i = 0; i < diceArray.length; i++) {