User prompt
Piyonları farklı asset yap
User prompt
Hayır yolada şans ve kamu fonu kısmı ekle ve şan ve kamu fonu kartlarını dikdörtgen şeklinde yan yana koy
User prompt
Kamu fonu vr şans kartı ekle ortaya
User prompt
Turn yazısı sağ altta yazsın
User prompt
Para yazılarını azcık aşağı koy
User prompt
Jail çıkınca ortada jail olsun ve oraya girsin birde bir tane bot olsun onunla oynasın o kazanırsa kaybetsin
User prompt
Kutuların içindeki yazıları kalınlaştır ve beyaz yap
User prompt
Little right again
User prompt
Take the turn text a little to the right
Code edit (1 edits merged)
Please save this source code
User prompt
Monopoly Express
Initial prompt
Make me a good monopoly game
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Chance card class (for display) var ChanceCard = Container.expand(function () { var self = Container.call(this); var card = self.attachAsset('chanceCard', { width: 400, height: 200, color: 0xfff176, anchorX: 0.5, anchorY: 0.5 }); self.text = new Text2('', { size: 48, fill: 0x333333 }); self.text.anchor.set(0.5, 0.5); self.text.x = 0; self.text.y = 0; self.addChild(self.text); self.setText = function (t) { self.text.setText(t); }; return self; }); // Player token class var PlayerToken = Container.expand(function () { var self = Container.call(this); var token = self.attachAsset('playerToken', { width: 80, height: 80, color: 0xffa500, anchorX: 0.5, anchorY: 0.5 }); return self; }); // Property class: represents a property on the board var Property = Container.expand(function () { var self = Container.call(this); // Attach a box asset for the property var propBox = self.attachAsset('propertyBox', { width: 180, height: 180, color: self.color || 0xcccccc, anchorX: 0.5, anchorY: 0.5 }); // Property name text self.nameText = new Text2(self.name || '', { size: 36, fill: 0x222222 }); self.nameText.anchor.set(0.5, 0.5); self.nameText.x = 0; self.nameText.y = -40; self.addChild(self.nameText); // Price text self.priceText = new Text2('', { size: 32, fill: 0x444444 }); self.priceText.anchor.set(0.5, 0.5); self.priceText.x = 0; self.priceText.y = 40; self.addChild(self.priceText); // Owner indicator self.ownerIndicator = self.attachAsset('ownerCircle', { width: 40, height: 40, color: 0x00bfff, anchorX: 0.5, anchorY: 0.5, x: 0, y: 0 }); self.ownerIndicator.visible = false; self.addChild(self.ownerIndicator); // Set property info self.setInfo = function (info) { self.name = info.name; self.price = info.price; self.rent = info.rent; self.color = info.color; self.index = info.index; self.owner = null; self.upgradeLevel = 0; self.maxUpgrade = info.maxUpgrade || 3; self.nameText.setText(self.name); self.priceText.setText('$' + self.price); propBox.tint = self.color; self.ownerIndicator.visible = false; }; // Show owner self.setOwner = function (owner) { self.owner = owner; self.ownerIndicator.visible = !!owner; self.ownerIndicator.tint = owner ? 0x00bfff : 0xffffff; }; // Show upgrade level self.setUpgrade = function (level) { self.upgradeLevel = level; // Optionally, visually indicate upgrade (not implemented in MVP) }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xf5f5dc }); /**** * Game Code ****/ // --- Board Setup --- var BOARD_SIZE = 12; // 12 spaces (simplified) var BOARD_RADIUS = 800; // px, for circular layout var BOARD_CENTER_X = 2048 / 2; var BOARD_CENTER_Y = 2732 / 2 + 100; var PROPERTY_COLORS = [0x4fc3f7, 0x81c784, 0xffb74d, 0xe57373, 0xba68c8, 0xa1887f]; // Board data: name, price, rent, color, maxUpgrade var boardData = [{ name: "GO", price: 0, rent: 0, color: 0xffffff, type: "go" }, { name: "Blue Ave", price: 100, rent: 20, color: PROPERTY_COLORS[0] }, { name: "Chance", price: 0, rent: 0, color: 0xfff176, type: "chance" }, { name: "Green St", price: 120, rent: 24, color: PROPERTY_COLORS[1] }, { name: "Tax", price: 0, rent: 0, color: 0xeeeeee, type: "tax" }, { name: "Orange Rd", price: 140, rent: 28, color: PROPERTY_COLORS[2] }, { name: "Jail", price: 0, rent: 0, color: 0x888888, type: "jail" }, { name: "Red Blvd", price: 160, rent: 32, color: PROPERTY_COLORS[3] }, { name: "Chance", price: 0, rent: 0, color: 0xfff176, type: "chance" }, { name: "Purple Ln", price: 180, rent: 36, color: PROPERTY_COLORS[4] }, { name: "Tax", price: 0, rent: 0, color: 0xeeeeee, type: "tax" }, { name: "Brown Pl", price: 200, rent: 40, color: PROPERTY_COLORS[5] }]; // --- Game State --- var properties = []; var player = { money: 1500, position: 0, properties: [], inJail: false, jailTurns: 0 }; var turn = 1; var maxTurns = 20; var diceRolling = false; var awaitingAction = false; var chanceDeck = [{ text: "Advance to GO (Collect $200)", action: function action() { movePlayerTo(0); player.money += 200; } }, { text: "Bank error in your favor. Collect $150.", action: function action() { player.money += 150; } }, { text: "Pay school fees of $100.", action: function action() { player.money -= 100; } }, { text: "Go to Jail. Do not pass GO.", action: function action() { sendPlayerToJail(); } }, { text: "Collect $50 from every property you own.", action: function action() { player.money += player.properties.length * 50; } }, { text: "Pay property repairs: $40 per property.", action: function action() { player.money -= player.properties.length * 40; } }]; var chanceIndex = 0; // --- UI Elements --- var boardGroup = new Container(); game.addChild(boardGroup); var playerToken = new PlayerToken(); game.addChild(playerToken); var rollButton = null; var buyButton = null; var endTurnButton = null; var upgradeButton = null; var chanceCard = null; // GUI: Money, Turn, Message var moneyText = new Text2('$' + player.money, { size: 80, fill: 0x222222 }); moneyText.anchor.set(0.5, 0); LK.gui.top.addChild(moneyText); var turnText = new Text2('Turn 1/' + maxTurns, { size: 48, fill: 0x444444 }); turnText.anchor.set(0.5, 0); // Move turnText a little to the right (e.g. 120px) turnText.x = 220; LK.gui.top.addChild(turnText); var messageText = new Text2('', { size: 48, fill: 0xD84315 }); messageText.anchor.set(0.5, 0); LK.gui.bottom.addChild(messageText); // --- Board Rendering --- for (var i = 0; i < BOARD_SIZE; i++) { var angle = i / BOARD_SIZE * Math.PI * 2 - Math.PI / 2; var x = BOARD_CENTER_X + Math.cos(angle) * BOARD_RADIUS; var y = BOARD_CENTER_Y + Math.sin(angle) * BOARD_RADIUS; var prop = new Property(); var info = boardData[i]; prop.setInfo({ name: info.name, price: info.price, rent: info.rent, color: info.color, index: i, maxUpgrade: 3 }); prop.x = x; prop.y = y; prop.rotation = angle + Math.PI / 2; prop.index = i; prop.type = info.type || "property"; boardGroup.addChild(prop); properties.push(prop); } // --- Player Token Initial Position --- function updatePlayerToken() { var pos = player.position; var prop = properties[pos]; playerToken.x = prop.x; playerToken.y = prop.y; playerToken.zIndex = 100; } updatePlayerToken(); // --- UI Buttons --- function createButton(label, onClick) { var btn = new Container(); var btnBg = btn.attachAsset('buttonBg', { width: 400, height: 120, color: 0x1976d2, anchorX: 0.5, anchorY: 0.5 }); var btnText = new Text2(label, { size: 56, fill: "#fff" }); btnText.anchor.set(0.5, 0.5); btnText.x = 0; btnText.y = 0; btn.addChild(btnText); btn.down = function (x, y, obj) { if (onClick) onClick(); }; return btn; } function showRollButton() { if (rollButton) return; rollButton = createButton("Roll Dice", function () { if (!diceRolling && !awaitingAction) { rollDice(); } }); rollButton.x = 2048 / 2; rollButton.y = 2732 - 250; game.addChild(rollButton); } function hideRollButton() { if (rollButton) { rollButton.destroy(); rollButton = null; } } function showBuyButton(price, onBuy) { if (buyButton) return; buyButton = createButton("Buy ($" + price + ")", function () { if (onBuy) onBuy(); }); buyButton.x = 2048 / 2 - 250; buyButton.y = 2732 - 250; game.addChild(buyButton); } function hideBuyButton() { if (buyButton) { buyButton.destroy(); buyButton = null; } } function showEndTurnButton(onEnd) { if (endTurnButton) return; endTurnButton = createButton("End Turn", function () { if (onEnd) onEnd(); }); endTurnButton.x = 2048 / 2 + 250; endTurnButton.y = 2732 - 250; game.addChild(endTurnButton); } function hideEndTurnButton() { if (endTurnButton) { endTurnButton.destroy(); endTurnButton = null; } } function showUpgradeButton(price, onUpgrade) { if (upgradeButton) return; upgradeButton = createButton("Upgrade ($" + price + ")", function () { if (onUpgrade) onUpgrade(); }); upgradeButton.x = 2048 / 2; upgradeButton.y = 2732 - 400; game.addChild(upgradeButton); } function hideUpgradeButton() { if (upgradeButton) { upgradeButton.destroy(); upgradeButton = null; } } // --- Chance Card Display --- function showChanceCard(text, onClose) { if (chanceCard) return; chanceCard = new ChanceCard(); chanceCard.setText(text); chanceCard.x = 2048 / 2; chanceCard.y = 2732 / 2; chanceCard.down = function (x, y, obj) { hideChanceCard(); if (onClose) onClose(); }; game.addChild(chanceCard); } function hideChanceCard() { if (chanceCard) { chanceCard.destroy(); chanceCard = null; } } // --- Game Logic --- function updateUI() { moneyText.setText('$' + player.money); turnText.setText('Turn ' + turn + '/' + maxTurns); } function showMessage(msg, ms) { messageText.setText(msg); if (ms) { LK.setTimeout(function () { if (messageText.text === msg) messageText.setText(''); }, ms); } } function rollDice() { diceRolling = true; hideRollButton(); hideBuyButton(); hideEndTurnButton(); hideUpgradeButton(); showMessage("Rolling...", 800); // Simulate dice roll (1-6) var dice = 1 + Math.floor(Math.random() * 6); LK.setTimeout(function () { movePlayerBy(dice); }, 800); } function movePlayerBy(steps) { var oldPos = player.position; var newPos = (player.position + steps) % BOARD_SIZE; var passedGo = player.position + steps >= BOARD_SIZE; player.position = newPos; // Animate token movement var moveSteps = []; for (var i = 1; i <= steps; i++) { moveSteps.push((oldPos + i) % BOARD_SIZE); } var idx = 0; function moveStep() { if (idx < moveSteps.length) { var prop = properties[moveSteps[idx]]; tween(playerToken, { x: prop.x, y: prop.y }, { duration: 200, easing: tween.easeInOut, onFinish: function onFinish() { idx++; moveStep(); } }); } else { if (passedGo) { player.money += 200; showMessage("Passed GO! +$200", 1200); } LK.setTimeout(function () { landOnSpace(); }, 250); } } moveStep(); } function movePlayerTo(pos) { player.position = pos; updatePlayerToken(); landOnSpace(); } function landOnSpace() { diceRolling = false; var prop = properties[player.position]; var info = boardData[player.position]; // Special spaces if (info.type === "go") { showMessage("You landed on GO! +$200", 1200); player.money += 200; endTurn(); return; } if (info.type === "tax") { showMessage("Pay Tax: -$100", 1200); player.money -= 100; endTurn(); return; } if (info.type === "jail") { showMessage("Go to Jail!", 1200); sendPlayerToJail(); return; } if (info.type === "chance") { drawChanceCard(); return; } // Property if (!prop.owner) { if (player.money >= prop.price) { showBuyButton(prop.price, function () { buyProperty(prop); }); } showEndTurnButton(endTurn); awaitingAction = true; } else if (prop.owner === "player") { // Option to upgrade if (prop.upgradeLevel < prop.maxUpgrade && player.money >= 100) { showUpgradeButton(100, function () { upgradeProperty(prop); }); } showEndTurnButton(endTurn); awaitingAction = true; } else { // Pay rent (should not happen in single player, but for future AI) endTurn(); } updateUI(); } function buyProperty(prop) { if (player.money >= prop.price && !prop.owner) { player.money -= prop.price; prop.setOwner("player"); player.properties.push(prop.index); showMessage("Bought " + prop.name + "!", 1000); hideBuyButton(); updateUI(); } } function upgradeProperty(prop) { if (player.money >= 100 && prop.upgradeLevel < prop.maxUpgrade) { player.money -= 100; prop.setUpgrade(prop.upgradeLevel + 1); showMessage("Upgraded " + prop.name + "!", 1000); hideUpgradeButton(); updateUI(); } } function endTurn() { hideBuyButton(); hideEndTurnButton(); hideUpgradeButton(); awaitingAction = false; turn++; if (turn > maxTurns) { finishGame(); return; } if (player.money <= 0) { finishGame(); return; } updateUI(); showRollButton(); } function sendPlayerToJail() { player.inJail = true; player.jailTurns = 2; var jailPos = 6; // Jail index player.position = jailPos; updatePlayerToken(); showMessage("In Jail! Miss 2 turns.", 1500); LK.setTimeout(function () { endTurn(); }, 1200); } function drawChanceCard() { var card = chanceDeck[chanceIndex % chanceDeck.length]; chanceIndex++; showChanceCard(card.text, function () { card.action(); updatePlayerToken(); updateUI(); LK.setTimeout(function () { endTurn(); }, 600); }); } function finishGame() { hideBuyButton(); hideEndTurnButton(); hideUpgradeButton(); hideRollButton(); var totalValue = player.money; for (var i = 0; i < player.properties.length; i++) { var idx = player.properties[i]; var prop = properties[idx]; totalValue += prop.price + prop.upgradeLevel * 100; } showMessage("Game Over! Wealth: $" + totalValue, 4000); LK.setScore(totalValue); LK.showGameOver(); } // --- Game Update Loop --- game.update = function () { // Jail logic if (player.inJail && !diceRolling && !awaitingAction) { player.jailTurns--; if (player.jailTurns <= 0) { player.inJail = false; showMessage("Released from Jail!", 1000); showRollButton(); } else { showMessage("In Jail! " + player.jailTurns + " turn(s) left.", 1000); endTurn(); } } }; // --- Start Game --- updateUI(); showRollButton(); showMessage("Welcome to Monopoly Express!", 1800);
===================================================================
--- original.js
+++ change.js
@@ -263,9 +263,9 @@
fill: 0x444444
});
turnText.anchor.set(0.5, 0);
// Move turnText a little to the right (e.g. 120px)
-turnText.x = 120;
+turnText.x = 220;
LK.gui.top.addChild(turnText);
var messageText = new Text2('', {
size: 48,
fill: 0xD84315