/**** * 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; // 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 bingo cards 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; 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(); } } } } // Start the game LK.setTimeout(callNextNumber, 2000); game.update = function () { // 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(); } } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,269 @@
-/****
+/****
+* 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: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a2e
+});
+
+/****
+* Game Code
+****/
+var bingoCards = [];
+var currentCalledNumber = null;
+var calledNumbers = [];
+var availableNumbers = [];
+var callTimer = null;
+var completedLines = 0;
+// 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 bingo cards
+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;
+ 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();
+ }
+ }
+ }
+}
+// Start the game
+LK.setTimeout(callNextNumber, 2000);
+game.update = function () {
+ // 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();
+ }
+ }
+};
\ No newline at end of file