/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Car = Container.expand(function (carType, price) { var self = Container.call(this); self.carType = carType || 'car'; self.price = price || 1000; self.speed = 0; self.maxSpeed = 8; self.acceleration = 0.3; self.rotation = 0; self.isPlayer = false; var carGraphics = self.attachAsset(self.carType, { anchorX: 0.5, anchorY: 0.5 }); self.accelerate = function () { if (self.speed < self.maxSpeed) { self.speed += self.acceleration; } }; self.brake = function () { if (self.speed > 0) { self.speed -= self.acceleration * 2; } if (self.speed < 0) { self.speed = 0; } }; self.drift = function () { if (self.speed > 2) { LK.getSound('drift').play(); LK.effects.flashObject(self, 0xffff00, 500); } }; self.update = function () { if (self.isPlayer) { var moveX = Math.cos(self.rotation) * self.speed; var moveY = Math.sin(self.rotation) * self.speed; self.x += moveX; self.y += moveY; // Keep car on screen if (self.x < 60) { self.x = 60; } if (self.x > 1988) { self.x = 1988; } if (self.y < 60) { self.y = 60; } if (self.y > 2672) { self.y = 2672; } // Natural slowdown if (self.speed > 0) { self.speed -= 0.05; } if (self.speed < 0) { self.speed = 0; } } }; return self; }); var CarDealer = Container.expand(function () { var self = Container.call(this); self.cars = [{ type: 'bmw', name: 'BMW M3', price: 5000 }, { type: 'mercedes', name: 'Mercedes AMG', price: 7000 }, { type: 'audi', name: 'Audi R8', price: 9000 }, { type: 'car', name: 'Basic Car', price: 1000 }]; var dealerBg = self.attachAsset('dealership', { anchorX: 0.5, anchorY: 0.5 }); var titleText = new Text2('Car Dealership', { size: 60, fill: '#ffffff' }); titleText.anchor.set(0.5, 0); titleText.x = 0; titleText.y = -280; self.addChild(titleText); self.showCars = function () { for (var i = 0; i < self.cars.length; i++) { var carData = self.cars[i]; var carSlot = new Container(); var slotBg = carSlot.attachAsset('carSlot', { anchorX: 0.5, anchorY: 0.5 }); var carPreview = carSlot.attachAsset(carData.type, { anchorX: 0.5, anchorY: 0.5, scaleX: 0.7, scaleY: 0.7 }); var priceText = new Text2('$' + carData.price, { size: 30, fill: '#00ff00' }); priceText.anchor.set(0.5, 0); priceText.y = 35; carSlot.addChild(priceText); carSlot.x = i % 2 * 200 - 100; carSlot.y = Math.floor(i / 2) * 120 - 100; carSlot.carData = carData; carSlot.down = function (x, y, obj) { buyCar(this.carData); }; self.addChild(carSlot); } }; return self; }); var Server = Container.expand(function (name, hasPassword) { var self = Container.call(this); self.serverName = name || 'My Server'; self.hasPassword = hasPassword || false; self.players = []; var serverBg = self.attachAsset('serverButton', { anchorX: 0, anchorY: 0 }); var nameText = new Text2(self.serverName, { size: 40, fill: '#ffffff' }); nameText.anchor.set(0.5, 0.5); nameText.x = 150; nameText.y = 40; self.addChild(nameText); self.down = function (x, y, obj) { joinServer(self); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a1a }); /**** * Game Code ****/ // Game state var gameState = 'menu'; // menu, server, garage, dealership, driving var currentServer = null; var playerCar = null; var ownedCars = storage.ownedCars || []; var playerMoney = storage.playerMoney || 10000; var servers = []; // Initialize storage defaults if (!storage.ownedCars) { storage.ownedCars = [{ type: 'car', name: 'Starter Car' }]; ownedCars = storage.ownedCars; } // UI Elements var moneyDisplay = new Text2('Money: $' + playerMoney, { size: 50, fill: '#00ff00' }); moneyDisplay.anchor.set(1, 0); LK.gui.topRight.addChild(moneyDisplay); var stateDisplay = new Text2('Main Menu', { size: 40, fill: '#ffffff' }); stateDisplay.anchor.set(0.5, 0); LK.gui.top.addChild(stateDisplay); // Game elements var road = game.addChild(LK.getAsset('road', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366 })); var track = game.addChild(LK.getAsset('track', { anchorX: 0.5, anchorY: 0.5, x: 1600, y: 500 })); // Menu buttons var createServerBtn = game.addChild(LK.getAsset('serverButton', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 800 })); var createServerText = new Text2('Create Server', { size: 40, fill: '#ffffff' }); createServerText.anchor.set(0.5, 0.5); createServerBtn.addChild(createServerText); var garageBtn = game.addChild(LK.getAsset('serverButton', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 920 })); var garageText = new Text2('Garage', { size: 40, fill: '#ffffff' }); garageText.anchor.set(0.5, 0.5); garageBtn.addChild(garageText); var dealershipBtn = game.addChild(LK.getAsset('serverButton', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1040 })); var dealershipText = new Text2('Car Dealership', { size: 40, fill: '#ffffff' }); dealershipText.anchor.set(0.5, 0.5); dealershipBtn.addChild(dealershipText); // Initialize some demo servers for (var i = 0; i < 3; i++) { var server = new Server('Server ' + (i + 1), i === 0); server.x = 400; server.y = 600 + i * 100; servers.push(server); game.addChild(server); } var dealer = new CarDealer(); dealer.x = 1024; dealer.y = 1366; dealer.visible = false; game.addChild(dealer); // Functions function updateMoneyDisplay() { moneyDisplay.setText('Money: $' + playerMoney); storage.playerMoney = playerMoney; } function buyCar(carData) { if (playerMoney >= carData.price) { playerMoney -= carData.price; ownedCars.push(carData); storage.ownedCars = ownedCars; updateMoneyDisplay(); LK.effects.flashScreen(0x00ff00, 500); } else { LK.effects.flashScreen(0xff0000, 500); } } function showGarage() { gameState = 'garage'; stateDisplay.setText('Garage'); hideAllMenus(); for (var i = 0; i < ownedCars.length; i++) { var carData = ownedCars[i]; var garageCar = new Car(carData.type, carData.price); garageCar.x = 300 + i % 3 * 200; garageCar.y = 800 + Math.floor(i / 3) * 150; garageCar.down = function (x, y, obj) { selectCar(this); }; game.addChild(garageCar); } } function selectCar(car) { if (playerCar) { playerCar.destroy(); } playerCar = new Car(car.carType, car.price); playerCar.x = 1024; playerCar.y = 1200; playerCar.isPlayer = true; game.addChild(playerCar); gameState = 'driving'; stateDisplay.setText('Driving'); hideAllMenus(); LK.playMusic('cityTrack'); } function joinServer(server) { currentServer = server; gameState = 'server'; stateDisplay.setText('Server: ' + server.serverName); hideAllMenus(); if (!playerCar && ownedCars.length > 0) { playerCar = new Car(ownedCars[0].type, ownedCars[0].price); playerCar.x = 1024; playerCar.y = 1200; playerCar.isPlayer = true; game.addChild(playerCar); } } function hideAllMenus() { createServerBtn.visible = false; garageBtn.visible = false; dealershipBtn.visible = false; dealer.visible = false; for (var i = 0; i < servers.length; i++) { servers[i].visible = false; } } function showMainMenu() { gameState = 'menu'; stateDisplay.setText('Main Menu'); createServerBtn.visible = true; garageBtn.visible = true; dealershipBtn.visible = true; dealer.visible = false; for (var i = 0; i < servers.length; i++) { servers[i].visible = true; } // Clear garage cars var children = game.children.slice(); for (var j = 0; j < children.length; j++) { if (children[j] instanceof Car && !children[j].isPlayer) { children[j].destroy(); } } } // Event handlers createServerBtn.down = function (x, y, obj) { var newServer = new Server('My Server', false); newServer.x = 400; newServer.y = 600 + servers.length * 100; servers.push(newServer); game.addChild(newServer); joinServer(newServer); }; garageBtn.down = function (x, y, obj) { showGarage(); }; dealershipBtn.down = function (x, y, obj) { gameState = 'dealership'; stateDisplay.setText('Car Dealership'); hideAllMenus(); dealer.visible = true; dealer.showCars(); }; var isDragging = false; var dragStartX = 0; var dragStartY = 0; game.down = function (x, y, obj) { if (gameState === 'driving' && playerCar) { isDragging = true; dragStartX = x; dragStartY = y; LK.getSound('engine').play(); } else if (gameState !== 'menu' && gameState !== 'dealership') { showMainMenu(); } }; game.move = function (x, y, obj) { if (isDragging && playerCar && gameState === 'driving') { var deltaX = x - dragStartX; var deltaY = y - dragStartY; if (Math.abs(deltaX) > 20 || Math.abs(deltaY) > 20) { playerCar.rotation = Math.atan2(deltaY, deltaX); playerCar.accelerate(); // Drift detection if (Math.abs(deltaX) > 50) { playerCar.drift(); } } } }; game.up = function (x, y, obj) { if (isDragging && playerCar) { isDragging = false; playerCar.brake(); } }; game.update = function () { // Update player money earned from driving if (gameState === 'driving' && playerCar && playerCar.speed > 3) { if (LK.ticks % 180 === 0) { // Every 3 seconds at 60fps playerMoney += 10; updateMoneyDisplay(); } } // Update car rotation visual if (playerCar) { var carGraphics = playerCar.children[0]; if (carGraphics) { carGraphics.rotation = playerCar.rotation; } } }; // Start with main menu showMainMenu();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Car = Container.expand(function (carType, price) {
var self = Container.call(this);
self.carType = carType || 'car';
self.price = price || 1000;
self.speed = 0;
self.maxSpeed = 8;
self.acceleration = 0.3;
self.rotation = 0;
self.isPlayer = false;
var carGraphics = self.attachAsset(self.carType, {
anchorX: 0.5,
anchorY: 0.5
});
self.accelerate = function () {
if (self.speed < self.maxSpeed) {
self.speed += self.acceleration;
}
};
self.brake = function () {
if (self.speed > 0) {
self.speed -= self.acceleration * 2;
}
if (self.speed < 0) {
self.speed = 0;
}
};
self.drift = function () {
if (self.speed > 2) {
LK.getSound('drift').play();
LK.effects.flashObject(self, 0xffff00, 500);
}
};
self.update = function () {
if (self.isPlayer) {
var moveX = Math.cos(self.rotation) * self.speed;
var moveY = Math.sin(self.rotation) * self.speed;
self.x += moveX;
self.y += moveY;
// Keep car on screen
if (self.x < 60) {
self.x = 60;
}
if (self.x > 1988) {
self.x = 1988;
}
if (self.y < 60) {
self.y = 60;
}
if (self.y > 2672) {
self.y = 2672;
}
// Natural slowdown
if (self.speed > 0) {
self.speed -= 0.05;
}
if (self.speed < 0) {
self.speed = 0;
}
}
};
return self;
});
var CarDealer = Container.expand(function () {
var self = Container.call(this);
self.cars = [{
type: 'bmw',
name: 'BMW M3',
price: 5000
}, {
type: 'mercedes',
name: 'Mercedes AMG',
price: 7000
}, {
type: 'audi',
name: 'Audi R8',
price: 9000
}, {
type: 'car',
name: 'Basic Car',
price: 1000
}];
var dealerBg = self.attachAsset('dealership', {
anchorX: 0.5,
anchorY: 0.5
});
var titleText = new Text2('Car Dealership', {
size: 60,
fill: '#ffffff'
});
titleText.anchor.set(0.5, 0);
titleText.x = 0;
titleText.y = -280;
self.addChild(titleText);
self.showCars = function () {
for (var i = 0; i < self.cars.length; i++) {
var carData = self.cars[i];
var carSlot = new Container();
var slotBg = carSlot.attachAsset('carSlot', {
anchorX: 0.5,
anchorY: 0.5
});
var carPreview = carSlot.attachAsset(carData.type, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.7,
scaleY: 0.7
});
var priceText = new Text2('$' + carData.price, {
size: 30,
fill: '#00ff00'
});
priceText.anchor.set(0.5, 0);
priceText.y = 35;
carSlot.addChild(priceText);
carSlot.x = i % 2 * 200 - 100;
carSlot.y = Math.floor(i / 2) * 120 - 100;
carSlot.carData = carData;
carSlot.down = function (x, y, obj) {
buyCar(this.carData);
};
self.addChild(carSlot);
}
};
return self;
});
var Server = Container.expand(function (name, hasPassword) {
var self = Container.call(this);
self.serverName = name || 'My Server';
self.hasPassword = hasPassword || false;
self.players = [];
var serverBg = self.attachAsset('serverButton', {
anchorX: 0,
anchorY: 0
});
var nameText = new Text2(self.serverName, {
size: 40,
fill: '#ffffff'
});
nameText.anchor.set(0.5, 0.5);
nameText.x = 150;
nameText.y = 40;
self.addChild(nameText);
self.down = function (x, y, obj) {
joinServer(self);
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
// Game state
var gameState = 'menu'; // menu, server, garage, dealership, driving
var currentServer = null;
var playerCar = null;
var ownedCars = storage.ownedCars || [];
var playerMoney = storage.playerMoney || 10000;
var servers = [];
// Initialize storage defaults
if (!storage.ownedCars) {
storage.ownedCars = [{
type: 'car',
name: 'Starter Car'
}];
ownedCars = storage.ownedCars;
}
// UI Elements
var moneyDisplay = new Text2('Money: $' + playerMoney, {
size: 50,
fill: '#00ff00'
});
moneyDisplay.anchor.set(1, 0);
LK.gui.topRight.addChild(moneyDisplay);
var stateDisplay = new Text2('Main Menu', {
size: 40,
fill: '#ffffff'
});
stateDisplay.anchor.set(0.5, 0);
LK.gui.top.addChild(stateDisplay);
// Game elements
var road = game.addChild(LK.getAsset('road', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
}));
var track = game.addChild(LK.getAsset('track', {
anchorX: 0.5,
anchorY: 0.5,
x: 1600,
y: 500
}));
// Menu buttons
var createServerBtn = game.addChild(LK.getAsset('serverButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 800
}));
var createServerText = new Text2('Create Server', {
size: 40,
fill: '#ffffff'
});
createServerText.anchor.set(0.5, 0.5);
createServerBtn.addChild(createServerText);
var garageBtn = game.addChild(LK.getAsset('serverButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 920
}));
var garageText = new Text2('Garage', {
size: 40,
fill: '#ffffff'
});
garageText.anchor.set(0.5, 0.5);
garageBtn.addChild(garageText);
var dealershipBtn = game.addChild(LK.getAsset('serverButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1040
}));
var dealershipText = new Text2('Car Dealership', {
size: 40,
fill: '#ffffff'
});
dealershipText.anchor.set(0.5, 0.5);
dealershipBtn.addChild(dealershipText);
// Initialize some demo servers
for (var i = 0; i < 3; i++) {
var server = new Server('Server ' + (i + 1), i === 0);
server.x = 400;
server.y = 600 + i * 100;
servers.push(server);
game.addChild(server);
}
var dealer = new CarDealer();
dealer.x = 1024;
dealer.y = 1366;
dealer.visible = false;
game.addChild(dealer);
// Functions
function updateMoneyDisplay() {
moneyDisplay.setText('Money: $' + playerMoney);
storage.playerMoney = playerMoney;
}
function buyCar(carData) {
if (playerMoney >= carData.price) {
playerMoney -= carData.price;
ownedCars.push(carData);
storage.ownedCars = ownedCars;
updateMoneyDisplay();
LK.effects.flashScreen(0x00ff00, 500);
} else {
LK.effects.flashScreen(0xff0000, 500);
}
}
function showGarage() {
gameState = 'garage';
stateDisplay.setText('Garage');
hideAllMenus();
for (var i = 0; i < ownedCars.length; i++) {
var carData = ownedCars[i];
var garageCar = new Car(carData.type, carData.price);
garageCar.x = 300 + i % 3 * 200;
garageCar.y = 800 + Math.floor(i / 3) * 150;
garageCar.down = function (x, y, obj) {
selectCar(this);
};
game.addChild(garageCar);
}
}
function selectCar(car) {
if (playerCar) {
playerCar.destroy();
}
playerCar = new Car(car.carType, car.price);
playerCar.x = 1024;
playerCar.y = 1200;
playerCar.isPlayer = true;
game.addChild(playerCar);
gameState = 'driving';
stateDisplay.setText('Driving');
hideAllMenus();
LK.playMusic('cityTrack');
}
function joinServer(server) {
currentServer = server;
gameState = 'server';
stateDisplay.setText('Server: ' + server.serverName);
hideAllMenus();
if (!playerCar && ownedCars.length > 0) {
playerCar = new Car(ownedCars[0].type, ownedCars[0].price);
playerCar.x = 1024;
playerCar.y = 1200;
playerCar.isPlayer = true;
game.addChild(playerCar);
}
}
function hideAllMenus() {
createServerBtn.visible = false;
garageBtn.visible = false;
dealershipBtn.visible = false;
dealer.visible = false;
for (var i = 0; i < servers.length; i++) {
servers[i].visible = false;
}
}
function showMainMenu() {
gameState = 'menu';
stateDisplay.setText('Main Menu');
createServerBtn.visible = true;
garageBtn.visible = true;
dealershipBtn.visible = true;
dealer.visible = false;
for (var i = 0; i < servers.length; i++) {
servers[i].visible = true;
}
// Clear garage cars
var children = game.children.slice();
for (var j = 0; j < children.length; j++) {
if (children[j] instanceof Car && !children[j].isPlayer) {
children[j].destroy();
}
}
}
// Event handlers
createServerBtn.down = function (x, y, obj) {
var newServer = new Server('My Server', false);
newServer.x = 400;
newServer.y = 600 + servers.length * 100;
servers.push(newServer);
game.addChild(newServer);
joinServer(newServer);
};
garageBtn.down = function (x, y, obj) {
showGarage();
};
dealershipBtn.down = function (x, y, obj) {
gameState = 'dealership';
stateDisplay.setText('Car Dealership');
hideAllMenus();
dealer.visible = true;
dealer.showCars();
};
var isDragging = false;
var dragStartX = 0;
var dragStartY = 0;
game.down = function (x, y, obj) {
if (gameState === 'driving' && playerCar) {
isDragging = true;
dragStartX = x;
dragStartY = y;
LK.getSound('engine').play();
} else if (gameState !== 'menu' && gameState !== 'dealership') {
showMainMenu();
}
};
game.move = function (x, y, obj) {
if (isDragging && playerCar && gameState === 'driving') {
var deltaX = x - dragStartX;
var deltaY = y - dragStartY;
if (Math.abs(deltaX) > 20 || Math.abs(deltaY) > 20) {
playerCar.rotation = Math.atan2(deltaY, deltaX);
playerCar.accelerate();
// Drift detection
if (Math.abs(deltaX) > 50) {
playerCar.drift();
}
}
}
};
game.up = function (x, y, obj) {
if (isDragging && playerCar) {
isDragging = false;
playerCar.brake();
}
};
game.update = function () {
// Update player money earned from driving
if (gameState === 'driving' && playerCar && playerCar.speed > 3) {
if (LK.ticks % 180 === 0) {
// Every 3 seconds at 60fps
playerMoney += 10;
updateMoneyDisplay();
}
}
// Update car rotation visual
if (playerCar) {
var carGraphics = playerCar.children[0];
if (carGraphics) {
carGraphics.rotation = playerCar.rotation;
}
}
};
// Start with main menu
showMainMenu();
BMW e36. In-Game asset. 2d. High contrast. No shadows
BMW M3 gtr. In-Game asset. 2d. High contrast. No shadows
Sunucu yazısi. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
GTA 5 garaj iconu. In-Game asset. 2d. High contrast. No shadows
4 şeritli beyaz aralıkli çizgili uzun yol. In-Game asset. 2d. High contrast. No shadows
Mercedes g class. In-Game asset. 2d. High contrast. No shadows
Otopark 8 slotlu. In-Game asset. 2d. High contrast. No shadows
Göz. In-Game asset. 2d. High contrast. No shadows
Araba bayisi. In-Game asset. 2d. High contrast. No shadows
Mikrofon. In-Game asset. 2d. High contrast. No shadows