User prompt
yes
Code edit (1 edits merged)
Please save this source code
User prompt
Multi-Game Arcade
Initial prompt
Python projeleriniz web'de çalışıyor!
/****
* Plugins
****/
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var BackButton = Container.expand(function () {
var self = Container.call(this);
var background = self.attachAsset('backButton', {
anchorX: 0.5,
anchorY: 0.5
});
var hoverBackground = self.attachAsset('backButtonHover', {
anchorX: 0.5,
anchorY: 0.5
});
hoverBackground.visible = false;
var buttonText = new Text2("Back", {
size: 30,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.isHovered = false;
self.down = function (x, y, obj) {
currentGame = 'menu';
switchToGame('menu');
};
self.setHover = function (hover) {
self.isHovered = hover;
background.visible = !hover;
hoverBackground.visible = hover;
};
return self;
});
var ListButton = Container.expand(function (text, action) {
var self = Container.call(this);
var background = self.attachAsset('actionButton', {
anchorX: 0.5,
anchorY: 0.5
});
var hoverBackground = self.attachAsset('actionButtonHover', {
anchorX: 0.5,
anchorY: 0.5
});
hoverBackground.visible = false;
var buttonText = new Text2(text, {
size: 25,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.action = action;
self.isHovered = false;
self.down = function (x, y, obj) {
if (self.action === 'random') {
showRandomItem();
} else if (self.action === 'clear') {
clearAllItems();
} else if (self.action === 'view') {
toggleViewList();
}
};
self.setHover = function (hover) {
self.isHovered = hover;
background.visible = !hover;
hoverBackground.visible = hover;
};
return self;
});
var MenuButton = Container.expand(function (text, gameType) {
var self = Container.call(this);
var background = self.attachAsset('menuBackground', {
anchorX: 0.5,
anchorY: 0.5
});
var hoverBackground = self.attachAsset('menuBackgroundHover', {
anchorX: 0.5,
anchorY: 0.5
});
hoverBackground.visible = false;
var buttonText = new Text2(text, {
size: 40,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.gameType = gameType;
self.isHovered = false;
self.down = function (x, y, obj) {
currentGame = self.gameType;
switchToGame(self.gameType);
};
self.setHover = function (hover) {
self.isHovered = hover;
background.visible = !hover;
hoverBackground.visible = hover;
};
return self;
});
var RPSButton = Container.expand(function (choice) {
var self = Container.call(this);
var background = self.attachAsset('rpsButton', {
anchorX: 0.5,
anchorY: 0.5
});
var hoverBackground = self.attachAsset('rpsButtonHover', {
anchorX: 0.5,
anchorY: 0.5
});
hoverBackground.visible = false;
var buttonText = new Text2(choice, {
size: 50,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.choice = choice;
self.isHovered = false;
self.down = function (x, y, obj) {
if (rpsGameActive) {
playRPSRound(self.choice);
}
};
self.setHover = function (hover) {
self.isHovered = hover;
background.visible = !hover;
hoverBackground.visible = hover;
};
return self;
});
var XOXCell = Container.expand(function (row, col) {
var self = Container.call(this);
var background = self.attachAsset('xoxGrid', {
anchorX: 0.5,
anchorY: 0.5
});
var hoverBackground = self.attachAsset('xoxGridHover', {
anchorX: 0.5,
anchorY: 0.5
});
hoverBackground.visible = false;
var cellText = new Text2("", {
size: 60,
fill: 0xFFFFFF
});
cellText.anchor.set(0.5, 0.5);
self.addChild(cellText);
self.row = row;
self.col = col;
self.value = "";
self.isHovered = false;
self.down = function (x, y, obj) {
if (xoxGameActive && self.value === "" && currentPlayer === "X") {
makeXOXMove(self.row, self.col, "X");
}
};
self.setValue = function (value) {
self.value = value;
cellText.setText(value);
cellText.fill = value === "X" ? "#e74c3c" : "#3498db";
};
self.setHover = function (hover) {
if (self.value === "") {
self.isHovered = hover;
background.visible = !hover;
hoverBackground.visible = hover;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
// Date converter assets
// List manager assets
// Rock Paper Scissors assets
// XOX Game assets
// Game backgrounds
// Main menu backgrounds
// Game state variables
var currentGame = 'menu';
var menuButtons = [];
var backButton;
var gameContainer;
// XOX Game variables
var xoxBoard = [["", "", ""], ["", "", ""], ["", "", ""]];
var xoxCells = [];
var currentPlayer = "X";
var xoxGameActive = true;
var xoxStatusText;
// Rock Paper Scissors variables
var rpsButtons = [];
var playerScore = 0;
var computerScore = 0;
var rpsGameActive = true;
var rpsStatusText;
var rpsScoreText;
// List Manager variables
var itemsList = storage.itemsList || [];
var currentInput = "";
var listStatusText;
var listDisplayText;
var showingList = false;
// Date Converter variables
var dateInput = "";
var dateStatusText;
var isHijriInput = true;
// Initialize storage
storage.itemsList = storage.itemsList || [];
function createMainMenu() {
// Clear existing content
game.children.forEach(function (child) {
if (child !== gameContainer) {
game.removeChild(child);
}
});
var titleText = new Text2("Multi-Game Arcade", {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 300;
game.addChild(titleText);
// Create menu buttons
var buttonTexts = ["Film & Game Manager", "XOX (Tic-Tac-Toe)", "Rock Paper Scissors", "Date Converter"];
var gameTypes = ["list", "xox", "rps", "date"];
menuButtons = [];
for (var i = 0; i < 4; i++) {
var button = new MenuButton(buttonTexts[i], gameTypes[i]);
button.x = 1024;
button.y = 600 + i * 250;
menuButtons.push(button);
game.addChild(button);
}
}
function createXOXGame() {
gameContainer = game.addChild(new Container());
var titleText = new Text2("XOX (Tic-Tac-Toe)", {
size: 60,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 200;
gameContainer.addChild(titleText);
xoxStatusText = new Text2("Your turn (X)", {
size: 40,
fill: 0xFFFFFF
});
xoxStatusText.anchor.set(0.5, 0.5);
xoxStatusText.x = 1024;
xoxStatusText.y = 300;
gameContainer.addChild(xoxStatusText);
// Create XOX grid
xoxCells = [];
for (var row = 0; row < 3; row++) {
xoxCells[row] = [];
for (var col = 0; col < 3; col++) {
var cell = new XOXCell(row, col);
cell.x = 824 + col * 140;
cell.y = 500 + row * 140;
xoxCells[row][col] = cell;
gameContainer.addChild(cell);
}
}
var newGameButton = new ListButton("New Game", "newgame");
newGameButton.x = 1024;
newGameButton.y = 1000;
newGameButton.down = function () {
resetXOXGame();
};
gameContainer.addChild(newGameButton);
backButton = new BackButton();
backButton.x = 150;
backButton.y = 150;
gameContainer.addChild(backButton);
}
function createRPSGame() {
gameContainer = game.addChild(new Container());
var titleText = new Text2("Rock Paper Scissors", {
size: 60,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 200;
gameContainer.addChild(titleText);
rpsStatusText = new Text2("Choose your move!", {
size: 40,
fill: 0xFFFFFF
});
rpsStatusText.anchor.set(0.5, 0.5);
rpsStatusText.x = 1024;
rpsStatusText.y = 300;
gameContainer.addChild(rpsStatusText);
rpsScoreText = new Text2("Player: 0 | Computer: 0", {
size: 35,
fill: 0xFFFFFF
});
rpsScoreText.anchor.set(0.5, 0.5);
rpsScoreText.x = 1024;
rpsScoreText.y = 380;
gameContainer.addChild(rpsScoreText);
// Create RPS buttons
var choices = ["Rock", "Paper", "Scissors"];
rpsButtons = [];
for (var i = 0; i < 3; i++) {
var button = new RPSButton(choices[i]);
button.x = 524 + i * 350;
button.y = 600;
rpsButtons.push(button);
gameContainer.addChild(button);
}
var newGameButton = new ListButton("New Game", "newgame");
newGameButton.x = 1024;
newGameButton.y = 1000;
newGameButton.down = function () {
resetRPSGame();
};
gameContainer.addChild(newGameButton);
backButton = new BackButton();
backButton.x = 150;
backButton.y = 150;
gameContainer.addChild(backButton);
}
function createListGame() {
gameContainer = game.addChild(new Container());
var titleText = new Text2("Film & Game Manager", {
size: 60,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 200;
gameContainer.addChild(titleText);
var instructionText = new Text2("Tap below to add items to your wishlist:", {
size: 30,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 300;
gameContainer.addChild(instructionText);
// Input simulation area
var inputBg = LK.getAsset('inputBox', {
anchorX: 0.5,
anchorY: 0.5
});
inputBg.x = 1024;
inputBg.y = 400;
gameContainer.addChild(inputBg);
var inputText = new Text2("Tap here to add item...", {
size: 25,
fill: 0x666666
});
inputText.anchor.set(0.5, 0.5);
inputText.x = 1024;
inputText.y = 400;
gameContainer.addChild(inputText);
listStatusText = new Text2("Items in list: " + itemsList.length, {
size: 30,
fill: 0xFFFFFF
});
listStatusText.anchor.set(0.5, 0.5);
listStatusText.x = 1024;
listStatusText.y = 500;
gameContainer.addChild(listStatusText);
// Action buttons
var randomButton = new ListButton("Random Pick", "random");
randomButton.x = 624;
randomButton.y = 600;
gameContainer.addChild(randomButton);
var viewButton = new ListButton("View List", "view");
viewButton.x = 1024;
viewButton.y = 600;
gameContainer.addChild(viewButton);
var clearButton = new ListButton("Clear All", "clear");
clearButton.x = 1424;
clearButton.y = 600;
gameContainer.addChild(clearButton);
listDisplayText = new Text2("", {
size: 25,
fill: 0xFFFFFF
});
listDisplayText.anchor.set(0.5, 0);
listDisplayText.x = 1024;
listDisplayText.y = 700;
gameContainer.addChild(listDisplayText);
// Simulate add item functionality
inputBg.interactive = true;
inputBg.down = function () {
var sampleItems = ["Avatar", "Inception", "The Matrix", "Interstellar", "The Witcher 3", "Cyberpunk 2077", "Red Dead Redemption", "Minecraft"];
var randomItem = sampleItems[Math.floor(Math.random() * sampleItems.length)];
itemsList.push(randomItem);
storage.itemsList = itemsList;
updateListStatus();
inputText.setText("Added: " + randomItem);
LK.setTimeout(function () {
inputText.setText("Tap here to add item...");
}, 2000);
};
backButton = new BackButton();
backButton.x = 150;
backButton.y = 150;
gameContainer.addChild(backButton);
updateListStatus();
}
function createDateGame() {
gameContainer = game.addChild(new Container());
var titleText = new Text2("Date Converter", {
size: 60,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 200;
gameContainer.addChild(titleText);
var instructionText = new Text2("Tap buttons to convert dates between Hijri and Gregorian calendars", {
size: 30,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 300;
gameContainer.addChild(instructionText);
// Convert buttons
var hijriButton = new ListButton("Convert to Hijri", "hijri");
hijriButton.x = 724;
hijriButton.y = 450;
hijriButton.down = function () {
convertDate(false);
};
gameContainer.addChild(hijriButton);
var gregorianButton = new ListButton("Convert to Gregorian", "gregorian");
gregorianButton.x = 1324;
gregorianButton.y = 450;
gregorianButton.down = function () {
convertDate(true);
};
gameContainer.addChild(gregorianButton);
dateStatusText = new Text2("Sample: 2024/1/1 (Gregorian) = 1445/5/20 (Hijri)", {
size: 35,
fill: 0x2ECC71
});
dateStatusText.anchor.set(0.5, 0.5);
dateStatusText.x = 1024;
dateStatusText.y = 600;
gameContainer.addChild(dateStatusText);
var infoText = new Text2("The Hijri calendar is based on lunar cycles,\nwhile the Gregorian calendar follows solar years.\nConversions are approximate.", {
size: 25,
fill: 0x95A5A6
});
infoText.anchor.set(0.5, 0.5);
infoText.x = 1024;
infoText.y = 750;
gameContainer.addChild(infoText);
backButton = new BackButton();
backButton.x = 150;
backButton.y = 150;
gameContainer.addChild(backButton);
}
function switchToGame(gameType) {
// Clear current game
if (gameContainer) {
game.removeChild(gameContainer);
gameContainer = null;
}
// Remove menu buttons
menuButtons.forEach(function (button) {
game.removeChild(button);
});
menuButtons = [];
// Remove any other UI elements
game.children.forEach(function (child) {
if (child.constructor === Text2) {
game.removeChild(child);
}
});
// Create new game
switch (gameType) {
case 'menu':
createMainMenu();
break;
case 'xox':
createXOXGame();
resetXOXGame();
break;
case 'rps':
createRPSGame();
resetRPSGame();
break;
case 'list':
createListGame();
break;
case 'date':
createDateGame();
break;
}
}
// XOX Game Logic
function makeXOXMove(row, col, player) {
if (xoxBoard[row][col] === "" && xoxGameActive) {
xoxBoard[row][col] = player;
xoxCells[row][col].setValue(player);
if (checkXOXWin(player)) {
xoxStatusText.setText(player + " wins!");
xoxGameActive = false;
return;
}
if (checkXOXDraw()) {
xoxStatusText.setText("It's a draw!");
xoxGameActive = false;
return;
}
currentPlayer = player === "X" ? "O" : "X";
xoxStatusText.setText(currentPlayer === "X" ? "Your turn (X)" : "Computer's turn (O)");
if (currentPlayer === "O") {
LK.setTimeout(makeComputerMove, 500);
}
}
}
function makeComputerMove() {
if (!xoxGameActive) return;
var emptyCells = [];
for (var row = 0; row < 3; row++) {
for (var col = 0; col < 3; col++) {
if (xoxBoard[row][col] === "") {
emptyCells.push({
row: row,
col: col
});
}
}
}
if (emptyCells.length > 0) {
var randomMove = emptyCells[Math.floor(Math.random() * emptyCells.length)];
makeXOXMove(randomMove.row, randomMove.col, "O");
}
}
function checkXOXWin(player) {
// Check rows
for (var row = 0; row < 3; row++) {
if (xoxBoard[row][0] === player && xoxBoard[row][1] === player && xoxBoard[row][2] === player) {
return true;
}
}
// Check columns
for (var col = 0; col < 3; col++) {
if (xoxBoard[0][col] === player && xoxBoard[1][col] === player && xoxBoard[2][col] === player) {
return true;
}
}
// Check diagonals
if (xoxBoard[0][0] === player && xoxBoard[1][1] === player && xoxBoard[2][2] === player) {
return true;
}
if (xoxBoard[0][2] === player && xoxBoard[1][1] === player && xoxBoard[2][0] === player) {
return true;
}
return false;
}
function checkXOXDraw() {
for (var row = 0; row < 3; row++) {
for (var col = 0; col < 3; col++) {
if (xoxBoard[row][col] === "") {
return false;
}
}
}
return true;
}
function resetXOXGame() {
xoxBoard = [["", "", ""], ["", "", ""], ["", "", ""]];
for (var row = 0; row < 3; row++) {
for (var col = 0; col < 3; col++) {
xoxCells[row][col].setValue("");
}
}
currentPlayer = "X";
xoxGameActive = true;
xoxStatusText.setText("Your turn (X)");
}
// Rock Paper Scissors Logic
function playRPSRound(playerChoice) {
if (!rpsGameActive) return;
var choices = ["Rock", "Paper", "Scissors"];
var computerChoice = choices[Math.floor(Math.random() * 3)];
var result = "";
if (playerChoice === computerChoice) {
result = "Tie! Both chose " + playerChoice;
} else if (playerChoice === "Rock" && computerChoice === "Scissors" || playerChoice === "Paper" && computerChoice === "Rock" || playerChoice === "Scissors" && computerChoice === "Paper") {
result = "You win! " + playerChoice + " beats " + computerChoice;
playerScore++;
} else {
result = "Computer wins! " + computerChoice + " beats " + playerChoice;
computerScore++;
}
rpsStatusText.setText(result);
rpsScoreText.setText("Player: " + playerScore + " | Computer: " + computerScore);
if (playerScore >= 3 || computerScore >= 3) {
var winner = playerScore >= 3 ? "You win the match!" : "Computer wins the match!";
rpsStatusText.setText(winner);
rpsGameActive = false;
}
}
function resetRPSGame() {
playerScore = 0;
computerScore = 0;
rpsGameActive = true;
rpsStatusText.setText("Choose your move!");
rpsScoreText.setText("Player: 0 | Computer: 0");
}
// List Manager Logic
function showRandomItem() {
if (itemsList.length === 0) {
listDisplayText.setText("No items in your list yet!");
return;
}
var randomIndex = Math.floor(Math.random() * itemsList.length);
var randomItem = itemsList[randomIndex];
listDisplayText.setText("Random pick: " + randomItem);
showingList = false;
}
function clearAllItems() {
itemsList = [];
storage.itemsList = [];
updateListStatus();
listDisplayText.setText("All items cleared!");
showingList = false;
}
function toggleViewList() {
if (itemsList.length === 0) {
listDisplayText.setText("No items in your list yet!");
return;
}
if (showingList) {
listDisplayText.setText("");
showingList = false;
} else {
var displayText = "Your list:\n";
for (var i = 0; i < Math.min(itemsList.length, 10); i++) {
displayText += i + 1 + ". " + itemsList[i] + "\n";
}
if (itemsList.length > 10) {
displayText += "... and " + (itemsList.length - 10) + " more items";
}
listDisplayText.setText(displayText);
showingList = true;
}
}
function updateListStatus() {
if (listStatusText) {
listStatusText.setText("Items in list: " + itemsList.length);
}
}
// Date Converter Logic
function convertDate(toHijri) {
var samples = [{
gregorian: "2024/1/1",
hijri: "1445/5/20"
}, {
gregorian: "2023/12/25",
hijri: "1445/6/12"
}, {
gregorian: "2024/7/4",
hijri: "1445/12/28"
}, {
gregorian: "2024/3/15",
hijri: "1445/9/5"
}];
var randomSample = samples[Math.floor(Math.random() * samples.length)];
if (toHijri) {
dateStatusText.setText("Sample: " + randomSample.gregorian + " (Gregorian) = " + randomSample.hijri + " (Hijri)");
} else {
dateStatusText.setText("Sample: " + randomSample.hijri + " (Hijri) = " + randomSample.gregorian + " (Gregorian)");
}
}
// Mouse handling
var hoveredElement = null;
game.move = function (x, y, obj) {
var newHoveredElement = null;
// Check menu buttons
if (currentGame === 'menu') {
menuButtons.forEach(function (button) {
if (x >= button.x - 200 && x <= button.x + 200 && y >= button.y - 100 && y <= button.y + 100) {
newHoveredElement = button;
}
});
}
// Check back button
if (backButton && x >= backButton.x - 75 && x <= backButton.x + 75 && y >= backButton.y - 40 && y <= backButton.y + 40) {
newHoveredElement = backButton;
}
// Check XOX cells
if (currentGame === 'xox' && xoxCells.length > 0) {
xoxCells.forEach(function (row) {
row.forEach(function (cell) {
if (x >= cell.x - 60 && x <= cell.x + 60 && y >= cell.y - 60 && y <= cell.y + 60) {
newHoveredElement = cell;
}
});
});
}
// Check RPS buttons
if (currentGame === 'rps' && rpsButtons.length > 0) {
rpsButtons.forEach(function (button) {
if (x >= button.x - 100 && x <= button.x + 100 && y >= button.y - 100 && y <= button.y + 100) {
newHoveredElement = button;
}
});
}
// Update hover states
if (hoveredElement && hoveredElement !== newHoveredElement) {
if (hoveredElement.setHover) {
hoveredElement.setHover(false);
}
}
if (newHoveredElement && newHoveredElement !== hoveredElement) {
if (newHoveredElement.setHover) {
newHoveredElement.setHover(true);
}
}
hoveredElement = newHoveredElement;
};
// Initialize the game
createMainMenu(); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,738 @@
-/****
+/****
+* Plugins
+****/
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var BackButton = Container.expand(function () {
+ var self = Container.call(this);
+ var background = self.attachAsset('backButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var hoverBackground = self.attachAsset('backButtonHover', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ hoverBackground.visible = false;
+ var buttonText = new Text2("Back", {
+ size: 30,
+ fill: 0xFFFFFF
+ });
+ buttonText.anchor.set(0.5, 0.5);
+ self.addChild(buttonText);
+ self.isHovered = false;
+ self.down = function (x, y, obj) {
+ currentGame = 'menu';
+ switchToGame('menu');
+ };
+ self.setHover = function (hover) {
+ self.isHovered = hover;
+ background.visible = !hover;
+ hoverBackground.visible = hover;
+ };
+ return self;
+});
+var ListButton = Container.expand(function (text, action) {
+ var self = Container.call(this);
+ var background = self.attachAsset('actionButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var hoverBackground = self.attachAsset('actionButtonHover', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ hoverBackground.visible = false;
+ var buttonText = new Text2(text, {
+ size: 25,
+ fill: 0xFFFFFF
+ });
+ buttonText.anchor.set(0.5, 0.5);
+ self.addChild(buttonText);
+ self.action = action;
+ self.isHovered = false;
+ self.down = function (x, y, obj) {
+ if (self.action === 'random') {
+ showRandomItem();
+ } else if (self.action === 'clear') {
+ clearAllItems();
+ } else if (self.action === 'view') {
+ toggleViewList();
+ }
+ };
+ self.setHover = function (hover) {
+ self.isHovered = hover;
+ background.visible = !hover;
+ hoverBackground.visible = hover;
+ };
+ return self;
+});
+var MenuButton = Container.expand(function (text, gameType) {
+ var self = Container.call(this);
+ var background = self.attachAsset('menuBackground', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var hoverBackground = self.attachAsset('menuBackgroundHover', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ hoverBackground.visible = false;
+ var buttonText = new Text2(text, {
+ size: 40,
+ fill: 0xFFFFFF
+ });
+ buttonText.anchor.set(0.5, 0.5);
+ self.addChild(buttonText);
+ self.gameType = gameType;
+ self.isHovered = false;
+ self.down = function (x, y, obj) {
+ currentGame = self.gameType;
+ switchToGame(self.gameType);
+ };
+ self.setHover = function (hover) {
+ self.isHovered = hover;
+ background.visible = !hover;
+ hoverBackground.visible = hover;
+ };
+ return self;
+});
+var RPSButton = Container.expand(function (choice) {
+ var self = Container.call(this);
+ var background = self.attachAsset('rpsButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var hoverBackground = self.attachAsset('rpsButtonHover', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ hoverBackground.visible = false;
+ var buttonText = new Text2(choice, {
+ size: 50,
+ fill: 0xFFFFFF
+ });
+ buttonText.anchor.set(0.5, 0.5);
+ self.addChild(buttonText);
+ self.choice = choice;
+ self.isHovered = false;
+ self.down = function (x, y, obj) {
+ if (rpsGameActive) {
+ playRPSRound(self.choice);
+ }
+ };
+ self.setHover = function (hover) {
+ self.isHovered = hover;
+ background.visible = !hover;
+ hoverBackground.visible = hover;
+ };
+ return self;
+});
+var XOXCell = Container.expand(function (row, col) {
+ var self = Container.call(this);
+ var background = self.attachAsset('xoxGrid', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var hoverBackground = self.attachAsset('xoxGridHover', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ hoverBackground.visible = false;
+ var cellText = new Text2("", {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ cellText.anchor.set(0.5, 0.5);
+ self.addChild(cellText);
+ self.row = row;
+ self.col = col;
+ self.value = "";
+ self.isHovered = false;
+ self.down = function (x, y, obj) {
+ if (xoxGameActive && self.value === "" && currentPlayer === "X") {
+ makeXOXMove(self.row, self.col, "X");
+ }
+ };
+ self.setValue = function (value) {
+ self.value = value;
+ cellText.setText(value);
+ cellText.fill = value === "X" ? "#e74c3c" : "#3498db";
+ };
+ self.setHover = function (hover) {
+ if (self.value === "") {
+ self.isHovered = hover;
+ background.visible = !hover;
+ hoverBackground.visible = hover;
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a1a
+});
+
+/****
+* Game Code
+****/
+// Date converter assets
+// List manager assets
+// Rock Paper Scissors assets
+// XOX Game assets
+// Game backgrounds
+// Main menu backgrounds
+// Game state variables
+var currentGame = 'menu';
+var menuButtons = [];
+var backButton;
+var gameContainer;
+// XOX Game variables
+var xoxBoard = [["", "", ""], ["", "", ""], ["", "", ""]];
+var xoxCells = [];
+var currentPlayer = "X";
+var xoxGameActive = true;
+var xoxStatusText;
+// Rock Paper Scissors variables
+var rpsButtons = [];
+var playerScore = 0;
+var computerScore = 0;
+var rpsGameActive = true;
+var rpsStatusText;
+var rpsScoreText;
+// List Manager variables
+var itemsList = storage.itemsList || [];
+var currentInput = "";
+var listStatusText;
+var listDisplayText;
+var showingList = false;
+// Date Converter variables
+var dateInput = "";
+var dateStatusText;
+var isHijriInput = true;
+// Initialize storage
+storage.itemsList = storage.itemsList || [];
+function createMainMenu() {
+ // Clear existing content
+ game.children.forEach(function (child) {
+ if (child !== gameContainer) {
+ game.removeChild(child);
+ }
+ });
+ var titleText = new Text2("Multi-Game Arcade", {
+ size: 80,
+ fill: 0xFFFFFF
+ });
+ titleText.anchor.set(0.5, 0.5);
+ titleText.x = 1024;
+ titleText.y = 300;
+ game.addChild(titleText);
+ // Create menu buttons
+ var buttonTexts = ["Film & Game Manager", "XOX (Tic-Tac-Toe)", "Rock Paper Scissors", "Date Converter"];
+ var gameTypes = ["list", "xox", "rps", "date"];
+ menuButtons = [];
+ for (var i = 0; i < 4; i++) {
+ var button = new MenuButton(buttonTexts[i], gameTypes[i]);
+ button.x = 1024;
+ button.y = 600 + i * 250;
+ menuButtons.push(button);
+ game.addChild(button);
+ }
+}
+function createXOXGame() {
+ gameContainer = game.addChild(new Container());
+ var titleText = new Text2("XOX (Tic-Tac-Toe)", {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ titleText.anchor.set(0.5, 0.5);
+ titleText.x = 1024;
+ titleText.y = 200;
+ gameContainer.addChild(titleText);
+ xoxStatusText = new Text2("Your turn (X)", {
+ size: 40,
+ fill: 0xFFFFFF
+ });
+ xoxStatusText.anchor.set(0.5, 0.5);
+ xoxStatusText.x = 1024;
+ xoxStatusText.y = 300;
+ gameContainer.addChild(xoxStatusText);
+ // Create XOX grid
+ xoxCells = [];
+ for (var row = 0; row < 3; row++) {
+ xoxCells[row] = [];
+ for (var col = 0; col < 3; col++) {
+ var cell = new XOXCell(row, col);
+ cell.x = 824 + col * 140;
+ cell.y = 500 + row * 140;
+ xoxCells[row][col] = cell;
+ gameContainer.addChild(cell);
+ }
+ }
+ var newGameButton = new ListButton("New Game", "newgame");
+ newGameButton.x = 1024;
+ newGameButton.y = 1000;
+ newGameButton.down = function () {
+ resetXOXGame();
+ };
+ gameContainer.addChild(newGameButton);
+ backButton = new BackButton();
+ backButton.x = 150;
+ backButton.y = 150;
+ gameContainer.addChild(backButton);
+}
+function createRPSGame() {
+ gameContainer = game.addChild(new Container());
+ var titleText = new Text2("Rock Paper Scissors", {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ titleText.anchor.set(0.5, 0.5);
+ titleText.x = 1024;
+ titleText.y = 200;
+ gameContainer.addChild(titleText);
+ rpsStatusText = new Text2("Choose your move!", {
+ size: 40,
+ fill: 0xFFFFFF
+ });
+ rpsStatusText.anchor.set(0.5, 0.5);
+ rpsStatusText.x = 1024;
+ rpsStatusText.y = 300;
+ gameContainer.addChild(rpsStatusText);
+ rpsScoreText = new Text2("Player: 0 | Computer: 0", {
+ size: 35,
+ fill: 0xFFFFFF
+ });
+ rpsScoreText.anchor.set(0.5, 0.5);
+ rpsScoreText.x = 1024;
+ rpsScoreText.y = 380;
+ gameContainer.addChild(rpsScoreText);
+ // Create RPS buttons
+ var choices = ["Rock", "Paper", "Scissors"];
+ rpsButtons = [];
+ for (var i = 0; i < 3; i++) {
+ var button = new RPSButton(choices[i]);
+ button.x = 524 + i * 350;
+ button.y = 600;
+ rpsButtons.push(button);
+ gameContainer.addChild(button);
+ }
+ var newGameButton = new ListButton("New Game", "newgame");
+ newGameButton.x = 1024;
+ newGameButton.y = 1000;
+ newGameButton.down = function () {
+ resetRPSGame();
+ };
+ gameContainer.addChild(newGameButton);
+ backButton = new BackButton();
+ backButton.x = 150;
+ backButton.y = 150;
+ gameContainer.addChild(backButton);
+}
+function createListGame() {
+ gameContainer = game.addChild(new Container());
+ var titleText = new Text2("Film & Game Manager", {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ titleText.anchor.set(0.5, 0.5);
+ titleText.x = 1024;
+ titleText.y = 200;
+ gameContainer.addChild(titleText);
+ var instructionText = new Text2("Tap below to add items to your wishlist:", {
+ size: 30,
+ fill: 0xFFFFFF
+ });
+ instructionText.anchor.set(0.5, 0.5);
+ instructionText.x = 1024;
+ instructionText.y = 300;
+ gameContainer.addChild(instructionText);
+ // Input simulation area
+ var inputBg = LK.getAsset('inputBox', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ inputBg.x = 1024;
+ inputBg.y = 400;
+ gameContainer.addChild(inputBg);
+ var inputText = new Text2("Tap here to add item...", {
+ size: 25,
+ fill: 0x666666
+ });
+ inputText.anchor.set(0.5, 0.5);
+ inputText.x = 1024;
+ inputText.y = 400;
+ gameContainer.addChild(inputText);
+ listStatusText = new Text2("Items in list: " + itemsList.length, {
+ size: 30,
+ fill: 0xFFFFFF
+ });
+ listStatusText.anchor.set(0.5, 0.5);
+ listStatusText.x = 1024;
+ listStatusText.y = 500;
+ gameContainer.addChild(listStatusText);
+ // Action buttons
+ var randomButton = new ListButton("Random Pick", "random");
+ randomButton.x = 624;
+ randomButton.y = 600;
+ gameContainer.addChild(randomButton);
+ var viewButton = new ListButton("View List", "view");
+ viewButton.x = 1024;
+ viewButton.y = 600;
+ gameContainer.addChild(viewButton);
+ var clearButton = new ListButton("Clear All", "clear");
+ clearButton.x = 1424;
+ clearButton.y = 600;
+ gameContainer.addChild(clearButton);
+ listDisplayText = new Text2("", {
+ size: 25,
+ fill: 0xFFFFFF
+ });
+ listDisplayText.anchor.set(0.5, 0);
+ listDisplayText.x = 1024;
+ listDisplayText.y = 700;
+ gameContainer.addChild(listDisplayText);
+ // Simulate add item functionality
+ inputBg.interactive = true;
+ inputBg.down = function () {
+ var sampleItems = ["Avatar", "Inception", "The Matrix", "Interstellar", "The Witcher 3", "Cyberpunk 2077", "Red Dead Redemption", "Minecraft"];
+ var randomItem = sampleItems[Math.floor(Math.random() * sampleItems.length)];
+ itemsList.push(randomItem);
+ storage.itemsList = itemsList;
+ updateListStatus();
+ inputText.setText("Added: " + randomItem);
+ LK.setTimeout(function () {
+ inputText.setText("Tap here to add item...");
+ }, 2000);
+ };
+ backButton = new BackButton();
+ backButton.x = 150;
+ backButton.y = 150;
+ gameContainer.addChild(backButton);
+ updateListStatus();
+}
+function createDateGame() {
+ gameContainer = game.addChild(new Container());
+ var titleText = new Text2("Date Converter", {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ titleText.anchor.set(0.5, 0.5);
+ titleText.x = 1024;
+ titleText.y = 200;
+ gameContainer.addChild(titleText);
+ var instructionText = new Text2("Tap buttons to convert dates between Hijri and Gregorian calendars", {
+ size: 30,
+ fill: 0xFFFFFF
+ });
+ instructionText.anchor.set(0.5, 0.5);
+ instructionText.x = 1024;
+ instructionText.y = 300;
+ gameContainer.addChild(instructionText);
+ // Convert buttons
+ var hijriButton = new ListButton("Convert to Hijri", "hijri");
+ hijriButton.x = 724;
+ hijriButton.y = 450;
+ hijriButton.down = function () {
+ convertDate(false);
+ };
+ gameContainer.addChild(hijriButton);
+ var gregorianButton = new ListButton("Convert to Gregorian", "gregorian");
+ gregorianButton.x = 1324;
+ gregorianButton.y = 450;
+ gregorianButton.down = function () {
+ convertDate(true);
+ };
+ gameContainer.addChild(gregorianButton);
+ dateStatusText = new Text2("Sample: 2024/1/1 (Gregorian) = 1445/5/20 (Hijri)", {
+ size: 35,
+ fill: 0x2ECC71
+ });
+ dateStatusText.anchor.set(0.5, 0.5);
+ dateStatusText.x = 1024;
+ dateStatusText.y = 600;
+ gameContainer.addChild(dateStatusText);
+ var infoText = new Text2("The Hijri calendar is based on lunar cycles,\nwhile the Gregorian calendar follows solar years.\nConversions are approximate.", {
+ size: 25,
+ fill: 0x95A5A6
+ });
+ infoText.anchor.set(0.5, 0.5);
+ infoText.x = 1024;
+ infoText.y = 750;
+ gameContainer.addChild(infoText);
+ backButton = new BackButton();
+ backButton.x = 150;
+ backButton.y = 150;
+ gameContainer.addChild(backButton);
+}
+function switchToGame(gameType) {
+ // Clear current game
+ if (gameContainer) {
+ game.removeChild(gameContainer);
+ gameContainer = null;
+ }
+ // Remove menu buttons
+ menuButtons.forEach(function (button) {
+ game.removeChild(button);
+ });
+ menuButtons = [];
+ // Remove any other UI elements
+ game.children.forEach(function (child) {
+ if (child.constructor === Text2) {
+ game.removeChild(child);
+ }
+ });
+ // Create new game
+ switch (gameType) {
+ case 'menu':
+ createMainMenu();
+ break;
+ case 'xox':
+ createXOXGame();
+ resetXOXGame();
+ break;
+ case 'rps':
+ createRPSGame();
+ resetRPSGame();
+ break;
+ case 'list':
+ createListGame();
+ break;
+ case 'date':
+ createDateGame();
+ break;
+ }
+}
+// XOX Game Logic
+function makeXOXMove(row, col, player) {
+ if (xoxBoard[row][col] === "" && xoxGameActive) {
+ xoxBoard[row][col] = player;
+ xoxCells[row][col].setValue(player);
+ if (checkXOXWin(player)) {
+ xoxStatusText.setText(player + " wins!");
+ xoxGameActive = false;
+ return;
+ }
+ if (checkXOXDraw()) {
+ xoxStatusText.setText("It's a draw!");
+ xoxGameActive = false;
+ return;
+ }
+ currentPlayer = player === "X" ? "O" : "X";
+ xoxStatusText.setText(currentPlayer === "X" ? "Your turn (X)" : "Computer's turn (O)");
+ if (currentPlayer === "O") {
+ LK.setTimeout(makeComputerMove, 500);
+ }
+ }
+}
+function makeComputerMove() {
+ if (!xoxGameActive) return;
+ var emptyCells = [];
+ for (var row = 0; row < 3; row++) {
+ for (var col = 0; col < 3; col++) {
+ if (xoxBoard[row][col] === "") {
+ emptyCells.push({
+ row: row,
+ col: col
+ });
+ }
+ }
+ }
+ if (emptyCells.length > 0) {
+ var randomMove = emptyCells[Math.floor(Math.random() * emptyCells.length)];
+ makeXOXMove(randomMove.row, randomMove.col, "O");
+ }
+}
+function checkXOXWin(player) {
+ // Check rows
+ for (var row = 0; row < 3; row++) {
+ if (xoxBoard[row][0] === player && xoxBoard[row][1] === player && xoxBoard[row][2] === player) {
+ return true;
+ }
+ }
+ // Check columns
+ for (var col = 0; col < 3; col++) {
+ if (xoxBoard[0][col] === player && xoxBoard[1][col] === player && xoxBoard[2][col] === player) {
+ return true;
+ }
+ }
+ // Check diagonals
+ if (xoxBoard[0][0] === player && xoxBoard[1][1] === player && xoxBoard[2][2] === player) {
+ return true;
+ }
+ if (xoxBoard[0][2] === player && xoxBoard[1][1] === player && xoxBoard[2][0] === player) {
+ return true;
+ }
+ return false;
+}
+function checkXOXDraw() {
+ for (var row = 0; row < 3; row++) {
+ for (var col = 0; col < 3; col++) {
+ if (xoxBoard[row][col] === "") {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+function resetXOXGame() {
+ xoxBoard = [["", "", ""], ["", "", ""], ["", "", ""]];
+ for (var row = 0; row < 3; row++) {
+ for (var col = 0; col < 3; col++) {
+ xoxCells[row][col].setValue("");
+ }
+ }
+ currentPlayer = "X";
+ xoxGameActive = true;
+ xoxStatusText.setText("Your turn (X)");
+}
+// Rock Paper Scissors Logic
+function playRPSRound(playerChoice) {
+ if (!rpsGameActive) return;
+ var choices = ["Rock", "Paper", "Scissors"];
+ var computerChoice = choices[Math.floor(Math.random() * 3)];
+ var result = "";
+ if (playerChoice === computerChoice) {
+ result = "Tie! Both chose " + playerChoice;
+ } else if (playerChoice === "Rock" && computerChoice === "Scissors" || playerChoice === "Paper" && computerChoice === "Rock" || playerChoice === "Scissors" && computerChoice === "Paper") {
+ result = "You win! " + playerChoice + " beats " + computerChoice;
+ playerScore++;
+ } else {
+ result = "Computer wins! " + computerChoice + " beats " + playerChoice;
+ computerScore++;
+ }
+ rpsStatusText.setText(result);
+ rpsScoreText.setText("Player: " + playerScore + " | Computer: " + computerScore);
+ if (playerScore >= 3 || computerScore >= 3) {
+ var winner = playerScore >= 3 ? "You win the match!" : "Computer wins the match!";
+ rpsStatusText.setText(winner);
+ rpsGameActive = false;
+ }
+}
+function resetRPSGame() {
+ playerScore = 0;
+ computerScore = 0;
+ rpsGameActive = true;
+ rpsStatusText.setText("Choose your move!");
+ rpsScoreText.setText("Player: 0 | Computer: 0");
+}
+// List Manager Logic
+function showRandomItem() {
+ if (itemsList.length === 0) {
+ listDisplayText.setText("No items in your list yet!");
+ return;
+ }
+ var randomIndex = Math.floor(Math.random() * itemsList.length);
+ var randomItem = itemsList[randomIndex];
+ listDisplayText.setText("Random pick: " + randomItem);
+ showingList = false;
+}
+function clearAllItems() {
+ itemsList = [];
+ storage.itemsList = [];
+ updateListStatus();
+ listDisplayText.setText("All items cleared!");
+ showingList = false;
+}
+function toggleViewList() {
+ if (itemsList.length === 0) {
+ listDisplayText.setText("No items in your list yet!");
+ return;
+ }
+ if (showingList) {
+ listDisplayText.setText("");
+ showingList = false;
+ } else {
+ var displayText = "Your list:\n";
+ for (var i = 0; i < Math.min(itemsList.length, 10); i++) {
+ displayText += i + 1 + ". " + itemsList[i] + "\n";
+ }
+ if (itemsList.length > 10) {
+ displayText += "... and " + (itemsList.length - 10) + " more items";
+ }
+ listDisplayText.setText(displayText);
+ showingList = true;
+ }
+}
+function updateListStatus() {
+ if (listStatusText) {
+ listStatusText.setText("Items in list: " + itemsList.length);
+ }
+}
+// Date Converter Logic
+function convertDate(toHijri) {
+ var samples = [{
+ gregorian: "2024/1/1",
+ hijri: "1445/5/20"
+ }, {
+ gregorian: "2023/12/25",
+ hijri: "1445/6/12"
+ }, {
+ gregorian: "2024/7/4",
+ hijri: "1445/12/28"
+ }, {
+ gregorian: "2024/3/15",
+ hijri: "1445/9/5"
+ }];
+ var randomSample = samples[Math.floor(Math.random() * samples.length)];
+ if (toHijri) {
+ dateStatusText.setText("Sample: " + randomSample.gregorian + " (Gregorian) = " + randomSample.hijri + " (Hijri)");
+ } else {
+ dateStatusText.setText("Sample: " + randomSample.hijri + " (Hijri) = " + randomSample.gregorian + " (Gregorian)");
+ }
+}
+// Mouse handling
+var hoveredElement = null;
+game.move = function (x, y, obj) {
+ var newHoveredElement = null;
+ // Check menu buttons
+ if (currentGame === 'menu') {
+ menuButtons.forEach(function (button) {
+ if (x >= button.x - 200 && x <= button.x + 200 && y >= button.y - 100 && y <= button.y + 100) {
+ newHoveredElement = button;
+ }
+ });
+ }
+ // Check back button
+ if (backButton && x >= backButton.x - 75 && x <= backButton.x + 75 && y >= backButton.y - 40 && y <= backButton.y + 40) {
+ newHoveredElement = backButton;
+ }
+ // Check XOX cells
+ if (currentGame === 'xox' && xoxCells.length > 0) {
+ xoxCells.forEach(function (row) {
+ row.forEach(function (cell) {
+ if (x >= cell.x - 60 && x <= cell.x + 60 && y >= cell.y - 60 && y <= cell.y + 60) {
+ newHoveredElement = cell;
+ }
+ });
+ });
+ }
+ // Check RPS buttons
+ if (currentGame === 'rps' && rpsButtons.length > 0) {
+ rpsButtons.forEach(function (button) {
+ if (x >= button.x - 100 && x <= button.x + 100 && y >= button.y - 100 && y <= button.y + 100) {
+ newHoveredElement = button;
+ }
+ });
+ }
+ // Update hover states
+ if (hoveredElement && hoveredElement !== newHoveredElement) {
+ if (hoveredElement.setHover) {
+ hoveredElement.setHover(false);
+ }
+ }
+ if (newHoveredElement && newHoveredElement !== hoveredElement) {
+ if (newHoveredElement.setHover) {
+ newHoveredElement.setHover(true);
+ }
+ }
+ hoveredElement = newHoveredElement;
+};
+// Initialize the game
+createMainMenu();
\ No newline at end of file