User prompt
que los cartones se pasen un poco más abajo
User prompt
Que el juego sea dos tantos más rápido.
User prompt
Disminuye el porcentaje de opciones de llenar el cartón.
User prompt
Permíteme ver los cartones más tiempo cuando termine el juego.
User prompt
Que la pantalla de victoria se pase a la parte superior de la pantalla.
User prompt
Permíteme ver los cartones dos tantos más de tiempo antes de terminar el juego.
User prompt
Elimina la pantalla de victoria.
User prompt
Permítame ver los cartones un poco más de tiempo cuando termine el juego.
User prompt
Que las burbujas se acomoden en tres filas.
User prompt
Que las burbujas se acomoden fijas en línea recta. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Que el juego sea dos tantos más rápido. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Que el botón de inicio se pase a la parte inferior de la pantalla.
User prompt
que los cartones sean un tanto más grandes ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
que los cartones sean un tanto más grandes. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
que los cartones queden centrados en la pantalla
User prompt
que las burbujas se acomoden en tres filas horizontales ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Que el juego sea dos veces más rápido.
User prompt
Que las burbujas se queden y se acomoden en la parte superior de la pantalla. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'Timeout.tick error: Cannot set properties of undefined (setting 'fill')' in or related to this line: 'self.numberText.style.fill = "#ffffff";' Line Number: 89
User prompt
Que los cartones se llenen automáticamente.
User prompt
Que los números salgan uno tras otro en burbujas de color rojo. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
dame opción de inicio de juego
User prompt
que el juego tenga 90 números
User prompt
Que la columna horizontal sea la que tenga los cinco números.
User prompt
Crea un botón de inicio de juego
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var BingoCard = Container.expand(function (cardIndex) { var self = Container.call(this); self.cardIndex = cardIndex; self.numbers = []; self.bingoNumbers = []; self.cardBg = self.attachAsset('bingoCard', { anchorX: 0.5, anchorY: 0.5 }); // Generate 15 random unique numbers between 1-75 self.generateNumbers = function () { var availableNumbers = []; for (var i = 1; i <= 75; i++) { availableNumbers.push(i); } for (var j = 0; j < 15; j++) { var randomIndex = Math.floor(Math.random() * availableNumbers.length); self.numbers.push(availableNumbers[randomIndex]); availableNumbers.splice(randomIndex, 1); } }; self.createNumberGrid = function () { var startX = -150; var startY = -100; var spacingX = 75; var spacingY = 50; for (var row = 0; row < 5; row++) { self.bingoNumbers[row] = []; for (var col = 0; col < 3; col++) { var numberIndex = row * 3 + col; var bingoNumber = new BingoNumber(self.numbers[numberIndex], self.cardIndex, row, col); bingoNumber.x = startX + col * spacingX; bingoNumber.y = startY + row * spacingY; self.addChild(bingoNumber); self.bingoNumbers[row][col] = bingoNumber; } } }; self.generateNumbers(); self.createNumberGrid(); return self; }); var BingoNumber = Container.expand(function (number, cardIndex, row, col) { var self = Container.call(this); self.number = number; self.cardIndex = cardIndex; self.row = row; self.col = col; self.isMarked = false; self.bg = self.attachAsset('bingoNumber', { anchorX: 0.5, anchorY: 0.5 }); self.numberText = new Text2(number.toString(), { size: 24, fill: 0x000000 }); self.numberText.anchor.set(0.5, 0.5); self.addChild(self.numberText); self.markNumber = function () { if (!self.isMarked) { self.isMarked = true; self.removeChild(self.bg); self.bg = self.attachAsset('markedNumber', { anchorX: 0.5, anchorY: 0.5 }); self.numberText.style.fill = "#ffffff"; LK.getSound('numberMarked').play(); // Check for completed lines checkForCompletedLines(self.cardIndex); } }; self.down = function (x, y, obj) { if (currentCalledNumber === self.number && !self.isMarked) { self.markNumber(); LK.setScore(LK.getScore() + 10); scoreText.setText(LK.getScore()); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ var bingoCards = []; var currentCalledNumber = null; var calledNumbers = []; var availableNumbers = []; var callTimer = null; var completedLines = 0; var gameStarted = false; var startButton = null; // Initialize available numbers for (var i = 1; i <= 75; i++) { availableNumbers.push(i); } // Create score display var scoreText = new Text2('0', { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); scoreText.y = 50; // Create current called number display var calledNumberContainer = new Container(); var calledNumberBg = LK.getAsset('calledNumberBg', { anchorX: 0.5, anchorY: 0.5 }); calledNumberContainer.addChild(calledNumberBg); var calledNumberText = new Text2('--', { size: 36, fill: 0xFFFFFF }); calledNumberText.anchor.set(0.5, 0.5); calledNumberContainer.addChild(calledNumberText); game.addChild(calledNumberContainer); calledNumberContainer.x = 1024; calledNumberContainer.y = 150; // Create info text var infoText = new Text2('Tap called numbers on your cards!', { size: 30, fill: 0xFFFFFF }); infoText.anchor.set(0.5, 0.5); game.addChild(infoText); infoText.x = 1024; infoText.y = 250; // Create start button startButton = new Container(); var startButtonBg = LK.getAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); startButton.addChild(startButtonBg); var startButtonText = new Text2('START GAME', { size: 32, fill: 0xFFFFFF }); startButtonText.anchor.set(0.5, 0.5); startButton.addChild(startButtonText); startButton.x = 1024; startButton.y = 1366; game.addChild(startButton); // Start button click handler startButton.down = function (x, y, obj) { if (!gameStarted) { gameStarted = true; startButton.visible = false; // Show game elements calledNumberContainer.visible = true; infoText.visible = true; for (var i = 0; i < bingoCards.length; i++) { bingoCards[i].visible = true; } // Start calling numbers LK.setTimeout(callNextNumber, 1000); } }; // Hide game elements initially calledNumberContainer.visible = false; infoText.visible = false; // Create bingo cards (hidden initially) for (var c = 0; c < 4; c++) { var card = new BingoCard(c); var row = Math.floor(c / 2); var col = c % 2; card.x = 512 + col * 500; card.y = 600 + row * 350; card.visible = false; game.addChild(card); bingoCards.push(card); } function callNextNumber() { if (availableNumbers.length > 0) { var randomIndex = Math.floor(Math.random() * availableNumbers.length); currentCalledNumber = availableNumbers[randomIndex]; availableNumbers.splice(randomIndex, 1); calledNumbers.push(currentCalledNumber); calledNumberText.setText(currentCalledNumber.toString()); LK.getSound('numberCalled').play(); // Flash the called number tween(calledNumberBg, { tint: 0xffff00 }, { duration: 200 }); tween(calledNumberBg, { tint: 0xffffff }, { duration: 200 }); // Schedule next number call var delay = Math.max(2000 - completedLines * 100, 1000); callTimer = LK.setTimeout(callNextNumber, delay); } } function checkForCompletedLines(cardIndex) { var card = bingoCards[cardIndex]; var newLinesCompleted = 0; // Check horizontal lines for (var row = 0; row < 5; row++) { var lineComplete = true; for (var col = 0; col < 3; col++) { if (!card.bingoNumbers[row][col].isMarked) { lineComplete = false; break; } } if (lineComplete) { newLinesCompleted++; } } // Check vertical lines for (var col = 0; col < 3; col++) { var lineComplete = true; for (var row = 0; row < 5; row++) { if (!card.bingoNumbers[row][col].isMarked) { lineComplete = false; break; } } if (lineComplete) { newLinesCompleted++; } } // Check diagonal lines (only possible with 3x5 grid in limited ways) // Left diagonal (top-left to bottom-right, middle column) if (card.bingoNumbers[0][0].isMarked && card.bingoNumbers[1][1].isMarked && card.bingoNumbers[2][2].isMarked && card.bingoNumbers[3][1].isMarked && card.bingoNumbers[4][0].isMarked) { newLinesCompleted++; } // Right diagonal (top-right to bottom-left) if (card.bingoNumbers[0][2].isMarked && card.bingoNumbers[1][1].isMarked && card.bingoNumbers[2][0].isMarked && card.bingoNumbers[3][1].isMarked && card.bingoNumbers[4][2].isMarked) { newLinesCompleted++; } if (newLinesCompleted > 0) { completedLines += newLinesCompleted; LK.getSound('lineComplete').play(); LK.setScore(LK.getScore() + newLinesCompleted * 100); scoreText.setText(LK.getScore()); // Flash the card tween(card.cardBg, { tint: 0x00ff00 }, { duration: 300 }); tween(card.cardBg, { tint: 0xffffff }, { duration: 300 }); // Check for full card completion var allMarked = true; for (var r = 0; r < 5; r++) { for (var c = 0; c < 3; c++) { if (!card.bingoNumbers[r][c].isMarked) { allMarked = false; break; } } if (!allMarked) break; } if (allMarked) { LK.setScore(LK.getScore() + 500); scoreText.setText(LK.getScore()); // Check win condition - 3 completed lines or 1 full card if (completedLines >= 3) { LK.clearTimeout(callTimer); LK.showYouWin(); } } } } game.update = function () { if (gameStarted) { // Update score display scoreText.setText(LK.getScore()); // Check if all numbers have been called if (availableNumbers.length === 0 && calledNumbers.length === 75) { LK.clearTimeout(callTimer); if (completedLines >= 1) { LK.showYouWin(); } else { LK.showGameOver(); } } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var BingoCard = Container.expand(function (cardIndex) {
var self = Container.call(this);
self.cardIndex = cardIndex;
self.numbers = [];
self.bingoNumbers = [];
self.cardBg = self.attachAsset('bingoCard', {
anchorX: 0.5,
anchorY: 0.5
});
// Generate 15 random unique numbers between 1-75
self.generateNumbers = function () {
var availableNumbers = [];
for (var i = 1; i <= 75; i++) {
availableNumbers.push(i);
}
for (var j = 0; j < 15; j++) {
var randomIndex = Math.floor(Math.random() * availableNumbers.length);
self.numbers.push(availableNumbers[randomIndex]);
availableNumbers.splice(randomIndex, 1);
}
};
self.createNumberGrid = function () {
var startX = -150;
var startY = -100;
var spacingX = 75;
var spacingY = 50;
for (var row = 0; row < 5; row++) {
self.bingoNumbers[row] = [];
for (var col = 0; col < 3; col++) {
var numberIndex = row * 3 + col;
var bingoNumber = new BingoNumber(self.numbers[numberIndex], self.cardIndex, row, col);
bingoNumber.x = startX + col * spacingX;
bingoNumber.y = startY + row * spacingY;
self.addChild(bingoNumber);
self.bingoNumbers[row][col] = bingoNumber;
}
}
};
self.generateNumbers();
self.createNumberGrid();
return self;
});
var BingoNumber = Container.expand(function (number, cardIndex, row, col) {
var self = Container.call(this);
self.number = number;
self.cardIndex = cardIndex;
self.row = row;
self.col = col;
self.isMarked = false;
self.bg = self.attachAsset('bingoNumber', {
anchorX: 0.5,
anchorY: 0.5
});
self.numberText = new Text2(number.toString(), {
size: 24,
fill: 0x000000
});
self.numberText.anchor.set(0.5, 0.5);
self.addChild(self.numberText);
self.markNumber = function () {
if (!self.isMarked) {
self.isMarked = true;
self.removeChild(self.bg);
self.bg = self.attachAsset('markedNumber', {
anchorX: 0.5,
anchorY: 0.5
});
self.numberText.style.fill = "#ffffff";
LK.getSound('numberMarked').play();
// Check for completed lines
checkForCompletedLines(self.cardIndex);
}
};
self.down = function (x, y, obj) {
if (currentCalledNumber === self.number && !self.isMarked) {
self.markNumber();
LK.setScore(LK.getScore() + 10);
scoreText.setText(LK.getScore());
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
var bingoCards = [];
var currentCalledNumber = null;
var calledNumbers = [];
var availableNumbers = [];
var callTimer = null;
var completedLines = 0;
var gameStarted = false;
var startButton = null;
// Initialize available numbers
for (var i = 1; i <= 75; i++) {
availableNumbers.push(i);
}
// Create score display
var scoreText = new Text2('0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
scoreText.y = 50;
// Create current called number display
var calledNumberContainer = new Container();
var calledNumberBg = LK.getAsset('calledNumberBg', {
anchorX: 0.5,
anchorY: 0.5
});
calledNumberContainer.addChild(calledNumberBg);
var calledNumberText = new Text2('--', {
size: 36,
fill: 0xFFFFFF
});
calledNumberText.anchor.set(0.5, 0.5);
calledNumberContainer.addChild(calledNumberText);
game.addChild(calledNumberContainer);
calledNumberContainer.x = 1024;
calledNumberContainer.y = 150;
// Create info text
var infoText = new Text2('Tap called numbers on your cards!', {
size: 30,
fill: 0xFFFFFF
});
infoText.anchor.set(0.5, 0.5);
game.addChild(infoText);
infoText.x = 1024;
infoText.y = 250;
// Create start button
startButton = new Container();
var startButtonBg = LK.getAsset('startButton', {
anchorX: 0.5,
anchorY: 0.5
});
startButton.addChild(startButtonBg);
var startButtonText = new Text2('START GAME', {
size: 32,
fill: 0xFFFFFF
});
startButtonText.anchor.set(0.5, 0.5);
startButton.addChild(startButtonText);
startButton.x = 1024;
startButton.y = 1366;
game.addChild(startButton);
// Start button click handler
startButton.down = function (x, y, obj) {
if (!gameStarted) {
gameStarted = true;
startButton.visible = false;
// Show game elements
calledNumberContainer.visible = true;
infoText.visible = true;
for (var i = 0; i < bingoCards.length; i++) {
bingoCards[i].visible = true;
}
// Start calling numbers
LK.setTimeout(callNextNumber, 1000);
}
};
// Hide game elements initially
calledNumberContainer.visible = false;
infoText.visible = false;
// Create bingo cards (hidden initially)
for (var c = 0; c < 4; c++) {
var card = new BingoCard(c);
var row = Math.floor(c / 2);
var col = c % 2;
card.x = 512 + col * 500;
card.y = 600 + row * 350;
card.visible = false;
game.addChild(card);
bingoCards.push(card);
}
function callNextNumber() {
if (availableNumbers.length > 0) {
var randomIndex = Math.floor(Math.random() * availableNumbers.length);
currentCalledNumber = availableNumbers[randomIndex];
availableNumbers.splice(randomIndex, 1);
calledNumbers.push(currentCalledNumber);
calledNumberText.setText(currentCalledNumber.toString());
LK.getSound('numberCalled').play();
// Flash the called number
tween(calledNumberBg, {
tint: 0xffff00
}, {
duration: 200
});
tween(calledNumberBg, {
tint: 0xffffff
}, {
duration: 200
});
// Schedule next number call
var delay = Math.max(2000 - completedLines * 100, 1000);
callTimer = LK.setTimeout(callNextNumber, delay);
}
}
function checkForCompletedLines(cardIndex) {
var card = bingoCards[cardIndex];
var newLinesCompleted = 0;
// Check horizontal lines
for (var row = 0; row < 5; row++) {
var lineComplete = true;
for (var col = 0; col < 3; col++) {
if (!card.bingoNumbers[row][col].isMarked) {
lineComplete = false;
break;
}
}
if (lineComplete) {
newLinesCompleted++;
}
}
// Check vertical lines
for (var col = 0; col < 3; col++) {
var lineComplete = true;
for (var row = 0; row < 5; row++) {
if (!card.bingoNumbers[row][col].isMarked) {
lineComplete = false;
break;
}
}
if (lineComplete) {
newLinesCompleted++;
}
}
// Check diagonal lines (only possible with 3x5 grid in limited ways)
// Left diagonal (top-left to bottom-right, middle column)
if (card.bingoNumbers[0][0].isMarked && card.bingoNumbers[1][1].isMarked && card.bingoNumbers[2][2].isMarked && card.bingoNumbers[3][1].isMarked && card.bingoNumbers[4][0].isMarked) {
newLinesCompleted++;
}
// Right diagonal (top-right to bottom-left)
if (card.bingoNumbers[0][2].isMarked && card.bingoNumbers[1][1].isMarked && card.bingoNumbers[2][0].isMarked && card.bingoNumbers[3][1].isMarked && card.bingoNumbers[4][2].isMarked) {
newLinesCompleted++;
}
if (newLinesCompleted > 0) {
completedLines += newLinesCompleted;
LK.getSound('lineComplete').play();
LK.setScore(LK.getScore() + newLinesCompleted * 100);
scoreText.setText(LK.getScore());
// Flash the card
tween(card.cardBg, {
tint: 0x00ff00
}, {
duration: 300
});
tween(card.cardBg, {
tint: 0xffffff
}, {
duration: 300
});
// Check for full card completion
var allMarked = true;
for (var r = 0; r < 5; r++) {
for (var c = 0; c < 3; c++) {
if (!card.bingoNumbers[r][c].isMarked) {
allMarked = false;
break;
}
}
if (!allMarked) break;
}
if (allMarked) {
LK.setScore(LK.getScore() + 500);
scoreText.setText(LK.getScore());
// Check win condition - 3 completed lines or 1 full card
if (completedLines >= 3) {
LK.clearTimeout(callTimer);
LK.showYouWin();
}
}
}
}
game.update = function () {
if (gameStarted) {
// Update score display
scoreText.setText(LK.getScore());
// Check if all numbers have been called
if (availableNumbers.length === 0 && calledNumbers.length === 75) {
LK.clearTimeout(callTimer);
if (completedLines >= 1) {
LK.showYouWin();
} else {
LK.showGameOver();
}
}
}
};