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