Code edit (1 edits merged)
Please save this source code
User prompt
Car Dealer Tycoon
Initial prompt
bu oyun 2D bir araba galericiliği aynı zamandada tamirciliği simülatörü olucak. Oyun gün gün ilerleyecek ve gün içinde rastgele kişiler tarafından teklifler gelicek ve bu teklifler satılık araba teklifleri olucak. Bu tekliflerde satılan araçlar rastgele olasılıkla hasarlıda olabilir hasarsızda, aracın kmsi yüksekte olabilir düşükte. Hasarlı olan ve hasar oranı yüksek olan araçlar ve kmsi yükselen araçların değerleri azalır. Bize gelicek olan bu tekliflerde müşteriler araç hakkında doğruyuda söyleyebilir yalanda söyleyebilir. Bunu öğrenebilmek için satın almadan önce bir miktar para vererek ekspertiz yaptırabiliriz. ekspertiz araç hakkındaki doğru bilgileri söyler. Tekliflerde ufak bir pazarlık payıda olmalı. Alınan araç hasarlı ise araçlar tamirciye verilerek bir miktar para ödenerek araç bir süre tamircide kalır ve tamirciden çıktığında araç hasarsıza döner. Daha sonra ise isteğe bağlı bu araçları satacağız. Her aracın ortalama olarak belirli bir fiyatiı olmalı. Bu fiyatın üstündeki araçları alıcak müşteri çıkmamalı ya da aracın ortalama fiyatını teklif etmeli. Benim başlangıçta bir miktar param olucak ve bu parayla gelen tekliflere göre araçlar alacağım. oyunun dengesi için bu fiyatlar dengeli olmalı ve gün içinde sayısı rastgele değişicek şekilde araç teklifleri ve müşteriler gelmeli.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Button = Container.expand(function (text, color, width, height) { var self = Container.call(this); var buttonGraphics = self.attachAsset('buyButton', { anchorX: 0.5, anchorY: 0.5, width: width || 200, height: height || 80 }); buttonGraphics.tint = color || 0x27ae60; var buttonText = new Text2(text, { size: 20, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); buttonText.x = 0; buttonText.y = 0; self.addChild(buttonText); self.down = function (x, y, obj) { buttonGraphics.scaleX = 0.9; buttonGraphics.scaleY = 0.9; }; self.up = function (x, y, obj) { buttonGraphics.scaleX = 1.0; buttonGraphics.scaleY = 1.0; }; return self; }); var Vehicle = Container.expand(function (carData) { var self = Container.call(this); self.carData = carData; self.inspected = false; self.repaired = false; var carGraphics = self.attachAsset(carData.condition === 'damaged' ? 'carDamaged' : 'carOffer', { anchorX: 0.5, anchorY: 0.5 }); var carText = new Text2(carData.make + ' ' + carData.model, { size: 24, fill: 0xFFFFFF }); carText.anchor.set(0.5, 0.5); carText.x = 0; carText.y = -60; self.addChild(carText); var priceText = new Text2('$' + carData.price.toLocaleString(), { size: 28, fill: 0xFFFF00 }); priceText.anchor.set(0.5, 0.5); priceText.x = 0; priceText.y = -30; self.addChild(priceText); var conditionText = new Text2(carData.condition + ' - ' + carData.mileage + 'k miles', { size: 20, fill: 0xFFFFFF }); conditionText.anchor.set(0.5, 0.5); conditionText.x = 0; conditionText.y = 10; self.addChild(conditionText); self.updateDisplay = function () { carGraphics.visible = false; self.removeChild(carGraphics); var assetType = 'carOffer'; if (self.carData.condition === 'damaged') { assetType = 'carDamaged'; } else if (self.repaired) { assetType = 'carRepaired'; } carGraphics = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0.5 }); priceText.setText('$' + self.carData.price.toLocaleString()); conditionText.setText(self.carData.condition + ' - ' + self.carData.mileage + 'k miles'); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x34495e }); /**** * Game Code ****/ // Game state variables var playerMoney = storage.playerMoney || 50000; var currentDay = storage.currentDay || 1; var ownedVehicles = storage.ownedVehicles || []; var dailyOffers = []; var selectedVehicle = null; var gameState = 'daily_offers'; // 'daily_offers', 'vehicle_selected', 'owned_vehicles' // Car data arrays var carMakes = ['Toyota', 'Honda', 'Ford', 'Chevrolet', 'BMW', 'Mercedes', 'Audi', 'Nissan', 'Volkswagen', 'Hyundai']; var carModels = ['Sedan', 'SUV', 'Coupe', 'Hatchback', 'Wagon', 'Convertible', 'Truck', 'Compact']; var conditions = ['excellent', 'good', 'fair', 'poor', 'damaged']; // UI Elements var moneyText = new Text2('Money: $' + playerMoney.toLocaleString(), { size: 40, fill: 0x2ECC71 }); moneyText.anchor.set(0, 0); moneyText.x = 120; moneyText.y = 50; LK.gui.topLeft.addChild(moneyText); var dayText = new Text2('Day ' + currentDay, { size: 40, fill: 0xFFFFFF }); dayText.anchor.set(1, 0); dayText.x = 0; dayText.y = 50; LK.gui.topRight.addChild(dayText); var titleText = new Text2('Car Dealer Tycoon', { size: 60, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0); titleText.x = 2048 / 2; titleText.y = 150; game.addChild(titleText); var stateText = new Text2('Daily Vehicle Offers', { size: 40, fill: 0xECF0F1 }); stateText.anchor.set(0.5, 0); stateText.x = 2048 / 2; stateText.y = 250; game.addChild(stateText); // Action buttons var inspectButton = game.addChild(new Button('Inspect ($500)', 0xf39c12)); inspectButton.x = 2048 / 2 - 320; inspectButton.y = 2200; inspectButton.visible = false; var buyButton = game.addChild(new Button('Buy Vehicle', 0x27ae60)); buyButton.x = 2048 / 2 - 110; buyButton.y = 2200; buyButton.visible = false; var negotiateButton = game.addChild(new Button('Negotiate', 0x34495e)); negotiateButton.x = 2048 / 2 + 100; negotiateButton.y = 2200; negotiateButton.visible = false; var repairButton = game.addChild(new Button('Repair', 0xe67e22)); repairButton.x = 2048 / 2 - 110; repairButton.y = 2200; repairButton.visible = false; var sellButton = game.addChild(new Button('Sell', 0x8e44ad)); sellButton.x = 2048 / 2 + 100; sellButton.y = 2200; sellButton.visible = false; var nextDayButton = game.addChild(new Button('Next Day', 0x2c3e50, 300, 100)); nextDayButton.x = 2048 / 2; nextDayButton.y = 2400; var viewOwnedButton = game.addChild(new Button('View Owned Cars', 0x95a5a6)); viewOwnedButton.x = 2048 / 2; viewOwnedButton.y = 2300; // Vehicle display containers var vehicleContainer = new Container(); vehicleContainer.x = 2048 / 2; vehicleContainer.y = 800; game.addChild(vehicleContainer); var infoText = new Text2('', { size: 24, fill: 0xFFFFFF }); infoText.anchor.set(0.5, 0.5); infoText.x = 2048 / 2; infoText.y = 1800; game.addChild(infoText); // Generate random vehicle data function generateRandomVehicle() { var make = carMakes[Math.floor(Math.random() * carMakes.length)]; var model = carModels[Math.floor(Math.random() * carModels.length)]; var condition = conditions[Math.floor(Math.random() * conditions.length)]; var mileage = Math.floor(Math.random() * 200) + 20; var basePrice = Math.floor(Math.random() * 40000) + 10000; // Sellers may lie about condition var actualCondition = condition; var sellerLying = Math.random() < 0.3; if (sellerLying && condition !== 'damaged') { var betterConditions = conditions.slice(0, conditions.indexOf(condition)); if (betterConditions.length > 0) { condition = betterConditions[Math.floor(Math.random() * betterConditions.length)]; } } // Adjust price based on condition var priceMultiplier = 1; switch (actualCondition) { case 'excellent': priceMultiplier = 1.2; break; case 'good': priceMultiplier = 1.0; break; case 'fair': priceMultiplier = 0.8; break; case 'poor': priceMultiplier = 0.6; break; case 'damaged': priceMultiplier = 0.4; break; } var price = Math.floor(basePrice * priceMultiplier * (1 - mileage / 300)); return { make: make, model: model, condition: condition, actualCondition: actualCondition, mileage: mileage, price: price, marketValue: Math.floor(price * 1.5), sellerLying: sellerLying, id: Math.random().toString(36).substr(2, 9) }; } // Generate daily offers function generateDailyOffers() { dailyOffers = []; var numOffers = Math.floor(Math.random() * 3) + 2; for (var i = 0; i < numOffers; i++) { dailyOffers.push(generateRandomVehicle()); } } // Display vehicles function displayVehicles(vehicles) { vehicleContainer.removeChildren(); for (var i = 0; i < vehicles.length; i++) { var vehicle = new Vehicle(vehicles[i]); vehicle.x = i % 2 * 500 - 250; vehicle.y = Math.floor(i / 2) * 300; vehicleContainer.addChild(vehicle); vehicle.vehicleData = vehicles[i]; vehicle.down = function (x, y, obj) { selectedVehicle = obj.vehicleData; updateUI(); }; } } // Update UI based on game state function updateUI() { inspectButton.visible = false; buyButton.visible = false; negotiateButton.visible = false; repairButton.visible = false; sellButton.visible = false; if (gameState === 'daily_offers' && selectedVehicle) { inspectButton.visible = true; buyButton.visible = true; negotiateButton.visible = true; infoText.setText('Selected: ' + selectedVehicle.make + ' ' + selectedVehicle.model + '\nCondition: ' + selectedVehicle.condition + '\nMileage: ' + selectedVehicle.mileage + 'k miles' + '\nPrice: $' + selectedVehicle.price.toLocaleString()); } else if (gameState === 'owned_vehicles' && selectedVehicle) { if (selectedVehicle.actualCondition === 'damaged' && !selectedVehicle.repaired) { repairButton.visible = true; } else { sellButton.visible = true; } infoText.setText('Owned: ' + selectedVehicle.make + ' ' + selectedVehicle.model + '\nCondition: ' + selectedVehicle.actualCondition + '\nMileage: ' + selectedVehicle.mileage + 'k miles' + '\nMarket Value: $' + selectedVehicle.marketValue.toLocaleString()); } else { infoText.setText('Select a vehicle to view options'); } } // Button event handlers inspectButton.up = function (x, y, obj) { if (selectedVehicle && playerMoney >= 500) { playerMoney -= 500; selectedVehicle.inspected = true; selectedVehicle.condition = selectedVehicle.actualCondition; LK.getSound('inspect').play(); updateMoneyDisplay(); displayVehicles(dailyOffers); updateUI(); if (selectedVehicle.sellerLying) { infoText.setText('Inspection revealed the seller was lying!\nActual condition: ' + selectedVehicle.actualCondition); } else { infoText.setText('Inspection confirmed seller was honest.'); } } }; buyButton.up = function (x, y, obj) { if (selectedVehicle && playerMoney >= selectedVehicle.price) { playerMoney -= selectedVehicle.price; selectedVehicle.actualCondition = selectedVehicle.actualCondition; ownedVehicles.push(selectedVehicle); // Remove from daily offers for (var i = 0; i < dailyOffers.length; i++) { if (dailyOffers[i].id === selectedVehicle.id) { dailyOffers.splice(i, 1); break; } } LK.getSound('purchase').play(); selectedVehicle = null; updateMoneyDisplay(); displayVehicles(dailyOffers); updateUI(); saveGame(); } }; negotiateButton.up = function (x, y, obj) { if (selectedVehicle) { var reduction = Math.floor(selectedVehicle.price * (Math.random() * 0.2 + 0.05)); selectedVehicle.price -= reduction; displayVehicles(dailyOffers); updateUI(); infoText.setText('Negotiated $' + reduction.toLocaleString() + ' off the price!'); } }; repairButton.up = function (x, y, obj) { if (selectedVehicle && playerMoney >= 3000) { playerMoney -= 3000; selectedVehicle.repaired = true; selectedVehicle.actualCondition = 'good'; selectedVehicle.marketValue = Math.floor(selectedVehicle.marketValue * 1.5); LK.getSound('repair').play(); updateMoneyDisplay(); displayOwnedVehicles(); updateUI(); saveGame(); } }; sellButton.up = function (x, y, obj) { if (selectedVehicle) { var salePrice = Math.floor(selectedVehicle.marketValue * (Math.random() * 0.3 + 0.8)); playerMoney += salePrice; // Remove from owned vehicles for (var i = 0; i < ownedVehicles.length; i++) { if (ownedVehicles[i].id === selectedVehicle.id) { ownedVehicles.splice(i, 1); break; } } LK.getSound('sale').play(); selectedVehicle = null; updateMoneyDisplay(); displayOwnedVehicles(); updateUI(); saveGame(); infoText.setText('Sold for $' + salePrice.toLocaleString() + '!'); } }; nextDayButton.up = function (x, y, obj) { currentDay++; selectedVehicle = null; generateDailyOffers(); gameState = 'daily_offers'; stateText.setText('Daily Vehicle Offers'); dayText.setText('Day ' + currentDay); displayVehicles(dailyOffers); updateUI(); saveGame(); }; viewOwnedButton.up = function (x, y, obj) { if (gameState === 'daily_offers') { gameState = 'owned_vehicles'; stateText.setText('Owned Vehicles'); displayOwnedVehicles(); } else { gameState = 'daily_offers'; stateText.setText('Daily Vehicle Offers'); displayVehicles(dailyOffers); } selectedVehicle = null; updateUI(); }; function displayOwnedVehicles() { vehicleContainer.removeChildren(); for (var i = 0; i < ownedVehicles.length; i++) { var vehicle = new Vehicle(ownedVehicles[i]); if (ownedVehicles[i].repaired) { vehicle.repaired = true; vehicle.updateDisplay(); } vehicle.x = i % 2 * 500 - 250; vehicle.y = Math.floor(i / 2) * 300; vehicleContainer.addChild(vehicle); vehicle.vehicleData = ownedVehicles[i]; vehicle.down = function (x, y, obj) { selectedVehicle = obj.vehicleData; updateUI(); }; } } function updateMoneyDisplay() { moneyText.setText('Money: $' + playerMoney.toLocaleString()); } function saveGame() { storage.playerMoney = playerMoney; storage.currentDay = currentDay; storage.ownedVehicles = ownedVehicles; } // Initialize game generateDailyOffers(); displayVehicles(dailyOffers); updateUI(); // Game update loop game.update = function () { // Check for game over condition if (playerMoney < 0) { LK.showGameOver(); } // Check for winning condition if (playerMoney >= 500000) { LK.showYouWin(); } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,420 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var Button = Container.expand(function (text, color, width, height) {
+ var self = Container.call(this);
+ var buttonGraphics = self.attachAsset('buyButton', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ width: width || 200,
+ height: height || 80
+ });
+ buttonGraphics.tint = color || 0x27ae60;
+ var buttonText = new Text2(text, {
+ size: 20,
+ fill: 0xFFFFFF
+ });
+ buttonText.anchor.set(0.5, 0.5);
+ buttonText.x = 0;
+ buttonText.y = 0;
+ self.addChild(buttonText);
+ self.down = function (x, y, obj) {
+ buttonGraphics.scaleX = 0.9;
+ buttonGraphics.scaleY = 0.9;
+ };
+ self.up = function (x, y, obj) {
+ buttonGraphics.scaleX = 1.0;
+ buttonGraphics.scaleY = 1.0;
+ };
+ return self;
+});
+var Vehicle = Container.expand(function (carData) {
+ var self = Container.call(this);
+ self.carData = carData;
+ self.inspected = false;
+ self.repaired = false;
+ var carGraphics = self.attachAsset(carData.condition === 'damaged' ? 'carDamaged' : 'carOffer', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var carText = new Text2(carData.make + ' ' + carData.model, {
+ size: 24,
+ fill: 0xFFFFFF
+ });
+ carText.anchor.set(0.5, 0.5);
+ carText.x = 0;
+ carText.y = -60;
+ self.addChild(carText);
+ var priceText = new Text2('$' + carData.price.toLocaleString(), {
+ size: 28,
+ fill: 0xFFFF00
+ });
+ priceText.anchor.set(0.5, 0.5);
+ priceText.x = 0;
+ priceText.y = -30;
+ self.addChild(priceText);
+ var conditionText = new Text2(carData.condition + ' - ' + carData.mileage + 'k miles', {
+ size: 20,
+ fill: 0xFFFFFF
+ });
+ conditionText.anchor.set(0.5, 0.5);
+ conditionText.x = 0;
+ conditionText.y = 10;
+ self.addChild(conditionText);
+ self.updateDisplay = function () {
+ carGraphics.visible = false;
+ self.removeChild(carGraphics);
+ var assetType = 'carOffer';
+ if (self.carData.condition === 'damaged') {
+ assetType = 'carDamaged';
+ } else if (self.repaired) {
+ assetType = 'carRepaired';
+ }
+ carGraphics = self.attachAsset(assetType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ priceText.setText('$' + self.carData.price.toLocaleString());
+ conditionText.setText(self.carData.condition + ' - ' + self.carData.mileage + 'k miles');
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x34495e
+});
+
+/****
+* Game Code
+****/
+// Game state variables
+var playerMoney = storage.playerMoney || 50000;
+var currentDay = storage.currentDay || 1;
+var ownedVehicles = storage.ownedVehicles || [];
+var dailyOffers = [];
+var selectedVehicle = null;
+var gameState = 'daily_offers'; // 'daily_offers', 'vehicle_selected', 'owned_vehicles'
+// Car data arrays
+var carMakes = ['Toyota', 'Honda', 'Ford', 'Chevrolet', 'BMW', 'Mercedes', 'Audi', 'Nissan', 'Volkswagen', 'Hyundai'];
+var carModels = ['Sedan', 'SUV', 'Coupe', 'Hatchback', 'Wagon', 'Convertible', 'Truck', 'Compact'];
+var conditions = ['excellent', 'good', 'fair', 'poor', 'damaged'];
+// UI Elements
+var moneyText = new Text2('Money: $' + playerMoney.toLocaleString(), {
+ size: 40,
+ fill: 0x2ECC71
+});
+moneyText.anchor.set(0, 0);
+moneyText.x = 120;
+moneyText.y = 50;
+LK.gui.topLeft.addChild(moneyText);
+var dayText = new Text2('Day ' + currentDay, {
+ size: 40,
+ fill: 0xFFFFFF
+});
+dayText.anchor.set(1, 0);
+dayText.x = 0;
+dayText.y = 50;
+LK.gui.topRight.addChild(dayText);
+var titleText = new Text2('Car Dealer Tycoon', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+titleText.anchor.set(0.5, 0);
+titleText.x = 2048 / 2;
+titleText.y = 150;
+game.addChild(titleText);
+var stateText = new Text2('Daily Vehicle Offers', {
+ size: 40,
+ fill: 0xECF0F1
+});
+stateText.anchor.set(0.5, 0);
+stateText.x = 2048 / 2;
+stateText.y = 250;
+game.addChild(stateText);
+// Action buttons
+var inspectButton = game.addChild(new Button('Inspect ($500)', 0xf39c12));
+inspectButton.x = 2048 / 2 - 320;
+inspectButton.y = 2200;
+inspectButton.visible = false;
+var buyButton = game.addChild(new Button('Buy Vehicle', 0x27ae60));
+buyButton.x = 2048 / 2 - 110;
+buyButton.y = 2200;
+buyButton.visible = false;
+var negotiateButton = game.addChild(new Button('Negotiate', 0x34495e));
+negotiateButton.x = 2048 / 2 + 100;
+negotiateButton.y = 2200;
+negotiateButton.visible = false;
+var repairButton = game.addChild(new Button('Repair', 0xe67e22));
+repairButton.x = 2048 / 2 - 110;
+repairButton.y = 2200;
+repairButton.visible = false;
+var sellButton = game.addChild(new Button('Sell', 0x8e44ad));
+sellButton.x = 2048 / 2 + 100;
+sellButton.y = 2200;
+sellButton.visible = false;
+var nextDayButton = game.addChild(new Button('Next Day', 0x2c3e50, 300, 100));
+nextDayButton.x = 2048 / 2;
+nextDayButton.y = 2400;
+var viewOwnedButton = game.addChild(new Button('View Owned Cars', 0x95a5a6));
+viewOwnedButton.x = 2048 / 2;
+viewOwnedButton.y = 2300;
+// Vehicle display containers
+var vehicleContainer = new Container();
+vehicleContainer.x = 2048 / 2;
+vehicleContainer.y = 800;
+game.addChild(vehicleContainer);
+var infoText = new Text2('', {
+ size: 24,
+ fill: 0xFFFFFF
+});
+infoText.anchor.set(0.5, 0.5);
+infoText.x = 2048 / 2;
+infoText.y = 1800;
+game.addChild(infoText);
+// Generate random vehicle data
+function generateRandomVehicle() {
+ var make = carMakes[Math.floor(Math.random() * carMakes.length)];
+ var model = carModels[Math.floor(Math.random() * carModels.length)];
+ var condition = conditions[Math.floor(Math.random() * conditions.length)];
+ var mileage = Math.floor(Math.random() * 200) + 20;
+ var basePrice = Math.floor(Math.random() * 40000) + 10000;
+ // Sellers may lie about condition
+ var actualCondition = condition;
+ var sellerLying = Math.random() < 0.3;
+ if (sellerLying && condition !== 'damaged') {
+ var betterConditions = conditions.slice(0, conditions.indexOf(condition));
+ if (betterConditions.length > 0) {
+ condition = betterConditions[Math.floor(Math.random() * betterConditions.length)];
+ }
+ }
+ // Adjust price based on condition
+ var priceMultiplier = 1;
+ switch (actualCondition) {
+ case 'excellent':
+ priceMultiplier = 1.2;
+ break;
+ case 'good':
+ priceMultiplier = 1.0;
+ break;
+ case 'fair':
+ priceMultiplier = 0.8;
+ break;
+ case 'poor':
+ priceMultiplier = 0.6;
+ break;
+ case 'damaged':
+ priceMultiplier = 0.4;
+ break;
+ }
+ var price = Math.floor(basePrice * priceMultiplier * (1 - mileage / 300));
+ return {
+ make: make,
+ model: model,
+ condition: condition,
+ actualCondition: actualCondition,
+ mileage: mileage,
+ price: price,
+ marketValue: Math.floor(price * 1.5),
+ sellerLying: sellerLying,
+ id: Math.random().toString(36).substr(2, 9)
+ };
+}
+// Generate daily offers
+function generateDailyOffers() {
+ dailyOffers = [];
+ var numOffers = Math.floor(Math.random() * 3) + 2;
+ for (var i = 0; i < numOffers; i++) {
+ dailyOffers.push(generateRandomVehicle());
+ }
+}
+// Display vehicles
+function displayVehicles(vehicles) {
+ vehicleContainer.removeChildren();
+ for (var i = 0; i < vehicles.length; i++) {
+ var vehicle = new Vehicle(vehicles[i]);
+ vehicle.x = i % 2 * 500 - 250;
+ vehicle.y = Math.floor(i / 2) * 300;
+ vehicleContainer.addChild(vehicle);
+ vehicle.vehicleData = vehicles[i];
+ vehicle.down = function (x, y, obj) {
+ selectedVehicle = obj.vehicleData;
+ updateUI();
+ };
+ }
+}
+// Update UI based on game state
+function updateUI() {
+ inspectButton.visible = false;
+ buyButton.visible = false;
+ negotiateButton.visible = false;
+ repairButton.visible = false;
+ sellButton.visible = false;
+ if (gameState === 'daily_offers' && selectedVehicle) {
+ inspectButton.visible = true;
+ buyButton.visible = true;
+ negotiateButton.visible = true;
+ infoText.setText('Selected: ' + selectedVehicle.make + ' ' + selectedVehicle.model + '\nCondition: ' + selectedVehicle.condition + '\nMileage: ' + selectedVehicle.mileage + 'k miles' + '\nPrice: $' + selectedVehicle.price.toLocaleString());
+ } else if (gameState === 'owned_vehicles' && selectedVehicle) {
+ if (selectedVehicle.actualCondition === 'damaged' && !selectedVehicle.repaired) {
+ repairButton.visible = true;
+ } else {
+ sellButton.visible = true;
+ }
+ infoText.setText('Owned: ' + selectedVehicle.make + ' ' + selectedVehicle.model + '\nCondition: ' + selectedVehicle.actualCondition + '\nMileage: ' + selectedVehicle.mileage + 'k miles' + '\nMarket Value: $' + selectedVehicle.marketValue.toLocaleString());
+ } else {
+ infoText.setText('Select a vehicle to view options');
+ }
+}
+// Button event handlers
+inspectButton.up = function (x, y, obj) {
+ if (selectedVehicle && playerMoney >= 500) {
+ playerMoney -= 500;
+ selectedVehicle.inspected = true;
+ selectedVehicle.condition = selectedVehicle.actualCondition;
+ LK.getSound('inspect').play();
+ updateMoneyDisplay();
+ displayVehicles(dailyOffers);
+ updateUI();
+ if (selectedVehicle.sellerLying) {
+ infoText.setText('Inspection revealed the seller was lying!\nActual condition: ' + selectedVehicle.actualCondition);
+ } else {
+ infoText.setText('Inspection confirmed seller was honest.');
+ }
+ }
+};
+buyButton.up = function (x, y, obj) {
+ if (selectedVehicle && playerMoney >= selectedVehicle.price) {
+ playerMoney -= selectedVehicle.price;
+ selectedVehicle.actualCondition = selectedVehicle.actualCondition;
+ ownedVehicles.push(selectedVehicle);
+ // Remove from daily offers
+ for (var i = 0; i < dailyOffers.length; i++) {
+ if (dailyOffers[i].id === selectedVehicle.id) {
+ dailyOffers.splice(i, 1);
+ break;
+ }
+ }
+ LK.getSound('purchase').play();
+ selectedVehicle = null;
+ updateMoneyDisplay();
+ displayVehicles(dailyOffers);
+ updateUI();
+ saveGame();
+ }
+};
+negotiateButton.up = function (x, y, obj) {
+ if (selectedVehicle) {
+ var reduction = Math.floor(selectedVehicle.price * (Math.random() * 0.2 + 0.05));
+ selectedVehicle.price -= reduction;
+ displayVehicles(dailyOffers);
+ updateUI();
+ infoText.setText('Negotiated $' + reduction.toLocaleString() + ' off the price!');
+ }
+};
+repairButton.up = function (x, y, obj) {
+ if (selectedVehicle && playerMoney >= 3000) {
+ playerMoney -= 3000;
+ selectedVehicle.repaired = true;
+ selectedVehicle.actualCondition = 'good';
+ selectedVehicle.marketValue = Math.floor(selectedVehicle.marketValue * 1.5);
+ LK.getSound('repair').play();
+ updateMoneyDisplay();
+ displayOwnedVehicles();
+ updateUI();
+ saveGame();
+ }
+};
+sellButton.up = function (x, y, obj) {
+ if (selectedVehicle) {
+ var salePrice = Math.floor(selectedVehicle.marketValue * (Math.random() * 0.3 + 0.8));
+ playerMoney += salePrice;
+ // Remove from owned vehicles
+ for (var i = 0; i < ownedVehicles.length; i++) {
+ if (ownedVehicles[i].id === selectedVehicle.id) {
+ ownedVehicles.splice(i, 1);
+ break;
+ }
+ }
+ LK.getSound('sale').play();
+ selectedVehicle = null;
+ updateMoneyDisplay();
+ displayOwnedVehicles();
+ updateUI();
+ saveGame();
+ infoText.setText('Sold for $' + salePrice.toLocaleString() + '!');
+ }
+};
+nextDayButton.up = function (x, y, obj) {
+ currentDay++;
+ selectedVehicle = null;
+ generateDailyOffers();
+ gameState = 'daily_offers';
+ stateText.setText('Daily Vehicle Offers');
+ dayText.setText('Day ' + currentDay);
+ displayVehicles(dailyOffers);
+ updateUI();
+ saveGame();
+};
+viewOwnedButton.up = function (x, y, obj) {
+ if (gameState === 'daily_offers') {
+ gameState = 'owned_vehicles';
+ stateText.setText('Owned Vehicles');
+ displayOwnedVehicles();
+ } else {
+ gameState = 'daily_offers';
+ stateText.setText('Daily Vehicle Offers');
+ displayVehicles(dailyOffers);
+ }
+ selectedVehicle = null;
+ updateUI();
+};
+function displayOwnedVehicles() {
+ vehicleContainer.removeChildren();
+ for (var i = 0; i < ownedVehicles.length; i++) {
+ var vehicle = new Vehicle(ownedVehicles[i]);
+ if (ownedVehicles[i].repaired) {
+ vehicle.repaired = true;
+ vehicle.updateDisplay();
+ }
+ vehicle.x = i % 2 * 500 - 250;
+ vehicle.y = Math.floor(i / 2) * 300;
+ vehicleContainer.addChild(vehicle);
+ vehicle.vehicleData = ownedVehicles[i];
+ vehicle.down = function (x, y, obj) {
+ selectedVehicle = obj.vehicleData;
+ updateUI();
+ };
+ }
+}
+function updateMoneyDisplay() {
+ moneyText.setText('Money: $' + playerMoney.toLocaleString());
+}
+function saveGame() {
+ storage.playerMoney = playerMoney;
+ storage.currentDay = currentDay;
+ storage.ownedVehicles = ownedVehicles;
+}
+// Initialize game
+generateDailyOffers();
+displayVehicles(dailyOffers);
+updateUI();
+// Game update loop
+game.update = function () {
+ // Check for game over condition
+ if (playerMoney < 0) {
+ LK.showGameOver();
+ }
+ // Check for winning condition
+ if (playerMoney >= 500000) {
+ LK.showYouWin();
+ }
+};
\ No newline at end of file