User prompt
Npcler ölünce yeniden doğusun polisler dolaşsın yerden para toplıyalım npc leri öldürünce para düşsün
User prompt
Polisler bizi kovalamasın biz npc leri öldürelim
User prompt
Polisler bize ateş etmesin
User prompt
Polislerbizi öldürmesin yerlerde para olsun
User prompt
Polisler doğudumuzda gelmesin
User prompt
Biz dünyanın ortasında olalım polisler bize ateş etsin polisler bize 5 kez ateş ederse
User prompt
Diğer insanların üstünde npc yazsın
User prompt
Ve diğer insanlar yavaş yürüsün ve bir polis ölünce yeni polis doğusun ve harita büyük olsun yerde para olun cn barımızın altında para barımız olsun yerdeki paraları alınca para barına artı 50 para gelsin polis öldürünce yıldızlar artsın
User prompt
Oyundaki insanların renkleri farklı olsun hepsininki
User prompt
Oyundaki diğer insanlar farklı renkte olsun polislerin bizi kovalaması için onlara ateş etmemiz gereksin
User prompt
Oyunda ki en büyük hata doğudumuz an polis bizi öldürüyor bu olmasın başka insanlar olsun can barımız sol üst köşede olsun
User prompt
Silahımız olsun ekranın neresine tıklarsak oraya ateş etsin polisin bizi kovalaması için ona ateş etmemiz gereksin ve 5 canımız olsun polise her ateş ettiğimizde yeni polis arabayla gelsin ve arabadan inip bize ateş etsin polisten kaçmak için ateş etmememiz gerekiyor
Code edit (1 edits merged)
Please save this source code
User prompt
Mini City Heist
Initial prompt
GTA 6 ya benziyen oyun yap pls
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Car (stealable) var Car = Container.expand(function () { var self = Container.call(this); self.asset = self.attachAsset('car', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 0; self.maxSpeed = 24; self.direction = 0; // radians self.driver = null; // player if inside self.isPolice = false; self.update = function () { if (self.driver) { // Move in direction self.x += Math.cos(self.direction) * self.speed; self.y += Math.sin(self.direction) * self.speed; } }; return self; }); // CityBlock: road or building var CityBlock = Container.expand(function () { var self = Container.call(this); self.type = 'road'; // or 'building' self.setType = function (type) { self.type = type; if (self.asset) { self.removeChild(self.asset); } if (type === 'road') { self.asset = self.attachAsset('road', { anchorX: 0.5, anchorY: 0.5 }); } else { self.asset = self.attachAsset('building', { anchorX: 0.5, anchorY: 0.5 }); } }; return self; }); // Mission marker var Mission = Container.expand(function () { var self = Container.call(this); self.asset = self.attachAsset('mission', { anchorX: 0.5, anchorY: 0.5 }); self.active = true; return self; }); // Player character var Player = Container.expand(function () { var self = Container.call(this); self.asset = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 16; self.inCar = null; // reference to car if inside self.direction = 0; // radians, 0 = right self.update = function () { // If in car, follow car if (self.inCar) { self.x = self.inCar.x; self.y = self.inCar.y; self.visible = false; } else { self.visible = true; } }; return self; }); // Police car var PoliceCar = Container.expand(function () { var self = Container.call(this); self.asset = self.attachAsset('police', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 0; self.maxSpeed = 20; self.direction = 0; self.target = null; // player or car self.isPolice = true; self.update = function () { if (self.target) { // Simple chase logic var dx = self.target.x - self.x; var dy = self.target.y - self.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist > 10) { self.direction = Math.atan2(dy, dx); self.speed = self.maxSpeed; self.x += Math.cos(self.direction) * self.speed; self.y += Math.sin(self.direction) * self.speed; } else { self.speed = 0; } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ // Mission marker - green ellipse // Police car - white box with blue // Car - yellow box // Player (hero) - red ellipse // Building - blue box // City block (road) - gray box // --- City Map Setup --- var cityCols = 5; var cityRows = 7; var blockSize = 400; var cityBlocks = []; var cityOffsetX = (2048 - cityCols * blockSize) / 2; var cityOffsetY = (2732 - cityRows * blockSize) / 2; // Generate city grid: roads and buildings for (var row = 0; row < cityRows; row++) { for (var col = 0; col < cityCols; col++) { var block = new CityBlock(); // Make a cross pattern of roads, rest buildings if (row === Math.floor(cityRows / 2) || col === Math.floor(cityCols / 2)) { block.setType('road'); } else { block.setType('building'); } block.x = cityOffsetX + col * blockSize + blockSize / 2; block.y = cityOffsetY + row * blockSize + blockSize / 2; cityBlocks.push(block); game.addChild(block); } } // --- Player Setup --- var player = new Player(); player.x = cityOffsetX + Math.floor(cityCols / 2) * blockSize + blockSize / 2; player.y = cityOffsetY + Math.floor(cityRows / 2) * blockSize + blockSize / 2; game.addChild(player); // --- Cars Setup --- var cars = []; function spawnCar(x, y) { var car = new Car(); car.x = x; car.y = y; car.direction = Math.random() * Math.PI * 2; cars.push(car); game.addChild(car); return car; } // Place a few cars on roads for (var i = 0; i < 4; i++) { var col = Math.floor(cityCols / 2); var row = 1 + i; var x = cityOffsetX + col * blockSize + blockSize / 2; var y = cityOffsetY + row * blockSize + blockSize / 2; spawnCar(x, y); } // --- Police Setup --- var policeCars = []; function spawnPolice(x, y) { var police = new PoliceCar(); police.x = x; police.y = y; police.direction = 0; police.target = player; policeCars.push(police); game.addChild(police); return police; } // Start with one police car var policeStartX = cityOffsetX + blockSize / 2; var policeStartY = cityOffsetY + blockSize / 2; spawnPolice(policeStartX, policeStartY); // --- Mission Setup --- var mission = new Mission(); mission.x = cityOffsetX + (cityCols - 1) * blockSize + blockSize / 2; mission.y = cityOffsetY + (cityRows - 1) * blockSize + blockSize / 2; game.addChild(mission); // --- Score and Wanted Level --- var score = 0; var wantedLevel = 1; // 1-5 var scoreTxt = new Text2('Score: 0', { size: 90, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var wantedTxt = new Text2('★', { size: 80, fill: "#ff0" }); wantedTxt.anchor.set(0.5, 0); LK.gui.topRight.addChild(wantedTxt); // --- Timer --- var timeLeft = 60; // seconds var timerTxt = new Text2('60', { size: 80, fill: "#fff" }); timerTxt.anchor.set(0.5, 0); LK.gui.top.addChild(timerTxt); // --- Touch Controls --- var dragDir = null; // {dx,dy} var dragStart = null; var dragNode = null; var lastTouchX = 0, lastTouchY = 0; // --- Helper Functions --- function isOnRoad(x, y) { // Returns true if (x,y) is on a road block for (var i = 0; i < cityBlocks.length; i++) { var b = cityBlocks[i]; if (b.type === 'road') { var left = b.x - blockSize / 2; var right = b.x + blockSize / 2; var top = b.y - blockSize / 2; var bottom = b.y + blockSize / 2; if (x >= left && x <= right && y >= top && y <= bottom) { return true; } } } return false; } function clampToRoad(x, y) { // Snap to nearest road block center if not on road var minDist = 99999, best = null; for (var i = 0; i < cityBlocks.length; i++) { var b = cityBlocks[i]; if (b.type === 'road') { var dx = b.x - x; var dy = b.y - y; var d = dx * dx + dy * dy; if (d < minDist) { minDist = d; best = b; } } } if (best) return { x: best.x, y: best.y }; return { x: x, y: y }; } function updateWantedDisplay() { var stars = ''; for (var i = 0; i < wantedLevel; i++) stars += '★'; wantedTxt.setText(stars); } function addScore(amt) { score += amt; scoreTxt.setText('Score: ' + score); LK.setScore(score); } function resetMission() { // Place mission at random road block var roadBlocks = []; for (var i = 0; i < cityBlocks.length; i++) { if (cityBlocks[i].type === 'road') roadBlocks.push(cityBlocks[i]); } var idx = Math.floor(Math.random() * roadBlocks.length); mission.x = roadBlocks[idx].x; mission.y = roadBlocks[idx].y; mission.active = true; mission.visible = true; } // --- Game Touch Controls --- // Drag to move (swipe in direction to move) game.down = function (x, y, obj) { // Don't allow drag from top left 100x100 if (x < 100 && y < 100) return; dragStart = { x: x, y: y }; lastTouchX = x; lastTouchY = y; dragDir = null; dragNode = player; }; game.move = function (x, y, obj) { if (!dragNode) return; var dx = x - dragStart.x; var dy = y - dragStart.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist > 30) { dragDir = { dx: dx, dy: dy }; } lastTouchX = x; lastTouchY = y; }; game.up = function (x, y, obj) { dragNode = null; dragDir = null; dragStart = null; }; // Tap on car to enter/exit game.on('down', function (x, y, obj) { // If player is not in car, check if tap is on car if (!player.inCar) { for (var i = 0; i < cars.length; i++) { var car = cars[i]; var dx = car.x - x; var dy = car.y - y; if (Math.abs(dx) < 80 && Math.abs(dy) < 50) { // Enter car if (Math.abs(player.x - car.x) < 100 && Math.abs(player.y - car.y) < 100) { player.inCar = car; car.driver = player; car.speed = car.maxSpeed; car.direction = 0; // Increase wanted level wantedLevel = Math.min(5, wantedLevel + 1); updateWantedDisplay(); // Police target car for (var j = 0; j < policeCars.length; j++) { policeCars[j].target = car; } } } } } else { // Exit car var car = player.inCar; player.inCar = null; car.driver = null; car.speed = 0; // Place player next to car player.x = car.x + 80; player.y = car.y; // Police target player for (var j = 0; j < policeCars.length; j++) { policeCars[j].target = player; } } }); // --- Game Update Loop --- game.update = function () { // Timer if (LK.ticks % 60 === 0 && timeLeft > 0) { timeLeft--; timerTxt.setText(timeLeft + ''); if (timeLeft === 0) { LK.showGameOver(); return; } } // Player movement if (!player.inCar && dragDir) { // Move player in drag direction, but only on road var angle = Math.atan2(dragDir.dy, dragDir.dx); var nx = player.x + Math.cos(angle) * player.speed; var ny = player.y + Math.sin(angle) * player.speed; if (isOnRoad(nx, ny)) { player.x = nx; player.y = ny; } } // Car movement (if player in car) for (var i = 0; i < cars.length; i++) { var car = cars[i]; car.update(); // Clamp car to road if (car.driver) { if (!isOnRoad(car.x, car.y)) { // Stop car at edge car.speed = 0; } } } // Police movement for (var i = 0; i < policeCars.length; i++) { var police = policeCars[i]; police.update(); // Clamp police to road if (!isOnRoad(police.x, police.y)) { police.speed = 0; } // Police catch player var target = police.target; if (target && Math.abs(police.x - target.x) < 80 && Math.abs(police.y - target.y) < 80) { // Game over LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } } // Player update player.update(); // Mission check if (mission.active) { var px = player.inCar ? player.inCar.x : player.x; var py = player.inCar ? player.inCar.y : player.y; if (Math.abs(mission.x - px) < 80 && Math.abs(mission.y - py) < 80) { // Complete mission addScore(10 * wantedLevel); mission.active = false; mission.visible = false; // Increase wanted level, spawn more police wantedLevel = Math.min(5, wantedLevel + 1); updateWantedDisplay(); if (wantedLevel > policeCars.length) { // Spawn new police at random road var roadBlocks = []; for (var i = 0; i < cityBlocks.length; i++) { if (cityBlocks[i].type === 'road') roadBlocks.push(cityBlocks[i]); } var idx = Math.floor(Math.random() * roadBlocks.length); var b = roadBlocks[idx]; spawnPolice(b.x, b.y); } // Next mission after short delay LK.setTimeout(function () { resetMission(); }, 1200); } } // Win condition: score >= 100 if (score >= 100) { LK.showYouWin(); return; } }; // --- Start State --- addScore(0); updateWantedDisplay(); timerTxt.setText(timeLeft + ''); resetMission();
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,457 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+// Car (stealable)
+var Car = Container.expand(function () {
+ var self = Container.call(this);
+ self.asset = self.attachAsset('car', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 0;
+ self.maxSpeed = 24;
+ self.direction = 0; // radians
+ self.driver = null; // player if inside
+ self.isPolice = false;
+ self.update = function () {
+ if (self.driver) {
+ // Move in direction
+ self.x += Math.cos(self.direction) * self.speed;
+ self.y += Math.sin(self.direction) * self.speed;
+ }
+ };
+ return self;
+});
+// CityBlock: road or building
+var CityBlock = Container.expand(function () {
+ var self = Container.call(this);
+ self.type = 'road'; // or 'building'
+ self.setType = function (type) {
+ self.type = type;
+ if (self.asset) {
+ self.removeChild(self.asset);
+ }
+ if (type === 'road') {
+ self.asset = self.attachAsset('road', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ } else {
+ self.asset = self.attachAsset('building', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ }
+ };
+ return self;
+});
+// Mission marker
+var Mission = Container.expand(function () {
+ var self = Container.call(this);
+ self.asset = self.attachAsset('mission', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.active = true;
+ return self;
+});
+// Player character
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ self.asset = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 16;
+ self.inCar = null; // reference to car if inside
+ self.direction = 0; // radians, 0 = right
+ self.update = function () {
+ // If in car, follow car
+ if (self.inCar) {
+ self.x = self.inCar.x;
+ self.y = self.inCar.y;
+ self.visible = false;
+ } else {
+ self.visible = true;
+ }
+ };
+ return self;
+});
+// Police car
+var PoliceCar = Container.expand(function () {
+ var self = Container.call(this);
+ self.asset = self.attachAsset('police', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 0;
+ self.maxSpeed = 20;
+ self.direction = 0;
+ self.target = null; // player or car
+ self.isPolice = true;
+ self.update = function () {
+ if (self.target) {
+ // Simple chase logic
+ var dx = self.target.x - self.x;
+ var dy = self.target.y - self.y;
+ var dist = Math.sqrt(dx * dx + dy * dy);
+ if (dist > 10) {
+ self.direction = Math.atan2(dy, dx);
+ self.speed = self.maxSpeed;
+ self.x += Math.cos(self.direction) * self.speed;
+ self.y += Math.sin(self.direction) * self.speed;
+ } else {
+ self.speed = 0;
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x222222
+});
+
+/****
+* Game Code
+****/
+// Mission marker - green ellipse
+// Police car - white box with blue
+// Car - yellow box
+// Player (hero) - red ellipse
+// Building - blue box
+// City block (road) - gray box
+// --- City Map Setup ---
+var cityCols = 5;
+var cityRows = 7;
+var blockSize = 400;
+var cityBlocks = [];
+var cityOffsetX = (2048 - cityCols * blockSize) / 2;
+var cityOffsetY = (2732 - cityRows * blockSize) / 2;
+// Generate city grid: roads and buildings
+for (var row = 0; row < cityRows; row++) {
+ for (var col = 0; col < cityCols; col++) {
+ var block = new CityBlock();
+ // Make a cross pattern of roads, rest buildings
+ if (row === Math.floor(cityRows / 2) || col === Math.floor(cityCols / 2)) {
+ block.setType('road');
+ } else {
+ block.setType('building');
+ }
+ block.x = cityOffsetX + col * blockSize + blockSize / 2;
+ block.y = cityOffsetY + row * blockSize + blockSize / 2;
+ cityBlocks.push(block);
+ game.addChild(block);
+ }
+}
+// --- Player Setup ---
+var player = new Player();
+player.x = cityOffsetX + Math.floor(cityCols / 2) * blockSize + blockSize / 2;
+player.y = cityOffsetY + Math.floor(cityRows / 2) * blockSize + blockSize / 2;
+game.addChild(player);
+// --- Cars Setup ---
+var cars = [];
+function spawnCar(x, y) {
+ var car = new Car();
+ car.x = x;
+ car.y = y;
+ car.direction = Math.random() * Math.PI * 2;
+ cars.push(car);
+ game.addChild(car);
+ return car;
+}
+// Place a few cars on roads
+for (var i = 0; i < 4; i++) {
+ var col = Math.floor(cityCols / 2);
+ var row = 1 + i;
+ var x = cityOffsetX + col * blockSize + blockSize / 2;
+ var y = cityOffsetY + row * blockSize + blockSize / 2;
+ spawnCar(x, y);
+}
+// --- Police Setup ---
+var policeCars = [];
+function spawnPolice(x, y) {
+ var police = new PoliceCar();
+ police.x = x;
+ police.y = y;
+ police.direction = 0;
+ police.target = player;
+ policeCars.push(police);
+ game.addChild(police);
+ return police;
+}
+// Start with one police car
+var policeStartX = cityOffsetX + blockSize / 2;
+var policeStartY = cityOffsetY + blockSize / 2;
+spawnPolice(policeStartX, policeStartY);
+// --- Mission Setup ---
+var mission = new Mission();
+mission.x = cityOffsetX + (cityCols - 1) * blockSize + blockSize / 2;
+mission.y = cityOffsetY + (cityRows - 1) * blockSize + blockSize / 2;
+game.addChild(mission);
+// --- Score and Wanted Level ---
+var score = 0;
+var wantedLevel = 1; // 1-5
+var scoreTxt = new Text2('Score: 0', {
+ size: 90,
+ fill: "#fff"
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+var wantedTxt = new Text2('★', {
+ size: 80,
+ fill: "#ff0"
+});
+wantedTxt.anchor.set(0.5, 0);
+LK.gui.topRight.addChild(wantedTxt);
+// --- Timer ---
+var timeLeft = 60; // seconds
+var timerTxt = new Text2('60', {
+ size: 80,
+ fill: "#fff"
+});
+timerTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(timerTxt);
+// --- Touch Controls ---
+var dragDir = null; // {dx,dy}
+var dragStart = null;
+var dragNode = null;
+var lastTouchX = 0,
+ lastTouchY = 0;
+// --- Helper Functions ---
+function isOnRoad(x, y) {
+ // Returns true if (x,y) is on a road block
+ for (var i = 0; i < cityBlocks.length; i++) {
+ var b = cityBlocks[i];
+ if (b.type === 'road') {
+ var left = b.x - blockSize / 2;
+ var right = b.x + blockSize / 2;
+ var top = b.y - blockSize / 2;
+ var bottom = b.y + blockSize / 2;
+ if (x >= left && x <= right && y >= top && y <= bottom) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+function clampToRoad(x, y) {
+ // Snap to nearest road block center if not on road
+ var minDist = 99999,
+ best = null;
+ for (var i = 0; i < cityBlocks.length; i++) {
+ var b = cityBlocks[i];
+ if (b.type === 'road') {
+ var dx = b.x - x;
+ var dy = b.y - y;
+ var d = dx * dx + dy * dy;
+ if (d < minDist) {
+ minDist = d;
+ best = b;
+ }
+ }
+ }
+ if (best) return {
+ x: best.x,
+ y: best.y
+ };
+ return {
+ x: x,
+ y: y
+ };
+}
+function updateWantedDisplay() {
+ var stars = '';
+ for (var i = 0; i < wantedLevel; i++) stars += '★';
+ wantedTxt.setText(stars);
+}
+function addScore(amt) {
+ score += amt;
+ scoreTxt.setText('Score: ' + score);
+ LK.setScore(score);
+}
+function resetMission() {
+ // Place mission at random road block
+ var roadBlocks = [];
+ for (var i = 0; i < cityBlocks.length; i++) {
+ if (cityBlocks[i].type === 'road') roadBlocks.push(cityBlocks[i]);
+ }
+ var idx = Math.floor(Math.random() * roadBlocks.length);
+ mission.x = roadBlocks[idx].x;
+ mission.y = roadBlocks[idx].y;
+ mission.active = true;
+ mission.visible = true;
+}
+// --- Game Touch Controls ---
+// Drag to move (swipe in direction to move)
+game.down = function (x, y, obj) {
+ // Don't allow drag from top left 100x100
+ if (x < 100 && y < 100) return;
+ dragStart = {
+ x: x,
+ y: y
+ };
+ lastTouchX = x;
+ lastTouchY = y;
+ dragDir = null;
+ dragNode = player;
+};
+game.move = function (x, y, obj) {
+ if (!dragNode) return;
+ var dx = x - dragStart.x;
+ var dy = y - dragStart.y;
+ var dist = Math.sqrt(dx * dx + dy * dy);
+ if (dist > 30) {
+ dragDir = {
+ dx: dx,
+ dy: dy
+ };
+ }
+ lastTouchX = x;
+ lastTouchY = y;
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+ dragDir = null;
+ dragStart = null;
+};
+// Tap on car to enter/exit
+game.on('down', function (x, y, obj) {
+ // If player is not in car, check if tap is on car
+ if (!player.inCar) {
+ for (var i = 0; i < cars.length; i++) {
+ var car = cars[i];
+ var dx = car.x - x;
+ var dy = car.y - y;
+ if (Math.abs(dx) < 80 && Math.abs(dy) < 50) {
+ // Enter car
+ if (Math.abs(player.x - car.x) < 100 && Math.abs(player.y - car.y) < 100) {
+ player.inCar = car;
+ car.driver = player;
+ car.speed = car.maxSpeed;
+ car.direction = 0;
+ // Increase wanted level
+ wantedLevel = Math.min(5, wantedLevel + 1);
+ updateWantedDisplay();
+ // Police target car
+ for (var j = 0; j < policeCars.length; j++) {
+ policeCars[j].target = car;
+ }
+ }
+ }
+ }
+ } else {
+ // Exit car
+ var car = player.inCar;
+ player.inCar = null;
+ car.driver = null;
+ car.speed = 0;
+ // Place player next to car
+ player.x = car.x + 80;
+ player.y = car.y;
+ // Police target player
+ for (var j = 0; j < policeCars.length; j++) {
+ policeCars[j].target = player;
+ }
+ }
+});
+// --- Game Update Loop ---
+game.update = function () {
+ // Timer
+ if (LK.ticks % 60 === 0 && timeLeft > 0) {
+ timeLeft--;
+ timerTxt.setText(timeLeft + '');
+ if (timeLeft === 0) {
+ LK.showGameOver();
+ return;
+ }
+ }
+ // Player movement
+ if (!player.inCar && dragDir) {
+ // Move player in drag direction, but only on road
+ var angle = Math.atan2(dragDir.dy, dragDir.dx);
+ var nx = player.x + Math.cos(angle) * player.speed;
+ var ny = player.y + Math.sin(angle) * player.speed;
+ if (isOnRoad(nx, ny)) {
+ player.x = nx;
+ player.y = ny;
+ }
+ }
+ // Car movement (if player in car)
+ for (var i = 0; i < cars.length; i++) {
+ var car = cars[i];
+ car.update();
+ // Clamp car to road
+ if (car.driver) {
+ if (!isOnRoad(car.x, car.y)) {
+ // Stop car at edge
+ car.speed = 0;
+ }
+ }
+ }
+ // Police movement
+ for (var i = 0; i < policeCars.length; i++) {
+ var police = policeCars[i];
+ police.update();
+ // Clamp police to road
+ if (!isOnRoad(police.x, police.y)) {
+ police.speed = 0;
+ }
+ // Police catch player
+ var target = police.target;
+ if (target && Math.abs(police.x - target.x) < 80 && Math.abs(police.y - target.y) < 80) {
+ // Game over
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ return;
+ }
+ }
+ // Player update
+ player.update();
+ // Mission check
+ if (mission.active) {
+ var px = player.inCar ? player.inCar.x : player.x;
+ var py = player.inCar ? player.inCar.y : player.y;
+ if (Math.abs(mission.x - px) < 80 && Math.abs(mission.y - py) < 80) {
+ // Complete mission
+ addScore(10 * wantedLevel);
+ mission.active = false;
+ mission.visible = false;
+ // Increase wanted level, spawn more police
+ wantedLevel = Math.min(5, wantedLevel + 1);
+ updateWantedDisplay();
+ if (wantedLevel > policeCars.length) {
+ // Spawn new police at random road
+ var roadBlocks = [];
+ for (var i = 0; i < cityBlocks.length; i++) {
+ if (cityBlocks[i].type === 'road') roadBlocks.push(cityBlocks[i]);
+ }
+ var idx = Math.floor(Math.random() * roadBlocks.length);
+ var b = roadBlocks[idx];
+ spawnPolice(b.x, b.y);
+ }
+ // Next mission after short delay
+ LK.setTimeout(function () {
+ resetMission();
+ }, 1200);
+ }
+ }
+ // Win condition: score >= 100
+ if (score >= 100) {
+ LK.showYouWin();
+ return;
+ }
+};
+// --- Start State ---
+addScore(0);
+updateWantedDisplay();
+timerTxt.setText(timeLeft + '');
+resetMission();
\ No newline at end of file