User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'trim')' in or related to this line: 'if (roomName !== 'Enter room name...' && roomName.trim() !== '') {' Line Number: 291
User prompt
yes it's good but add main menu create room join add settings and languages and develop more more mini games
User prompt
yes it's good but add main menu create room join add settings and languages and develop more more mini games
Code edit (1 edits merged)
Please save this source code
User prompt
Chat Party Games
Initial prompt
place to chat but basic games can be played
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { username: "Player", color: "#3498db", rooms: [] }); /**** * Classes ****/ var Avatar = Container.expand(function () { var self = Container.call(this); var avatarGraphic = self.attachAsset('avatar', { anchorX: 0.5, anchorY: 0.5 }); self.nameText = new Text2('Player', { size: 24, fill: 0xFFFFFF }); self.nameText.anchor.set(0.5, 0); self.nameText.y = 80; self.addChild(self.nameText); self.setName = function (name) { self.nameText.setText(name); }; self.setColor = function (color) { avatarGraphic.tint = parseInt(color.replace('#', '0x')); }; self.down = function (x, y, obj) { LK.getSound('select').play(); }; return self; }); var Button = Container.expand(function (text, width, height, color) { var self = Container.call(this); var buttonWidth = width || 180; var buttonHeight = height || 60; var buttonColor = color || 'gameButton'; var buttonGraphic = self.attachAsset(buttonColor, { anchorX: 0.5, anchorY: 0.5, width: buttonWidth, height: buttonHeight }); self.label = new Text2(text, { size: 28, fill: 0xFFFFFF }); self.label.anchor.set(0.5, 0.5); self.addChild(self.label); self.setLabel = function (newText) { self.label.setText(newText); }; self.down = function (x, y, obj) { tween(buttonGraphic, { scaleX: 0.95, scaleY: 0.95 }, { duration: 100 }); LK.getSound('select').play(); }; self.up = function (x, y, obj) { tween(buttonGraphic, { scaleX: 1, scaleY: 1 }, { duration: 100 }); }; return self; }); var ChatBubble = Container.expand(function (message, isUser) { var self = Container.call(this); var bubbleGraphic = self.attachAsset('chatBubble', { anchorX: 0, anchorY: 0 }); if (isUser) { bubbleGraphic.tint = 0xDCF8C6; // Light green for user messages } self.messageText = new Text2(message, { size: 24, fill: 0x333333 }); self.messageText.x = 20; self.messageText.y = 15; self.addChild(self.messageText); // Adjust height based on content var textHeight = self.messageText.height + 30; var bubbleHeight = Math.max(textHeight, 60); bubbleGraphic.height = bubbleHeight; return self; }); var ChatPanel = Container.expand(function () { var self = Container.call(this); var panelGraphic = self.attachAsset('chatPanel', { anchorX: 0, anchorY: 0 }); self.messages = []; self.messageContainer = new Container(); self.addChild(self.messageContainer); self.messageContainer.x = 50; self.messageContainer.y = 20; self.inputField = self.addChild(LK.getAsset('inputField', { anchorX: 0, anchorY: 0 })); self.inputField.x = 50; self.inputField.y = panelGraphic.height - 80; self.inputText = new Text2('Type a message...', { size: 24, fill: 0x888888 }); self.inputText.x = self.inputField.x + 20; self.inputText.y = self.inputField.y + 18; self.addChild(self.inputText); var sendButton = new Button('Send', 80, 60, 'sendButton'); sendButton.x = self.inputField.x + self.inputField.width + 40; sendButton.y = self.inputField.y + 30; self.addChild(sendButton); self.addMessage = function (message, isUser) { var bubble = new ChatBubble(message, isUser); if (self.messages.length > 0) { var lastMessage = self.messages[self.messages.length - 1]; bubble.y = lastMessage.y + lastMessage.height + 10; } self.messages.push(bubble); self.messageContainer.addChild(bubble); // Limit messages and scroll if needed if (self.messages.length > 8) { var oldMessage = self.messages.shift(); self.messageContainer.removeChild(oldMessage); // Adjust positions for (var i = 0; i < self.messages.length; i++) { if (i === 0) { self.messages[i].y = 0; } else { self.messages[i].y = self.messages[i - 1].y + self.messages[i - 1].height + 10; } } } LK.getSound('message').play(); }; self.clearMessages = function () { for (var i = 0; i < self.messages.length; i++) { self.messageContainer.removeChild(self.messages[i]); } self.messages = []; }; self.sendMessage = function () { if (self.inputText.text !== 'Type a message...' && self.inputText.text.trim() !== '') { var message = self.inputText.text; self.addMessage(message, true); self.inputText.setText('Type a message...'); // Simulate response after delay LK.setTimeout(function () { var responses = ["That's interesting!", "I see what you mean.", "Let's play a game instead?", "Cool! Want to try tic-tac-toe?", "I agree completely."]; var randomResponse = responses[Math.floor(Math.random() * responses.length)]; self.addMessage(randomResponse, false); }, 1000 + Math.random() * 1000); return message; } return null; }; // Input field interaction self.inputField.down = function () { if (self.inputText.text === 'Type a message...') { self.inputText.setText(''); self.inputText.style.fill = "#333333"; } }; sendButton.down = function () { sendButton.up(); self.sendMessage(); }; return self; }); var LanguageMenu = Container.expand(function () { var self = Container.call(this); // Background for language menu var langBg = self.attachAsset('chatPanel', { anchorX: 0.5, anchorY: 0.5, width: 600, height: 800 }); // Title var title = new Text2('Language Settings', { size: 50, fill: 0x2C3E50 }); title.anchor.set(0.5, 0); title.y = -350; self.addChild(title); // Language options var languages = [{ code: 'en', name: 'English' }, { code: 'es', name: 'Español' }, { code: 'fr', name: 'Français' }, { code: 'de', name: 'Deutsch' }, { code: 'zh', name: '中文' }, { code: 'ja', name: '日本語' }]; var langButtons = []; for (var i = 0; i < languages.length; i++) { var langButton = new Button(languages[i].name, 400, 80); langButton.y = -250 + i * 100; langButton.langCode = languages[i].code; langButton.down = function () { var btn = this; btn.up(); if (typeof self.onLanguageSelect === 'function') { self.onLanguageSelect(btn.langCode); } }; langButtons.push(langButton); self.addChild(langButton); } var backButton = new Button('Back', 200, 80); backButton.y = 350; self.addChild(backButton); backButton.down = function () { backButton.up(); if (typeof self.onBack === 'function') { self.onBack(); } }; self.setActiveLanguage = function (langCode) { for (var i = 0; i < langButtons.length; i++) { if (langButtons[i].langCode === langCode) { langButtons[i].label.style.fill = "#27ae60"; // Green for selected } else { langButtons[i].label.style.fill = "#FFFFFF"; // White for unselected } } }; return self; }); var MainMenu = Container.expand(function () { var self = Container.call(this); // Background for menu var menuBg = self.attachAsset('chatPanel', { anchorX: 0.5, anchorY: 0.5, width: 600, height: 800 }); // Title var menuTitle = new Text2('Main Menu', { size: 50, fill: 0x2C3E50 }); menuTitle.anchor.set(0.5, 0); menuTitle.y = -350; self.addChild(menuTitle); // Create buttons var playButton = new Button('Play', 400, 80); playButton.y = -200; self.addChild(playButton); var createRoomButton = new Button('Create Room', 400, 80); createRoomButton.y = -100; self.addChild(createRoomButton); var joinRoomButton = new Button('Join Room', 400, 80); joinRoomButton.y = 0; self.addChild(joinRoomButton); var settingsButton = new Button('Settings', 400, 80); settingsButton.y = 100; self.addChild(settingsButton); var langButton = new Button('Language', 400, 80); langButton.y = 200; self.addChild(langButton); // Event handlers (to be set from outside) playButton.down = function () { playButton.up(); if (typeof self.onPlay === 'function') { self.onPlay(); } }; createRoomButton.down = function () { createRoomButton.up(); if (typeof self.onCreateRoom === 'function') { self.onCreateRoom(); } }; joinRoomButton.down = function () { joinRoomButton.up(); if (typeof self.onJoinRoom === 'function') { self.onJoinRoom(); } }; settingsButton.down = function () { settingsButton.up(); if (typeof self.onSettings === 'function') { self.onSettings(); } }; langButton.down = function () { langButton.up(); if (typeof self.onLanguage === 'function') { self.onLanguage(); } }; return self; }); var RockPaperScissorsGame = Container.expand(function () { var self = Container.call(this); var choices = ['rock', 'paper', 'scissors']; self.playerChoice = null; self.computerChoice = null; self.gameActive = true; // Create game board background var boardGraphic = self.attachAsset('tictactoeBoard', { anchorX: 0.5, anchorY: 0.5, width: 500, height: 400 }); // Status text self.statusText = new Text2("Choose rock, paper, or scissors", { size: 32, fill: 0x333333 }); self.statusText.anchor.set(0.5, 0); self.statusText.y = -150; self.addChild(self.statusText); // Create choice buttons var buttonContainer = new Container(); buttonContainer.y = 0; self.addChild(buttonContainer); var rockButton = new Button('Rock', 150, 60); rockButton.x = -200; buttonContainer.addChild(rockButton); var paperButton = new Button('Paper', 150, 60); paperButton.x = 0; buttonContainer.addChild(paperButton); var scissorsButton = new Button('Scissors', 150, 60); scissorsButton.x = 200; buttonContainer.addChild(scissorsButton); // Results display self.playerDisplay = new Text2("Your choice: ", { size: 28, fill: 0x333333 }); self.playerDisplay.anchor.set(0, 0); self.playerDisplay.x = -200; self.playerDisplay.y = 100; self.addChild(self.playerDisplay); self.computerDisplay = new Text2("Computer: ", { size: 28, fill: 0x333333 }); self.computerDisplay.anchor.set(0, 0); self.computerDisplay.x = -200; self.computerDisplay.y = 140; self.addChild(self.computerDisplay); self.resultDisplay = new Text2("", { size: 36, fill: 0x333333 }); self.resultDisplay.anchor.set(0.5, 0); self.resultDisplay.y = 200; self.addChild(self.resultDisplay); // Button handlers rockButton.down = function () { rockButton.up(); if (self.gameActive) self.makeChoice('rock'); }; paperButton.down = function () { paperButton.up(); if (self.gameActive) self.makeChoice('paper'); }; scissorsButton.down = function () { scissorsButton.up(); if (self.gameActive) self.makeChoice('scissors'); }; // Game logic self.makeChoice = function (choice) { if (!self.gameActive) return; self.playerChoice = choice; self.playerDisplay.setText("Your choice: " + choice); // Computer makes random choice self.computerChoice = choices[Math.floor(Math.random() * choices.length)]; self.computerDisplay.setText("Computer: " + self.computerChoice); LK.getSound('select').play(); // Determine winner var result = self.determineWinner(); if (result === 'win') { self.resultDisplay.setText("You win!"); self.resultDisplay.style.fill = "#27ae60"; } else if (result === 'lose') { self.resultDisplay.setText("You lose!"); self.resultDisplay.style.fill = "#e74c3c"; } else { self.resultDisplay.setText("It's a tie!"); self.resultDisplay.style.fill = "#f39c12"; } self.gameActive = false; // Reset after delay LK.setTimeout(function () { if (typeof self.onGameOver === 'function') { self.onGameOver(result); } }, 2000); }; self.determineWinner = function () { if (self.playerChoice === self.computerChoice) { return 'tie'; } if (self.playerChoice === 'rock' && self.computerChoice === 'scissors' || self.playerChoice === 'paper' && self.computerChoice === 'rock' || self.playerChoice === 'scissors' && self.computerChoice === 'paper') { return 'win'; } return 'lose'; }; self.reset = function () { self.playerChoice = null; self.computerChoice = null; self.gameActive = true; self.playerDisplay.setText("Your choice: "); self.computerDisplay.setText("Computer: "); self.resultDisplay.setText(""); self.statusText.setText("Choose rock, paper, or scissors"); }; return self; }); var RoomListItem = Container.expand(function (roomName, playerCount) { var self = Container.call(this); var itemGraphic = self.attachAsset('roomListItem', { anchorX: 0, anchorY: 0 }); self.roomNameText = new Text2(roomName, { size: 28, fill: 0x333333 }); self.roomNameText.x = 20; self.roomNameText.y = 15; self.addChild(self.roomNameText); self.playerCountText = new Text2(playerCount + " players", { size: 20, fill: 0x888888 }); self.playerCountText.x = 20; self.playerCountText.y = 50; self.addChild(self.playerCountText); var joinButton = new Button('Join', 120, 50, 'joinButton'); joinButton.x = itemGraphic.width - 80; joinButton.y = itemGraphic.height / 2; self.addChild(joinButton); self.down = function () { tween(itemGraphic, { tint: 0xf0f0f0 }, { duration: 100 }); }; self.up = function () { tween(itemGraphic, { tint: 0xffffff }, { duration: 100 }); }; joinButton.down = function () { joinButton.up(); if (typeof self.onJoin === 'function') { self.onJoin(roomName); } }; return self; }); var SettingsMenu = Container.expand(function () { var self = Container.call(this); // Background for settings var settingsBg = self.attachAsset('chatPanel', { anchorX: 0.5, anchorY: 0.5, width: 600, height: 800 }); // Title var title = new Text2('Settings', { size: 50, fill: 0x2C3E50 }); title.anchor.set(0.5, 0); title.y = -350; self.addChild(title); // Settings options var userNameTitle = new Text2('Change Username:', { size: 30, fill: 0x333333 }); userNameTitle.anchor.set(0, 0); userNameTitle.x = -250; userNameTitle.y = -250; self.addChild(userNameTitle); var userNameInput = self.addChild(LK.getAsset('inputField', { anchorX: 0.5, anchorY: 0.5, width: 500, height: 60, x: 0, y: -200 })); self.userNameText = new Text2(storage.username || 'Player', { size: 28, fill: 0x333333 }); self.userNameText.x = userNameInput.x; self.userNameText.y = userNameInput.y - 10; self.addChild(self.userNameText); var colorTitle = new Text2('Change Avatar Color:', { size: 30, fill: 0x333333 }); colorTitle.anchor.set(0, 0); colorTitle.x = -250; colorTitle.y = -120; self.addChild(colorTitle); // Color options var colors = ['#3498db', '#2ecc71', '#e74c3c', '#f39c12', '#9b59b6', '#1abc9c', '#d35400', '#34495e']; var colorButtons = new Container(); colorButtons.y = -50; self.addChild(colorButtons); for (var i = 0; i < colors.length; i++) { var colorBtn = new Container(); var colorSwatch = colorBtn.addChild(LK.getAsset('avatar', { anchorX: 0.5, anchorY: 0.5, width: 60, height: 60 })); colorSwatch.tint = parseInt(colors[i].replace('#', '0x')); colorBtn.color = colors[i]; colorBtn.x = (i - colors.length / 2 + 0.5) * 70; colorBtn.down = function () { var btn = this; if (typeof self.onColorChange === 'function') { self.onColorChange(btn.color); } }; colorButtons.addChild(colorBtn); } // Volume controls var volumeTitle = new Text2('Sound Volume:', { size: 30, fill: 0x333333 }); volumeTitle.anchor.set(0, 0); volumeTitle.x = -250; volumeTitle.y = 50; self.addChild(volumeTitle); var volumeDownBtn = new Button('-', 60, 60); volumeDownBtn.x = -150; volumeDownBtn.y = 100; self.addChild(volumeDownBtn); self.volumeText = new Text2('100%', { size: 28, fill: 0x333333 }); self.volumeText.anchor.set(0.5, 0.5); self.volumeText.y = 100; self.addChild(self.volumeText); var volumeUpBtn = new Button('+', 60, 60); volumeUpBtn.x = 150; volumeUpBtn.y = 100; self.addChild(volumeUpBtn); var saveButton = new Button('Save Settings', 300, 80); saveButton.y = 200; self.addChild(saveButton); var backButton = new Button('Back', 200, 80); backButton.y = 300; self.addChild(backButton); // Button handlers userNameInput.down = function () { if (typeof self.onChangeName === 'function') { self.onChangeName(); } }; volumeDownBtn.down = function () { volumeDownBtn.up(); if (typeof self.onVolumeDown === 'function') { self.onVolumeDown(); } }; volumeUpBtn.down = function () { volumeUpBtn.up(); if (typeof self.onVolumeUp === 'function') { self.onVolumeUp(); } }; saveButton.down = function () { saveButton.up(); if (typeof self.onSave === 'function') { self.onSave(); } }; backButton.down = function () { backButton.up(); if (typeof self.onBack === 'function') { self.onBack(); } }; return self; }); var TicTacToeGame = Container.expand(function () { var self = Container.call(this); var boardGraphic = self.attachAsset('tictactoeBoard', { anchorX: 0.5, anchorY: 0.5 }); self.cells = []; self.gameBoard = [['', '', ''], ['', '', ''], ['', '', '']]; self.currentPlayer = 'X'; self.gameActive = true; // Create cells for (var row = 0; row < 3; row++) { for (var col = 0; col < 3; col++) { var cell = self.addChild(LK.getAsset('tictactoeCell', { anchorX: 0.5, anchorY: 0.5 })); cell.row = row; cell.col = col; cell.x = (col - 1) * 150; cell.y = (row - 1) * 150; cell.content = ''; cell.down = function () { if (self.gameActive && this.content === '') { self.makeMove(this.row, this.col); } }; self.cells.push(cell); } } self.statusText = new Text2("Player X's turn", { size: 32, fill: 0x333333 }); self.statusText.anchor.set(0.5, 0); self.statusText.y = boardGraphic.height / 2 + 40; self.addChild(self.statusText); self.makeMove = function (row, col) { if (!self.gameActive || self.gameBoard[row][col] !== '') { return; } // Update game board self.gameBoard[row][col] = self.currentPlayer; // Find the cell and update visually for (var i = 0; i < self.cells.length; i++) { var cell = self.cells[i]; if (cell.row === row && cell.col === col) { cell.content = self.currentPlayer; if (self.currentPlayer === 'X') { var x = cell.addChild(LK.getAsset('tictactoeX', { anchorX: 0.5, anchorY: 0.5 })); tween(x, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.bounceOut, onStart: function onStart() { x.scaleX = 0; x.scaleY = 0; } }); } else { var o = cell.addChild(LK.getAsset('tictactoeO', { anchorX: 0.5, anchorY: 0.5 })); tween(o, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.bounceOut, onStart: function onStart() { o.scaleX = 0; o.scaleY = 0; } }); } break; } } LK.getSound('select').play(); // Check for winner var winner = self.checkWinner(); if (winner) { self.gameActive = false; self.statusText.setText('Player ' + winner + ' wins!'); LK.getSound('gameover').play(); LK.setTimeout(function () { if (typeof self.onGameOver === 'function') { self.onGameOver(winner); } }, 2000); } else if (self.checkDraw()) { self.gameActive = false; self.statusText.setText("It's a draw!"); LK.getSound('gameover').play(); LK.setTimeout(function () { if (typeof self.onGameOver === 'function') { self.onGameOver(null); } }, 2000); } else { // Switch player self.currentPlayer = self.currentPlayer === 'X' ? 'O' : 'X'; self.statusText.setText("Player " + self.currentPlayer + "'s turn"); // If current player is O (AI), make an automated move if (self.currentPlayer === 'O') { LK.setTimeout(function () { self.makeAIMove(); }, 1000); } } }; self.checkWinner = function () { var lines = [ // Rows [[0, 0], [0, 1], [0, 2]], [[1, 0], [1, 1], [1, 2]], [[2, 0], [2, 1], [2, 2]], // Columns [[0, 0], [1, 0], [2, 0]], [[0, 1], [1, 1], [2, 1]], [[0, 2], [1, 2], [2, 2]], // Diagonals [[0, 0], [1, 1], [2, 2]], [[0, 2], [1, 1], [2, 0]]]; for (var i = 0; i < lines.length; i++) { var _lines$i = _slicedToArray(lines[i], 3), _lines$i$ = _slicedToArray(_lines$i[0], 2), a = _lines$i$[0], b = _lines$i$[1], _lines$i$2 = _slicedToArray(_lines$i[1], 2), c = _lines$i$2[0], d = _lines$i$2[1], _lines$i$3 = _slicedToArray(_lines$i[2], 2), e = _lines$i$3[0], f = _lines$i$3[1]; if (self.gameBoard[a][b] && self.gameBoard[a][b] === self.gameBoard[c][d] && self.gameBoard[a][b] === self.gameBoard[e][f]) { return self.gameBoard[a][b]; } } return null; }; self.checkDraw = function () { for (var row = 0; row < 3; row++) { for (var col = 0; col < 3; col++) { if (self.gameBoard[row][col] === '') { return false; } } } return true; }; self.makeAIMove = function () { if (!self.gameActive) return; // Find empty cells var emptyCells = []; for (var row = 0; row < 3; row++) { for (var col = 0; col < 3; col++) { if (self.gameBoard[row][col] === '') { emptyCells.push({ row: row, col: col }); } } } if (emptyCells.length > 0) { var randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)]; self.makeMove(randomCell.row, randomCell.col); } }; self.reset = function () { // Clear the board for (var row = 0; row < 3; row++) { for (var col = 0; col < 3; col++) { self.gameBoard[row][col] = ''; } } // Reset cell visuals for (var i = 0; i < self.cells.length; i++) { var cell = self.cells[i]; cell.content = ''; // Remove all children (X or O graphics) while (cell.children.length > 0) { cell.removeChild(cell.children[0]); } } self.currentPlayer = 'X'; self.gameActive = true; self.statusText.setText("Player X's turn"); }; return self; }); var WordGuessingGame = Container.expand(function () { var self = Container.call(this); var words = ["GAME", "PLAY", "FUN", "CHAT", "PARTY", "BOARD", "CARD", "DICE", "TEAM", "WIN"]; var currentWord = ""; var guessedLetters = []; var maxAttempts = 6; var attemptsLeft = maxAttempts; self.gameActive = true; // Create game board background var boardGraphic = self.attachAsset('tictactoeBoard', { anchorX: 0.5, anchorY: 0.5, width: 700, height: 500 }); // Status text self.statusText = new Text2("Word Guessing Game", { size: 36, fill: 0x333333 }); self.statusText.anchor.set(0.5, 0); self.statusText.y = -200; self.addChild(self.statusText); // Word display self.wordDisplay = new Text2("", { size: 48, fill: 0x333333 }); self.wordDisplay.anchor.set(0.5, 0); self.wordDisplay.y = -120; self.addChild(self.wordDisplay); // Attempts display self.attemptsDisplay = new Text2("Attempts left: " + attemptsLeft, { size: 28, fill: 0x333333 }); self.attemptsDisplay.anchor.set(0.5, 0); self.attemptsDisplay.y = -50; self.addChild(self.attemptsDisplay); // Letter buttons var lettersContainer = new Container(); self.addChild(lettersContainer); lettersContainer.y = 50; // Create keyboard var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var buttonSize = 60; var buttonsPerRow = 7; for (var i = 0; i < alphabet.length; i++) { var letter = alphabet[i]; var letterButton = new Button(letter, buttonSize, buttonSize); var row = Math.floor(i / buttonsPerRow); var col = i % buttonsPerRow; letterButton.x = (col - 3) * (buttonSize + 10); letterButton.y = row * (buttonSize + 10); letterButton.letter = letter; letterButton.down = function () { var button = this; button.up(); if (self.gameActive) self.guessLetter(button.letter); }; lettersContainer.addChild(letterButton); } // Result display self.resultDisplay = new Text2("", { size: 36, fill: 0x333333 }); self.resultDisplay.anchor.set(0.5, 0); self.resultDisplay.y = 200; self.addChild(self.resultDisplay); // Game logic self.startNewGame = function () { currentWord = words[Math.floor(Math.random() * words.length)]; guessedLetters = []; attemptsLeft = maxAttempts; self.gameActive = true; self.updateWordDisplay(); self.attemptsDisplay.setText("Attempts left: " + attemptsLeft); self.resultDisplay.setText(""); }; self.updateWordDisplay = function () { var display = ""; for (var i = 0; i < currentWord.length; i++) { if (guessedLetters.includes(currentWord[i])) { display += currentWord[i] + " "; } else { display += "_ "; } } self.wordDisplay.setText(display); }; self.guessLetter = function (letter) { if (!self.gameActive || guessedLetters.includes(letter)) return; guessedLetters.push(letter); LK.getSound('select').play(); // Check if letter is in word if (currentWord.includes(letter)) { self.updateWordDisplay(); // Check if word is complete var isComplete = true; for (var i = 0; i < currentWord.length; i++) { if (!guessedLetters.includes(currentWord[i])) { isComplete = false; break; } } if (isComplete) { self.resultDisplay.setText("You won!"); self.resultDisplay.style.fill = "#27ae60"; self.gameActive = false; LK.setTimeout(function () { if (typeof self.onGameOver === 'function') { self.onGameOver('win'); } }, 2000); } } else { attemptsLeft--; self.attemptsDisplay.setText("Attempts left: " + attemptsLeft); if (attemptsLeft <= 0) { self.resultDisplay.setText("You lost! The word was: " + currentWord); self.resultDisplay.style.fill = "#e74c3c"; self.gameActive = false; LK.setTimeout(function () { if (typeof self.onGameOver === 'function') { self.onGameOver('lose'); } }, 2000); } } }; self.reset = function () { self.startNewGame(); }; // Initialize self.startNewGame(); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xf5f7fa }); /**** * Game Code ****/ // Main app state function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } // App state var currentScreen = 'mainMenu'; // 'mainMenu', 'lobby', 'room', 'game', 'settings', 'language', 'createRoom', 'joinRoom' var username = storage.username || 'Player'; var avatarColor = storage.color || '#3498db'; var currentRoomName = ''; var volumeLevel = 100; var currentLanguage = 'en'; var currentGameType = 'tictactoe'; // 'tictactoe', 'rockpaperscissors', 'wordguessing' // Create UI containers for different screens var mainMenuScreen = new Container(); var lobbyScreen = new Container(); var roomScreen = new Container(); var gameScreen = new Container(); var settingsScreen = new Container(); var languageScreen = new Container(); var createRoomScreen = new Container(); var joinRoomScreen = new Container(); // Create main menu var mainMenu = new MainMenu(); mainMenu.x = 2048 / 2; mainMenu.y = 2732 / 2; mainMenuScreen.addChild(mainMenu); // Create settings menu var settingsMenu = new SettingsMenu(); settingsMenu.x = 2048 / 2; settingsMenu.y = 2732 / 2; settingsScreen.addChild(settingsMenu); // Create language menu var languageMenu = new LanguageMenu(); languageMenu.x = 2048 / 2; languageMenu.y = 2732 / 2; languageScreen.addChild(languageMenu); // Set up lobby screen var lobbyTitle = new Text2('Chat Party Games', { size: 80, fill: 0x2C3E50 }); lobbyTitle.anchor.set(0.5, 0); lobbyTitle.x = 2048 / 2; lobbyTitle.y = 100; lobbyScreen.addChild(lobbyTitle); var usernameText = new Text2('Your Name: ' + username, { size: 32, fill: 0x666666 }); usernameText.anchor.set(0.5, 0); usernameText.x = 2048 / 2; usernameText.y = 250; lobbyScreen.addChild(usernameText); var avatar = new Avatar(); avatar.x = 2048 / 2; avatar.y = 400; avatar.setName(username); avatar.setColor(avatarColor); lobbyScreen.addChild(avatar); var roomListTitle = new Text2('Available Rooms', { size: 40, fill: 0x2C3E50 }); roomListTitle.anchor.set(0.5, 0); roomListTitle.x = 2048 / 2; roomListTitle.y = 600; lobbyScreen.addChild(roomListTitle); // Create sample room list var roomList = new Container(); roomList.x = (2048 - 700) / 2; roomList.y = 680; lobbyScreen.addChild(roomList); var lobbyButtonsContainer = new Container(); lobbyButtonsContainer.x = 2048 / 2; lobbyButtonsContainer.y = 2500; lobbyScreen.addChild(lobbyButtonsContainer); var createRoomButton = new Button('Create Room', 250, 80); createRoomButton.x = -150; createRoomButton.y = 0; lobbyButtonsContainer.addChild(createRoomButton); var backToMenuButton = new Button('Main Menu', 250, 80); backToMenuButton.x = 150; backToMenuButton.y = 0; lobbyButtonsContainer.addChild(backToMenuButton); // Setup room screen var roomTitle = new Text2('Room: Lobby', { size: 40, fill: 0x2C3E50 }); roomTitle.anchor.set(0.5, 0); roomTitle.x = 2048 / 2; roomTitle.y = 50; roomScreen.addChild(roomTitle); var chatPanel = new ChatPanel(); chatPanel.x = (2048 - 800) / 2; chatPanel.y = 120; roomScreen.addChild(chatPanel); var gameButtonsContainer = new Container(); gameButtonsContainer.x = 2048 / 2; gameButtonsContainer.y = 2000; roomScreen.addChild(gameButtonsContainer); var tictactoeButton = new Button('Tic-Tac-Toe', 250, 80); tictactoeButton.x = -280; tictactoeButton.y = 0; gameButtonsContainer.addChild(tictactoeButton); var rpsButton = new Button('Rock-Paper-Scissors', 250, 80); rpsButton.x = 0; rpsButton.y = 0; gameButtonsContainer.addChild(rpsButton); var wordButton = new Button('Word Game', 250, 80); wordButton.x = 280; wordButton.y = 0; gameButtonsContainer.addChild(wordButton); var backToLobbyButton = new Button('Back to Lobby', 250, 80); backToLobbyButton.x = 0; backToLobbyButton.y = 100; gameButtonsContainer.addChild(backToLobbyButton); // Setup game screen var gameTitle = new Text2('Tic-Tac-Toe', { size: 40, fill: 0x2C3E50 }); gameTitle.anchor.set(0.5, 0); gameTitle.x = 2048 / 2; gameTitle.y = 50; gameScreen.addChild(gameTitle); // Create game instances var ticTacToeGame = new TicTacToeGame(); ticTacToeGame.x = 2048 / 2; ticTacToeGame.y = 2732 / 2 - 200; gameScreen.addChild(ticTacToeGame); var rpsGame = new RockPaperScissorsGame(); rpsGame.x = 2048 / 2; rpsGame.y = 2732 / 2 - 200; rpsGame.visible = false; gameScreen.addChild(rpsGame); var wordGame = new WordGuessingGame(); wordGame.x = 2048 / 2; wordGame.y = 2732 / 2 - 200; wordGame.visible = false; gameScreen.addChild(wordGame); var backToRoomButton = new Button('Back to Room', 250, 80); backToRoomButton.x = 2048 / 2; backToRoomButton.y = 2500; gameScreen.addChild(backToRoomButton); // Create Room screen var createRoomTitle = new Text2('Create a New Room', { size: 60, fill: 0x2C3E50 }); createRoomTitle.anchor.set(0.5, 0); createRoomTitle.x = 2048 / 2; createRoomTitle.y = 300; createRoomScreen.addChild(createRoomTitle); var roomNameInput = createRoomScreen.addChild(LK.getAsset('inputField', { anchorX: 0.5, anchorY: 0.5, width: 700, height: 80, x: 2048 / 2, y: 500 })); var roomNameText = new Text2('Room Name', { size: 32, fill: 0x888888 }); roomNameText.x = roomNameInput.x - 340; roomNameText.y = roomNameInput.y - 10; createRoomScreen.addChild(roomNameText); var createButton = new Button('Create', 250, 80); createButton.x = 2048 / 2 - 150; createButton.y = 650; createRoomScreen.addChild(createButton); var cancelCreateButton = new Button('Cancel', 250, 80); cancelCreateButton.x = 2048 / 2 + 150; cancelCreateButton.y = 650; createRoomScreen.addChild(cancelCreateButton); // Add main container to game game.addChild(mainMenuScreen); game.addChild(lobbyScreen); game.addChild(roomScreen); game.addChild(gameScreen); game.addChild(settingsScreen); game.addChild(languageScreen); game.addChild(createRoomScreen); game.addChild(joinRoomScreen); // Initially hide all screens except main menu lobbyScreen.visible = false; roomScreen.visible = false; gameScreen.visible = false; settingsScreen.visible = false; languageScreen.visible = false; createRoomScreen.visible = false; joinRoomScreen.visible = false; // Function to switch between screens function showScreen(screenName) { mainMenuScreen.visible = false; lobbyScreen.visible = false; roomScreen.visible = false; gameScreen.visible = false; settingsScreen.visible = false; languageScreen.visible = false; createRoomScreen.visible = false; joinRoomScreen.visible = false; currentScreen = screenName; if (screenName === 'mainMenu') { mainMenuScreen.visible = true; } else if (screenName === 'lobby') { lobbyScreen.visible = true; populateRoomList(); usernameText.setText('Your Name: ' + username); avatar.setName(username); avatar.setColor(avatarColor); } else if (screenName === 'room') { roomScreen.visible = true; roomTitle.setText('Room: ' + currentRoomName); chatPanel.clearMessages(); chatPanel.addMessage('Welcome to ' + currentRoomName + '!', false); } else if (screenName === 'game') { gameScreen.visible = true; // Set game title and show appropriate game if (currentGameType === 'tictactoe') { gameTitle.setText('Tic-Tac-Toe'); ticTacToeGame.visible = true; rpsGame.visible = false; wordGame.visible = false; ticTacToeGame.reset(); } else if (currentGameType === 'rockpaperscissors') { gameTitle.setText('Rock-Paper-Scissors'); ticTacToeGame.visible = false; rpsGame.visible = true; wordGame.visible = false; rpsGame.reset(); } else if (currentGameType === 'wordguessing') { gameTitle.setText('Word Guessing Game'); ticTacToeGame.visible = false; rpsGame.visible = false; wordGame.visible = true; wordGame.reset(); } } else if (screenName === 'settings') { settingsScreen.visible = true; settingsMenu.userNameText.setText(username); settingsMenu.volumeText.setText(volumeLevel + '%'); } else if (screenName === 'language') { languageScreen.visible = true; languageMenu.setActiveLanguage(currentLanguage); } else if (screenName === 'createRoom') { createRoomScreen.visible = true; } else if (screenName === 'joinRoom') { joinRoomScreen.visible = true; } } // Populate the room list with sample rooms function populateRoomList() { // Clear existing rooms while (roomList.children.length > 0) { roomList.removeChild(roomList.children[0]); } // Sample rooms var rooms = [{ name: 'Game Night', players: 4 }, { name: 'Casual Fun', players: 2 }, { name: 'Board Game Lovers', players: 7 }, { name: 'Quick Games', players: 3 }]; // Add stored rooms if any if (storage.rooms && storage.rooms.length > 0) { for (var i = 0; i < storage.rooms.length; i++) { rooms.push({ name: storage.rooms[i], players: Math.floor(Math.random() * 5) + 1 }); } } for (var i = 0; i < rooms.length; i++) { var roomItem = new RoomListItem(rooms[i].name, rooms[i].players); roomItem.y = i * 100; roomList.addChild(roomItem); roomItem.onJoin = function (roomName) { currentRoomName = roomName; showScreen('room'); }; } } // Main Menu Event Handlers mainMenu.onPlay = function () { showScreen('lobby'); }; mainMenu.onCreateRoom = function () { showScreen('createRoom'); }; mainMenu.onJoinRoom = function () { showScreen('lobby'); }; mainMenu.onSettings = function () { showScreen('settings'); }; mainMenu.onLanguage = function () { showScreen('language'); }; // Settings Event Handlers settingsMenu.onChangeName = function () { var newName = prompt("Enter your new username:", username); if (newName && newName.trim() !== '') { username = newName.trim(); storage.username = username; settingsMenu.userNameText.setText(username); } }; settingsMenu.onColorChange = function (color) { avatarColor = color; storage.color = color; LK.getSound('select').play(); }; settingsMenu.onVolumeDown = function () { volumeLevel = Math.max(0, volumeLevel - 10); settingsMenu.volumeText.setText(volumeLevel + '%'); }; settingsMenu.onVolumeUp = function () { volumeLevel = Math.min(100, volumeLevel + 10); settingsMenu.volumeText.setText(volumeLevel + '%'); }; settingsMenu.onSave = function () { showScreen('mainMenu'); }; settingsMenu.onBack = function () { showScreen('mainMenu'); }; // Language Menu Event Handlers languageMenu.onLanguageSelect = function (langCode) { currentLanguage = langCode; languageMenu.setActiveLanguage(langCode); LK.getSound('select').play(); }; languageMenu.onBack = function () { showScreen('mainMenu'); }; // Create Room Event Handlers createButton.down = function () { createButton.up(); var roomName = roomNameText.text; if (roomName === 'Room Name' || roomName.trim() === '') { // Generate random room name var adjectives = ['Cool', 'Fun', 'Happy', 'Super', 'Amazing']; var nouns = ['Gamers', 'Players', 'Friends', 'Squad', 'Team']; roomName = adjectives[Math.floor(Math.random() * adjectives.length)] + ' ' + nouns[Math.floor(Math.random() * nouns.length)]; } // Store new room if (!storage.rooms) storage.rooms = []; storage.rooms.push(roomName); // Join the new room currentRoomName = roomName; showScreen('room'); }; cancelCreateButton.down = function () { cancelCreateButton.up(); showScreen('lobby'); }; roomNameInput.down = function () { if (roomNameText.text === 'Room Name') { roomNameText.setText(''); roomNameText.style.fill = "#333333"; } }; // Other Event Handlers createRoomButton.down = function () { createRoomButton.up(); showScreen('createRoom'); }; backToMenuButton.down = function () { backToMenuButton.up(); showScreen('mainMenu'); }; tictactoeButton.down = function () { tictactoeButton.up(); currentGameType = 'tictactoe'; showScreen('game'); }; rpsButton.down = function () { rpsButton.up(); currentGameType = 'rockpaperscissors'; showScreen('game'); }; wordButton.down = function () { wordButton.up(); currentGameType = 'wordguessing'; showScreen('game'); }; backToLobbyButton.down = function () { backToLobbyButton.up(); showScreen('lobby'); }; backToRoomButton.down = function () { backToRoomButton.up(); showScreen('room'); }; // Game Over Event Handlers ticTacToeGame.onGameOver = function (winner) { if (winner) { chatPanel.addMessage('You ' + (winner === 'X' ? 'won' : 'lost') + ' the Tic-Tac-Toe game!', false); } else { chatPanel.addMessage('The Tic-Tac-Toe game ended in a draw!', false); } LK.setTimeout(function () { showScreen('room'); }, 1000); }; rpsGame.onGameOver = function (result) { if (result === 'win') { chatPanel.addMessage('You won the Rock-Paper-Scissors game!', false); } else if (result === 'lose') { chatPanel.addMessage('You lost the Rock-Paper-Scissors game!', false); } else { chatPanel.addMessage('The Rock-Paper-Scissors game ended in a tie!', false); } LK.setTimeout(function () { showScreen('room'); }, 1000); }; wordGame.onGameOver = function (result) { if (result === 'win') { chatPanel.addMessage('You won the Word Guessing game!', false); } else { chatPanel.addMessage('You lost the Word Guessing game!', false); } LK.setTimeout(function () { showScreen('room'); }, 1000); }; // Initialize the game LK.playMusic('bgmusic'); // Update loop game.update = function () { // Nothing needed in update loop for this game }; // Initial setup showScreen('mainMenu');
===================================================================
--- original.js
+++ change.js
@@ -180,8 +180,266 @@
self.sendMessage();
};
return self;
});
+var LanguageMenu = Container.expand(function () {
+ var self = Container.call(this);
+ // Background for language menu
+ var langBg = self.attachAsset('chatPanel', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ width: 600,
+ height: 800
+ });
+ // Title
+ var title = new Text2('Language Settings', {
+ size: 50,
+ fill: 0x2C3E50
+ });
+ title.anchor.set(0.5, 0);
+ title.y = -350;
+ self.addChild(title);
+ // Language options
+ var languages = [{
+ code: 'en',
+ name: 'English'
+ }, {
+ code: 'es',
+ name: 'Español'
+ }, {
+ code: 'fr',
+ name: 'Français'
+ }, {
+ code: 'de',
+ name: 'Deutsch'
+ }, {
+ code: 'zh',
+ name: '中文'
+ }, {
+ code: 'ja',
+ name: '日本語'
+ }];
+ var langButtons = [];
+ for (var i = 0; i < languages.length; i++) {
+ var langButton = new Button(languages[i].name, 400, 80);
+ langButton.y = -250 + i * 100;
+ langButton.langCode = languages[i].code;
+ langButton.down = function () {
+ var btn = this;
+ btn.up();
+ if (typeof self.onLanguageSelect === 'function') {
+ self.onLanguageSelect(btn.langCode);
+ }
+ };
+ langButtons.push(langButton);
+ self.addChild(langButton);
+ }
+ var backButton = new Button('Back', 200, 80);
+ backButton.y = 350;
+ self.addChild(backButton);
+ backButton.down = function () {
+ backButton.up();
+ if (typeof self.onBack === 'function') {
+ self.onBack();
+ }
+ };
+ self.setActiveLanguage = function (langCode) {
+ for (var i = 0; i < langButtons.length; i++) {
+ if (langButtons[i].langCode === langCode) {
+ langButtons[i].label.style.fill = "#27ae60"; // Green for selected
+ } else {
+ langButtons[i].label.style.fill = "#FFFFFF"; // White for unselected
+ }
+ }
+ };
+ return self;
+});
+var MainMenu = Container.expand(function () {
+ var self = Container.call(this);
+ // Background for menu
+ var menuBg = self.attachAsset('chatPanel', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ width: 600,
+ height: 800
+ });
+ // Title
+ var menuTitle = new Text2('Main Menu', {
+ size: 50,
+ fill: 0x2C3E50
+ });
+ menuTitle.anchor.set(0.5, 0);
+ menuTitle.y = -350;
+ self.addChild(menuTitle);
+ // Create buttons
+ var playButton = new Button('Play', 400, 80);
+ playButton.y = -200;
+ self.addChild(playButton);
+ var createRoomButton = new Button('Create Room', 400, 80);
+ createRoomButton.y = -100;
+ self.addChild(createRoomButton);
+ var joinRoomButton = new Button('Join Room', 400, 80);
+ joinRoomButton.y = 0;
+ self.addChild(joinRoomButton);
+ var settingsButton = new Button('Settings', 400, 80);
+ settingsButton.y = 100;
+ self.addChild(settingsButton);
+ var langButton = new Button('Language', 400, 80);
+ langButton.y = 200;
+ self.addChild(langButton);
+ // Event handlers (to be set from outside)
+ playButton.down = function () {
+ playButton.up();
+ if (typeof self.onPlay === 'function') {
+ self.onPlay();
+ }
+ };
+ createRoomButton.down = function () {
+ createRoomButton.up();
+ if (typeof self.onCreateRoom === 'function') {
+ self.onCreateRoom();
+ }
+ };
+ joinRoomButton.down = function () {
+ joinRoomButton.up();
+ if (typeof self.onJoinRoom === 'function') {
+ self.onJoinRoom();
+ }
+ };
+ settingsButton.down = function () {
+ settingsButton.up();
+ if (typeof self.onSettings === 'function') {
+ self.onSettings();
+ }
+ };
+ langButton.down = function () {
+ langButton.up();
+ if (typeof self.onLanguage === 'function') {
+ self.onLanguage();
+ }
+ };
+ return self;
+});
+var RockPaperScissorsGame = Container.expand(function () {
+ var self = Container.call(this);
+ var choices = ['rock', 'paper', 'scissors'];
+ self.playerChoice = null;
+ self.computerChoice = null;
+ self.gameActive = true;
+ // Create game board background
+ var boardGraphic = self.attachAsset('tictactoeBoard', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ width: 500,
+ height: 400
+ });
+ // Status text
+ self.statusText = new Text2("Choose rock, paper, or scissors", {
+ size: 32,
+ fill: 0x333333
+ });
+ self.statusText.anchor.set(0.5, 0);
+ self.statusText.y = -150;
+ self.addChild(self.statusText);
+ // Create choice buttons
+ var buttonContainer = new Container();
+ buttonContainer.y = 0;
+ self.addChild(buttonContainer);
+ var rockButton = new Button('Rock', 150, 60);
+ rockButton.x = -200;
+ buttonContainer.addChild(rockButton);
+ var paperButton = new Button('Paper', 150, 60);
+ paperButton.x = 0;
+ buttonContainer.addChild(paperButton);
+ var scissorsButton = new Button('Scissors', 150, 60);
+ scissorsButton.x = 200;
+ buttonContainer.addChild(scissorsButton);
+ // Results display
+ self.playerDisplay = new Text2("Your choice: ", {
+ size: 28,
+ fill: 0x333333
+ });
+ self.playerDisplay.anchor.set(0, 0);
+ self.playerDisplay.x = -200;
+ self.playerDisplay.y = 100;
+ self.addChild(self.playerDisplay);
+ self.computerDisplay = new Text2("Computer: ", {
+ size: 28,
+ fill: 0x333333
+ });
+ self.computerDisplay.anchor.set(0, 0);
+ self.computerDisplay.x = -200;
+ self.computerDisplay.y = 140;
+ self.addChild(self.computerDisplay);
+ self.resultDisplay = new Text2("", {
+ size: 36,
+ fill: 0x333333
+ });
+ self.resultDisplay.anchor.set(0.5, 0);
+ self.resultDisplay.y = 200;
+ self.addChild(self.resultDisplay);
+ // Button handlers
+ rockButton.down = function () {
+ rockButton.up();
+ if (self.gameActive) self.makeChoice('rock');
+ };
+ paperButton.down = function () {
+ paperButton.up();
+ if (self.gameActive) self.makeChoice('paper');
+ };
+ scissorsButton.down = function () {
+ scissorsButton.up();
+ if (self.gameActive) self.makeChoice('scissors');
+ };
+ // Game logic
+ self.makeChoice = function (choice) {
+ if (!self.gameActive) return;
+ self.playerChoice = choice;
+ self.playerDisplay.setText("Your choice: " + choice);
+ // Computer makes random choice
+ self.computerChoice = choices[Math.floor(Math.random() * choices.length)];
+ self.computerDisplay.setText("Computer: " + self.computerChoice);
+ LK.getSound('select').play();
+ // Determine winner
+ var result = self.determineWinner();
+ if (result === 'win') {
+ self.resultDisplay.setText("You win!");
+ self.resultDisplay.style.fill = "#27ae60";
+ } else if (result === 'lose') {
+ self.resultDisplay.setText("You lose!");
+ self.resultDisplay.style.fill = "#e74c3c";
+ } else {
+ self.resultDisplay.setText("It's a tie!");
+ self.resultDisplay.style.fill = "#f39c12";
+ }
+ self.gameActive = false;
+ // Reset after delay
+ LK.setTimeout(function () {
+ if (typeof self.onGameOver === 'function') {
+ self.onGameOver(result);
+ }
+ }, 2000);
+ };
+ self.determineWinner = function () {
+ if (self.playerChoice === self.computerChoice) {
+ return 'tie';
+ }
+ if (self.playerChoice === 'rock' && self.computerChoice === 'scissors' || self.playerChoice === 'paper' && self.computerChoice === 'rock' || self.playerChoice === 'scissors' && self.computerChoice === 'paper') {
+ return 'win';
+ }
+ return 'lose';
+ };
+ self.reset = function () {
+ self.playerChoice = null;
+ self.computerChoice = null;
+ self.gameActive = true;
+ self.playerDisplay.setText("Your choice: ");
+ self.computerDisplay.setText("Computer: ");
+ self.resultDisplay.setText("");
+ self.statusText.setText("Choose rock, paper, or scissors");
+ };
+ return self;
+});
var RoomListItem = Container.expand(function (roomName, playerCount) {
var self = Container.call(this);
var itemGraphic = self.attachAsset('roomListItem', {
anchorX: 0,
@@ -226,8 +484,143 @@
}
};
return self;
});
+var SettingsMenu = Container.expand(function () {
+ var self = Container.call(this);
+ // Background for settings
+ var settingsBg = self.attachAsset('chatPanel', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ width: 600,
+ height: 800
+ });
+ // Title
+ var title = new Text2('Settings', {
+ size: 50,
+ fill: 0x2C3E50
+ });
+ title.anchor.set(0.5, 0);
+ title.y = -350;
+ self.addChild(title);
+ // Settings options
+ var userNameTitle = new Text2('Change Username:', {
+ size: 30,
+ fill: 0x333333
+ });
+ userNameTitle.anchor.set(0, 0);
+ userNameTitle.x = -250;
+ userNameTitle.y = -250;
+ self.addChild(userNameTitle);
+ var userNameInput = self.addChild(LK.getAsset('inputField', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ width: 500,
+ height: 60,
+ x: 0,
+ y: -200
+ }));
+ self.userNameText = new Text2(storage.username || 'Player', {
+ size: 28,
+ fill: 0x333333
+ });
+ self.userNameText.x = userNameInput.x;
+ self.userNameText.y = userNameInput.y - 10;
+ self.addChild(self.userNameText);
+ var colorTitle = new Text2('Change Avatar Color:', {
+ size: 30,
+ fill: 0x333333
+ });
+ colorTitle.anchor.set(0, 0);
+ colorTitle.x = -250;
+ colorTitle.y = -120;
+ self.addChild(colorTitle);
+ // Color options
+ var colors = ['#3498db', '#2ecc71', '#e74c3c', '#f39c12', '#9b59b6', '#1abc9c', '#d35400', '#34495e'];
+ var colorButtons = new Container();
+ colorButtons.y = -50;
+ self.addChild(colorButtons);
+ for (var i = 0; i < colors.length; i++) {
+ var colorBtn = new Container();
+ var colorSwatch = colorBtn.addChild(LK.getAsset('avatar', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ width: 60,
+ height: 60
+ }));
+ colorSwatch.tint = parseInt(colors[i].replace('#', '0x'));
+ colorBtn.color = colors[i];
+ colorBtn.x = (i - colors.length / 2 + 0.5) * 70;
+ colorBtn.down = function () {
+ var btn = this;
+ if (typeof self.onColorChange === 'function') {
+ self.onColorChange(btn.color);
+ }
+ };
+ colorButtons.addChild(colorBtn);
+ }
+ // Volume controls
+ var volumeTitle = new Text2('Sound Volume:', {
+ size: 30,
+ fill: 0x333333
+ });
+ volumeTitle.anchor.set(0, 0);
+ volumeTitle.x = -250;
+ volumeTitle.y = 50;
+ self.addChild(volumeTitle);
+ var volumeDownBtn = new Button('-', 60, 60);
+ volumeDownBtn.x = -150;
+ volumeDownBtn.y = 100;
+ self.addChild(volumeDownBtn);
+ self.volumeText = new Text2('100%', {
+ size: 28,
+ fill: 0x333333
+ });
+ self.volumeText.anchor.set(0.5, 0.5);
+ self.volumeText.y = 100;
+ self.addChild(self.volumeText);
+ var volumeUpBtn = new Button('+', 60, 60);
+ volumeUpBtn.x = 150;
+ volumeUpBtn.y = 100;
+ self.addChild(volumeUpBtn);
+ var saveButton = new Button('Save Settings', 300, 80);
+ saveButton.y = 200;
+ self.addChild(saveButton);
+ var backButton = new Button('Back', 200, 80);
+ backButton.y = 300;
+ self.addChild(backButton);
+ // Button handlers
+ userNameInput.down = function () {
+ if (typeof self.onChangeName === 'function') {
+ self.onChangeName();
+ }
+ };
+ volumeDownBtn.down = function () {
+ volumeDownBtn.up();
+ if (typeof self.onVolumeDown === 'function') {
+ self.onVolumeDown();
+ }
+ };
+ volumeUpBtn.down = function () {
+ volumeUpBtn.up();
+ if (typeof self.onVolumeUp === 'function') {
+ self.onVolumeUp();
+ }
+ };
+ saveButton.down = function () {
+ saveButton.up();
+ if (typeof self.onSave === 'function') {
+ self.onSave();
+ }
+ };
+ backButton.down = function () {
+ backButton.up();
+ if (typeof self.onBack === 'function') {
+ self.onBack();
+ }
+ };
+ return self;
+});
var TicTacToeGame = Container.expand(function () {
var self = Container.call(this);
var boardGraphic = self.attachAsset('tictactoeBoard', {
anchorX: 0.5,
@@ -419,8 +812,146 @@
self.statusText.setText("Player X's turn");
};
return self;
});
+var WordGuessingGame = Container.expand(function () {
+ var self = Container.call(this);
+ var words = ["GAME", "PLAY", "FUN", "CHAT", "PARTY", "BOARD", "CARD", "DICE", "TEAM", "WIN"];
+ var currentWord = "";
+ var guessedLetters = [];
+ var maxAttempts = 6;
+ var attemptsLeft = maxAttempts;
+ self.gameActive = true;
+ // Create game board background
+ var boardGraphic = self.attachAsset('tictactoeBoard', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ width: 700,
+ height: 500
+ });
+ // Status text
+ self.statusText = new Text2("Word Guessing Game", {
+ size: 36,
+ fill: 0x333333
+ });
+ self.statusText.anchor.set(0.5, 0);
+ self.statusText.y = -200;
+ self.addChild(self.statusText);
+ // Word display
+ self.wordDisplay = new Text2("", {
+ size: 48,
+ fill: 0x333333
+ });
+ self.wordDisplay.anchor.set(0.5, 0);
+ self.wordDisplay.y = -120;
+ self.addChild(self.wordDisplay);
+ // Attempts display
+ self.attemptsDisplay = new Text2("Attempts left: " + attemptsLeft, {
+ size: 28,
+ fill: 0x333333
+ });
+ self.attemptsDisplay.anchor.set(0.5, 0);
+ self.attemptsDisplay.y = -50;
+ self.addChild(self.attemptsDisplay);
+ // Letter buttons
+ var lettersContainer = new Container();
+ self.addChild(lettersContainer);
+ lettersContainer.y = 50;
+ // Create keyboard
+ var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ var buttonSize = 60;
+ var buttonsPerRow = 7;
+ for (var i = 0; i < alphabet.length; i++) {
+ var letter = alphabet[i];
+ var letterButton = new Button(letter, buttonSize, buttonSize);
+ var row = Math.floor(i / buttonsPerRow);
+ var col = i % buttonsPerRow;
+ letterButton.x = (col - 3) * (buttonSize + 10);
+ letterButton.y = row * (buttonSize + 10);
+ letterButton.letter = letter;
+ letterButton.down = function () {
+ var button = this;
+ button.up();
+ if (self.gameActive) self.guessLetter(button.letter);
+ };
+ lettersContainer.addChild(letterButton);
+ }
+ // Result display
+ self.resultDisplay = new Text2("", {
+ size: 36,
+ fill: 0x333333
+ });
+ self.resultDisplay.anchor.set(0.5, 0);
+ self.resultDisplay.y = 200;
+ self.addChild(self.resultDisplay);
+ // Game logic
+ self.startNewGame = function () {
+ currentWord = words[Math.floor(Math.random() * words.length)];
+ guessedLetters = [];
+ attemptsLeft = maxAttempts;
+ self.gameActive = true;
+ self.updateWordDisplay();
+ self.attemptsDisplay.setText("Attempts left: " + attemptsLeft);
+ self.resultDisplay.setText("");
+ };
+ self.updateWordDisplay = function () {
+ var display = "";
+ for (var i = 0; i < currentWord.length; i++) {
+ if (guessedLetters.includes(currentWord[i])) {
+ display += currentWord[i] + " ";
+ } else {
+ display += "_ ";
+ }
+ }
+ self.wordDisplay.setText(display);
+ };
+ self.guessLetter = function (letter) {
+ if (!self.gameActive || guessedLetters.includes(letter)) return;
+ guessedLetters.push(letter);
+ LK.getSound('select').play();
+ // Check if letter is in word
+ if (currentWord.includes(letter)) {
+ self.updateWordDisplay();
+ // Check if word is complete
+ var isComplete = true;
+ for (var i = 0; i < currentWord.length; i++) {
+ if (!guessedLetters.includes(currentWord[i])) {
+ isComplete = false;
+ break;
+ }
+ }
+ if (isComplete) {
+ self.resultDisplay.setText("You won!");
+ self.resultDisplay.style.fill = "#27ae60";
+ self.gameActive = false;
+ LK.setTimeout(function () {
+ if (typeof self.onGameOver === 'function') {
+ self.onGameOver('win');
+ }
+ }, 2000);
+ }
+ } else {
+ attemptsLeft--;
+ self.attemptsDisplay.setText("Attempts left: " + attemptsLeft);
+ if (attemptsLeft <= 0) {
+ self.resultDisplay.setText("You lost! The word was: " + currentWord);
+ self.resultDisplay.style.fill = "#e74c3c";
+ self.gameActive = false;
+ LK.setTimeout(function () {
+ if (typeof self.onGameOver === 'function') {
+ self.onGameOver('lose');
+ }
+ }, 2000);
+ }
+ }
+ };
+ self.reset = function () {
+ self.startNewGame();
+ };
+ // Initialize
+ self.startNewGame();
+ return self;
+});
/****
* Initialize Game
****/
@@ -479,16 +1010,40 @@
}
function _arrayWithHoles(r) {
if (Array.isArray(r)) return r;
}
-var currentScreen = 'lobby'; // 'lobby', 'room', 'game'
+// App state
+var currentScreen = 'mainMenu'; // 'mainMenu', 'lobby', 'room', 'game', 'settings', 'language', 'createRoom', 'joinRoom'
var username = storage.username || 'Player';
var avatarColor = storage.color || '#3498db';
var currentRoomName = '';
+var volumeLevel = 100;
+var currentLanguage = 'en';
+var currentGameType = 'tictactoe'; // 'tictactoe', 'rockpaperscissors', 'wordguessing'
// Create UI containers for different screens
+var mainMenuScreen = new Container();
var lobbyScreen = new Container();
var roomScreen = new Container();
var gameScreen = new Container();
+var settingsScreen = new Container();
+var languageScreen = new Container();
+var createRoomScreen = new Container();
+var joinRoomScreen = new Container();
+// Create main menu
+var mainMenu = new MainMenu();
+mainMenu.x = 2048 / 2;
+mainMenu.y = 2732 / 2;
+mainMenuScreen.addChild(mainMenu);
+// Create settings menu
+var settingsMenu = new SettingsMenu();
+settingsMenu.x = 2048 / 2;
+settingsMenu.y = 2732 / 2;
+settingsScreen.addChild(settingsMenu);
+// Create language menu
+var languageMenu = new LanguageMenu();
+languageMenu.x = 2048 / 2;
+languageMenu.y = 2732 / 2;
+languageScreen.addChild(languageMenu);
// Set up lobby screen
var lobbyTitle = new Text2('Chat Party Games', {
size: 80,
fill: 0x2C3E50
@@ -523,12 +1078,20 @@
var roomList = new Container();
roomList.x = (2048 - 700) / 2;
roomList.y = 680;
lobbyScreen.addChild(roomList);
+var lobbyButtonsContainer = new Container();
+lobbyButtonsContainer.x = 2048 / 2;
+lobbyButtonsContainer.y = 2500;
+lobbyScreen.addChild(lobbyButtonsContainer);
var createRoomButton = new Button('Create Room', 250, 80);
-createRoomButton.x = 2048 / 2;
-createRoomButton.y = 2600;
-lobbyScreen.addChild(createRoomButton);
+createRoomButton.x = -150;
+createRoomButton.y = 0;
+lobbyButtonsContainer.addChild(createRoomButton);
+var backToMenuButton = new Button('Main Menu', 250, 80);
+backToMenuButton.x = 150;
+backToMenuButton.y = 0;
+lobbyButtonsContainer.addChild(backToMenuButton);
// Setup room screen
var roomTitle = new Text2('Room: Lobby', {
size: 40,
fill: 0x2C3E50
@@ -545,11 +1108,19 @@
gameButtonsContainer.x = 2048 / 2;
gameButtonsContainer.y = 2000;
roomScreen.addChild(gameButtonsContainer);
var tictactoeButton = new Button('Tic-Tac-Toe', 250, 80);
-tictactoeButton.x = 0;
+tictactoeButton.x = -280;
tictactoeButton.y = 0;
gameButtonsContainer.addChild(tictactoeButton);
+var rpsButton = new Button('Rock-Paper-Scissors', 250, 80);
+rpsButton.x = 0;
+rpsButton.y = 0;
+gameButtonsContainer.addChild(rpsButton);
+var wordButton = new Button('Word Game', 250, 80);
+wordButton.x = 280;
+wordButton.y = 0;
+gameButtonsContainer.addChild(wordButton);
var backToLobbyButton = new Button('Back to Lobby', 250, 80);
backToLobbyButton.x = 0;
backToLobbyButton.y = 100;
gameButtonsContainer.addChild(backToLobbyButton);
@@ -561,40 +1132,133 @@
gameTitle.anchor.set(0.5, 0);
gameTitle.x = 2048 / 2;
gameTitle.y = 50;
gameScreen.addChild(gameTitle);
+// Create game instances
var ticTacToeGame = new TicTacToeGame();
ticTacToeGame.x = 2048 / 2;
ticTacToeGame.y = 2732 / 2 - 200;
gameScreen.addChild(ticTacToeGame);
+var rpsGame = new RockPaperScissorsGame();
+rpsGame.x = 2048 / 2;
+rpsGame.y = 2732 / 2 - 200;
+rpsGame.visible = false;
+gameScreen.addChild(rpsGame);
+var wordGame = new WordGuessingGame();
+wordGame.x = 2048 / 2;
+wordGame.y = 2732 / 2 - 200;
+wordGame.visible = false;
+gameScreen.addChild(wordGame);
var backToRoomButton = new Button('Back to Room', 250, 80);
backToRoomButton.x = 2048 / 2;
backToRoomButton.y = 2500;
gameScreen.addChild(backToRoomButton);
+// Create Room screen
+var createRoomTitle = new Text2('Create a New Room', {
+ size: 60,
+ fill: 0x2C3E50
+});
+createRoomTitle.anchor.set(0.5, 0);
+createRoomTitle.x = 2048 / 2;
+createRoomTitle.y = 300;
+createRoomScreen.addChild(createRoomTitle);
+var roomNameInput = createRoomScreen.addChild(LK.getAsset('inputField', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ width: 700,
+ height: 80,
+ x: 2048 / 2,
+ y: 500
+}));
+var roomNameText = new Text2('Room Name', {
+ size: 32,
+ fill: 0x888888
+});
+roomNameText.x = roomNameInput.x - 340;
+roomNameText.y = roomNameInput.y - 10;
+createRoomScreen.addChild(roomNameText);
+var createButton = new Button('Create', 250, 80);
+createButton.x = 2048 / 2 - 150;
+createButton.y = 650;
+createRoomScreen.addChild(createButton);
+var cancelCreateButton = new Button('Cancel', 250, 80);
+cancelCreateButton.x = 2048 / 2 + 150;
+cancelCreateButton.y = 650;
+createRoomScreen.addChild(cancelCreateButton);
// Add main container to game
+game.addChild(mainMenuScreen);
game.addChild(lobbyScreen);
game.addChild(roomScreen);
game.addChild(gameScreen);
-// Initially hide room and game screens
+game.addChild(settingsScreen);
+game.addChild(languageScreen);
+game.addChild(createRoomScreen);
+game.addChild(joinRoomScreen);
+// Initially hide all screens except main menu
+lobbyScreen.visible = false;
roomScreen.visible = false;
gameScreen.visible = false;
+settingsScreen.visible = false;
+languageScreen.visible = false;
+createRoomScreen.visible = false;
+joinRoomScreen.visible = false;
// Function to switch between screens
function showScreen(screenName) {
+ mainMenuScreen.visible = false;
lobbyScreen.visible = false;
roomScreen.visible = false;
gameScreen.visible = false;
+ settingsScreen.visible = false;
+ languageScreen.visible = false;
+ createRoomScreen.visible = false;
+ joinRoomScreen.visible = false;
currentScreen = screenName;
- if (screenName === 'lobby') {
+ if (screenName === 'mainMenu') {
+ mainMenuScreen.visible = true;
+ } else if (screenName === 'lobby') {
lobbyScreen.visible = true;
populateRoomList();
+ usernameText.setText('Your Name: ' + username);
+ avatar.setName(username);
+ avatar.setColor(avatarColor);
} else if (screenName === 'room') {
roomScreen.visible = true;
roomTitle.setText('Room: ' + currentRoomName);
chatPanel.clearMessages();
chatPanel.addMessage('Welcome to ' + currentRoomName + '!', false);
} else if (screenName === 'game') {
gameScreen.visible = true;
- ticTacToeGame.reset();
+ // Set game title and show appropriate game
+ if (currentGameType === 'tictactoe') {
+ gameTitle.setText('Tic-Tac-Toe');
+ ticTacToeGame.visible = true;
+ rpsGame.visible = false;
+ wordGame.visible = false;
+ ticTacToeGame.reset();
+ } else if (currentGameType === 'rockpaperscissors') {
+ gameTitle.setText('Rock-Paper-Scissors');
+ ticTacToeGame.visible = false;
+ rpsGame.visible = true;
+ wordGame.visible = false;
+ rpsGame.reset();
+ } else if (currentGameType === 'wordguessing') {
+ gameTitle.setText('Word Guessing Game');
+ ticTacToeGame.visible = false;
+ rpsGame.visible = false;
+ wordGame.visible = true;
+ wordGame.reset();
+ }
+ } else if (screenName === 'settings') {
+ settingsScreen.visible = true;
+ settingsMenu.userNameText.setText(username);
+ settingsMenu.volumeText.setText(volumeLevel + '%');
+ } else if (screenName === 'language') {
+ languageScreen.visible = true;
+ languageMenu.setActiveLanguage(currentLanguage);
+ } else if (screenName === 'createRoom') {
+ createRoomScreen.visible = true;
+ } else if (screenName === 'joinRoom') {
+ joinRoomScreen.visible = true;
}
}
// Populate the room list with sample rooms
function populateRoomList() {
@@ -634,34 +1298,121 @@
showScreen('room');
};
}
}
-// Event Handlers
-createRoomButton.down = function () {
- createRoomButton.up();
- // Generate random room name
- var adjectives = ['Cool', 'Fun', 'Happy', 'Super', 'Amazing'];
- var nouns = ['Gamers', 'Players', 'Friends', 'Squad', 'Team'];
- var randomRoomName = adjectives[Math.floor(Math.random() * adjectives.length)] + ' ' + nouns[Math.floor(Math.random() * nouns.length)];
+// Main Menu Event Handlers
+mainMenu.onPlay = function () {
+ showScreen('lobby');
+};
+mainMenu.onCreateRoom = function () {
+ showScreen('createRoom');
+};
+mainMenu.onJoinRoom = function () {
+ showScreen('lobby');
+};
+mainMenu.onSettings = function () {
+ showScreen('settings');
+};
+mainMenu.onLanguage = function () {
+ showScreen('language');
+};
+// Settings Event Handlers
+settingsMenu.onChangeName = function () {
+ var newName = prompt("Enter your new username:", username);
+ if (newName && newName.trim() !== '') {
+ username = newName.trim();
+ storage.username = username;
+ settingsMenu.userNameText.setText(username);
+ }
+};
+settingsMenu.onColorChange = function (color) {
+ avatarColor = color;
+ storage.color = color;
+ LK.getSound('select').play();
+};
+settingsMenu.onVolumeDown = function () {
+ volumeLevel = Math.max(0, volumeLevel - 10);
+ settingsMenu.volumeText.setText(volumeLevel + '%');
+};
+settingsMenu.onVolumeUp = function () {
+ volumeLevel = Math.min(100, volumeLevel + 10);
+ settingsMenu.volumeText.setText(volumeLevel + '%');
+};
+settingsMenu.onSave = function () {
+ showScreen('mainMenu');
+};
+settingsMenu.onBack = function () {
+ showScreen('mainMenu');
+};
+// Language Menu Event Handlers
+languageMenu.onLanguageSelect = function (langCode) {
+ currentLanguage = langCode;
+ languageMenu.setActiveLanguage(langCode);
+ LK.getSound('select').play();
+};
+languageMenu.onBack = function () {
+ showScreen('mainMenu');
+};
+// Create Room Event Handlers
+createButton.down = function () {
+ createButton.up();
+ var roomName = roomNameText.text;
+ if (roomName === 'Room Name' || roomName.trim() === '') {
+ // Generate random room name
+ var adjectives = ['Cool', 'Fun', 'Happy', 'Super', 'Amazing'];
+ var nouns = ['Gamers', 'Players', 'Friends', 'Squad', 'Team'];
+ roomName = adjectives[Math.floor(Math.random() * adjectives.length)] + ' ' + nouns[Math.floor(Math.random() * nouns.length)];
+ }
// Store new room
if (!storage.rooms) storage.rooms = [];
- storage.rooms.push(randomRoomName);
+ storage.rooms.push(roomName);
// Join the new room
- currentRoomName = randomRoomName;
+ currentRoomName = roomName;
showScreen('room');
};
+cancelCreateButton.down = function () {
+ cancelCreateButton.up();
+ showScreen('lobby');
+};
+roomNameInput.down = function () {
+ if (roomNameText.text === 'Room Name') {
+ roomNameText.setText('');
+ roomNameText.style.fill = "#333333";
+ }
+};
+// Other Event Handlers
+createRoomButton.down = function () {
+ createRoomButton.up();
+ showScreen('createRoom');
+};
+backToMenuButton.down = function () {
+ backToMenuButton.up();
+ showScreen('mainMenu');
+};
tictactoeButton.down = function () {
tictactoeButton.up();
+ currentGameType = 'tictactoe';
showScreen('game');
};
+rpsButton.down = function () {
+ rpsButton.up();
+ currentGameType = 'rockpaperscissors';
+ showScreen('game');
+};
+wordButton.down = function () {
+ wordButton.up();
+ currentGameType = 'wordguessing';
+ showScreen('game');
+};
backToLobbyButton.down = function () {
backToLobbyButton.up();
showScreen('lobby');
};
backToRoomButton.down = function () {
backToRoomButton.up();
showScreen('room');
};
+// Game Over Event Handlers
ticTacToeGame.onGameOver = function (winner) {
if (winner) {
chatPanel.addMessage('You ' + (winner === 'X' ? 'won' : 'lost') + ' the Tic-Tac-Toe game!', false);
} else {
@@ -670,13 +1421,34 @@
LK.setTimeout(function () {
showScreen('room');
}, 1000);
};
+rpsGame.onGameOver = function (result) {
+ if (result === 'win') {
+ chatPanel.addMessage('You won the Rock-Paper-Scissors game!', false);
+ } else if (result === 'lose') {
+ chatPanel.addMessage('You lost the Rock-Paper-Scissors game!', false);
+ } else {
+ chatPanel.addMessage('The Rock-Paper-Scissors game ended in a tie!', false);
+ }
+ LK.setTimeout(function () {
+ showScreen('room');
+ }, 1000);
+};
+wordGame.onGameOver = function (result) {
+ if (result === 'win') {
+ chatPanel.addMessage('You won the Word Guessing game!', false);
+ } else {
+ chatPanel.addMessage('You lost the Word Guessing game!', false);
+ }
+ LK.setTimeout(function () {
+ showScreen('room');
+ }, 1000);
+};
// Initialize the game
-populateRoomList();
LK.playMusic('bgmusic');
// Update loop
game.update = function () {
// Nothing needed in update loop for this game
};
// Initial setup
-showScreen('lobby');
\ No newline at end of file
+showScreen('mainMenu');
\ No newline at end of file