Code edit (1 edits merged)
Please save this source code
User prompt
Mike vs Leonardo: Top-Down Crime Boss
Initial prompt
Bana GTA'nın ilk oyunlarına benzer bir oyun oluştur oyunda bir adet ana kötü olsun ve onu görevler yaparak yenmeye çalışalım ana karakter Mike, kötü karakter de uLeonardo olsun veoyunda olabilecek bütün silahlar olsun.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 8; self.direction = { x: 0, y: 0 }; self.isPlayerBullet = true; self.update = function () { self.x += self.direction.x * self.speed; self.y += self.direction.y * self.speed; }; return self; }); var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.health = 3; self.maxHealth = 3; self.speed = 1.5; self.shootTimer = 0; self.shootDelay = 90; self.lastPlayerX = 0; self.lastPlayerY = 0; self.update = function () { if (!mike) return; var dx = mike.x - self.x; var dy = mike.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 5) { var moveX = dx / distance * self.speed; var moveY = dy / distance * self.speed; self.x += moveX; self.y += moveY; } self.shootTimer++; if (self.shootTimer >= self.shootDelay && distance < 300) { self.shootAtPlayer(); self.shootTimer = 0; } var healthPercent = self.health / self.maxHealth; enemyGraphics.tint = healthPercent < 0.5 ? 0xFF6666 : 0xFFFFFF; }; self.shootAtPlayer = function () { if (!mike) return; var dx = mike.x - self.x; var dy = mike.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 0) { var bullet = new EnemyBullet(); bullet.x = self.x; bullet.y = self.y; bullet.direction.x = dx / distance; bullet.direction.y = dy / distance; enemyBullets.push(bullet); game.addChild(bullet); } }; self.takeDamage = function () { self.health--; LK.effects.flashObject(self, 0xFF0000, 200); if (self.health <= 0) { return true; } return false; }; return self; }); var EnemyBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('enemyBullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.direction = { x: 0, y: 0 }; self.isPlayerBullet = false; self.update = function () { self.x += self.direction.x * self.speed; self.y += self.direction.y * self.speed; }; return self; }); var Mike = Container.expand(function () { var self = Container.call(this); var mikeGraphics = self.attachAsset('mike', { anchorX: 0.5, anchorY: 0.5 }); self.health = 10; self.maxHealth = 10; self.speed = 4; self.weapon = 'pistol'; self.shootTimer = 0; self.shootDelay = 20; self.lastTargetX = 0; self.lastTargetY = 0; self.update = function () { if (self.shootTimer > 0) { self.shootTimer--; } var healthPercent = self.health / self.maxHealth; if (healthPercent < 0.3) { mikeGraphics.tint = 0xFF6666; } else if (healthPercent < 0.6) { mikeGraphics.tint = 0xFFFF66; } else { mikeGraphics.tint = 0xFFFFFF; } }; self.shoot = function (targetX, targetY) { if (self.shootTimer > 0) return; var dx = targetX - self.x; var dy = targetY - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 0) { var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; bullet.direction.x = dx / distance; bullet.direction.y = dy / distance; bullets.push(bullet); game.addChild(bullet); LK.getSound('shoot').play(); self.shootTimer = self.shootDelay; self.lastTargetX = targetX; self.lastTargetY = targetY; } }; self.takeDamage = function () { self.health--; LK.effects.flashObject(self, 0xFF0000, 300); if (self.health <= 0) { LK.showGameOver(); } }; return self; }); var MissionMarker = Container.expand(function () { var self = Container.call(this); var markerGraphics = self.attachAsset('missionMarker', { anchorX: 0.5, anchorY: 0.5 }); self.missionType = ''; self.completed = false; self.pulseTimer = 0; self.update = function () { self.pulseTimer += 0.1; var scale = 1 + Math.sin(self.pulseTimer) * 0.2; markerGraphics.scaleX = scale; markerGraphics.scaleY = scale; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a1a }); /**** * Game Code ****/ var mike = null; var enemies = []; var bullets = []; var enemyBullets = []; var missionMarkers = []; var buildings = []; var playerMoney = 100; var currentMission = 1; var totalMissions = 5; var gameState = 'playing'; var dragNode = null; var moneyText = new Text2('Money: $' + playerMoney, { size: 40, fill: 0x00FF00 }); moneyText.anchor.set(0, 0); LK.gui.topRight.addChild(moneyText); var healthText = new Text2('Health: 10', { size: 40, fill: 0xFF0000 }); healthText.anchor.set(0, 0); LK.gui.topLeft.addChild(healthText); var missionText = new Text2('Mission: 1/' + totalMissions, { size: 40, fill: 0xFFFFFF }); missionText.anchor.set(0.5, 0); LK.gui.top.addChild(missionText); function createBuildings() { for (var i = 0; i < 8; i++) { var building = game.addChild(LK.getAsset('building', { anchorX: 0.5, anchorY: 0.5 })); building.x = Math.random() * 1800 + 200; building.y = Math.random() * 2400 + 200; buildings.push(building); } } function spawnEnemies() { var enemyCount = Math.min(2 + currentMission, 6); for (var i = 0; i < enemyCount; i++) { var enemy = new Enemy(); enemy.x = Math.random() * 1800 + 200; enemy.y = Math.random() * 2400 + 200; enemies.push(enemy); game.addChild(enemy); } } function createMissionMarker() { var marker = new MissionMarker(); marker.x = Math.random() * 1600 + 400; marker.y = Math.random() * 2200 + 400; marker.missionType = 'eliminate'; missionMarkers.push(marker); game.addChild(marker); } function initializeLevel() { mike = new Mike(); mike.x = 1024; mike.y = 1366; game.addChild(mike); createBuildings(); spawnEnemies(); createMissionMarker(); } function handleMove(x, y, obj) { if (dragNode && gameState === 'playing') { dragNode.x = x; dragNode.y = y; } if (mike && gameState === 'playing' && !dragNode) { mike.shoot(x, y); } } function checkBulletCollisions() { for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; var bulletDestroyed = false; if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) { bullet.destroy(); bullets.splice(i, 1); continue; } for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (bullet.intersects(enemy)) { LK.getSound('enemyHit').play(); if (enemy.takeDamage()) { enemy.destroy(); enemies.splice(j, 1); playerMoney += 25; moneyText.setText('Money: $' + playerMoney); } bullet.destroy(); bullets.splice(i, 1); bulletDestroyed = true; break; } } if (bulletDestroyed) continue; for (var k = 0; k < buildings.length; k++) { if (bullet.intersects(buildings[k])) { bullet.destroy(); bullets.splice(i, 1); break; } } } } function checkEnemyBulletCollisions() { for (var i = enemyBullets.length - 1; i >= 0; i--) { var bullet = enemyBullets[i]; if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) { bullet.destroy(); enemyBullets.splice(i, 1); continue; } if (mike && bullet.intersects(mike)) { mike.takeDamage(); healthText.setText('Health: ' + mike.health); bullet.destroy(); enemyBullets.splice(i, 1); continue; } for (var k = 0; k < buildings.length; k++) { if (bullet.intersects(buildings[k])) { bullet.destroy(); enemyBullets.splice(i, 1); break; } } } } function checkMissionProgress() { if (enemies.length === 0 && missionMarkers.length > 0) { for (var i = missionMarkers.length - 1; i >= 0; i--) { var marker = missionMarkers[i]; if (mike && mike.intersects(marker)) { marker.destroy(); missionMarkers.splice(i, 1); completeMission(); break; } } } } function completeMission() { LK.getSound('missionComplete').play(); playerMoney += 100; moneyText.setText('Money: $' + playerMoney); currentMission++; if (currentMission > totalMissions) { LK.showYouWin(); return; } missionText.setText('Mission: ' + currentMission + '/' + totalMissions); for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var j = bullets.length - 1; j >= 0; j--) { bullets[j].destroy(); bullets.splice(j, 1); } for (var k = enemyBullets.length - 1; k >= 0; k--) { enemyBullets[k].destroy(); enemyBullets.splice(k, 1); } LK.setTimeout(function () { spawnEnemies(); createMissionMarker(); if (mike) { mike.health = Math.min(mike.health + 2, mike.maxHealth); healthText.setText('Health: ' + mike.health); } }, 1000); } game.move = handleMove; game.down = function (x, y, obj) { if (gameState === 'playing') { dragNode = mike; handleMove(x, y, obj); } }; game.up = function (x, y, obj) { dragNode = null; }; game.update = function () { if (gameState !== 'playing') return; checkBulletCollisions(); checkEnemyBulletCollisions(); checkMissionProgress(); }; initializeLevel();
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,380 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Bullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bulletGraphics = self.attachAsset('bullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 8;
+ self.direction = {
+ x: 0,
+ y: 0
+ };
+ self.isPlayerBullet = true;
+ self.update = function () {
+ self.x += self.direction.x * self.speed;
+ self.y += self.direction.y * self.speed;
+ };
+ return self;
+});
+var Enemy = Container.expand(function () {
+ var self = Container.call(this);
+ var enemyGraphics = self.attachAsset('enemy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 3;
+ self.maxHealth = 3;
+ self.speed = 1.5;
+ self.shootTimer = 0;
+ self.shootDelay = 90;
+ self.lastPlayerX = 0;
+ self.lastPlayerY = 0;
+ self.update = function () {
+ if (!mike) return;
+ var dx = mike.x - self.x;
+ var dy = mike.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 5) {
+ var moveX = dx / distance * self.speed;
+ var moveY = dy / distance * self.speed;
+ self.x += moveX;
+ self.y += moveY;
+ }
+ self.shootTimer++;
+ if (self.shootTimer >= self.shootDelay && distance < 300) {
+ self.shootAtPlayer();
+ self.shootTimer = 0;
+ }
+ var healthPercent = self.health / self.maxHealth;
+ enemyGraphics.tint = healthPercent < 0.5 ? 0xFF6666 : 0xFFFFFF;
+ };
+ self.shootAtPlayer = function () {
+ if (!mike) return;
+ var dx = mike.x - self.x;
+ var dy = mike.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 0) {
+ var bullet = new EnemyBullet();
+ bullet.x = self.x;
+ bullet.y = self.y;
+ bullet.direction.x = dx / distance;
+ bullet.direction.y = dy / distance;
+ enemyBullets.push(bullet);
+ game.addChild(bullet);
+ }
+ };
+ self.takeDamage = function () {
+ self.health--;
+ LK.effects.flashObject(self, 0xFF0000, 200);
+ if (self.health <= 0) {
+ return true;
+ }
+ return false;
+ };
+ return self;
+});
+var EnemyBullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bulletGraphics = self.attachAsset('enemyBullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 5;
+ self.direction = {
+ x: 0,
+ y: 0
+ };
+ self.isPlayerBullet = false;
+ self.update = function () {
+ self.x += self.direction.x * self.speed;
+ self.y += self.direction.y * self.speed;
+ };
+ return self;
+});
+var Mike = Container.expand(function () {
+ var self = Container.call(this);
+ var mikeGraphics = self.attachAsset('mike', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 10;
+ self.maxHealth = 10;
+ self.speed = 4;
+ self.weapon = 'pistol';
+ self.shootTimer = 0;
+ self.shootDelay = 20;
+ self.lastTargetX = 0;
+ self.lastTargetY = 0;
+ self.update = function () {
+ if (self.shootTimer > 0) {
+ self.shootTimer--;
+ }
+ var healthPercent = self.health / self.maxHealth;
+ if (healthPercent < 0.3) {
+ mikeGraphics.tint = 0xFF6666;
+ } else if (healthPercent < 0.6) {
+ mikeGraphics.tint = 0xFFFF66;
+ } else {
+ mikeGraphics.tint = 0xFFFFFF;
+ }
+ };
+ self.shoot = function (targetX, targetY) {
+ if (self.shootTimer > 0) return;
+ var dx = targetX - self.x;
+ var dy = targetY - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 0) {
+ var bullet = new Bullet();
+ bullet.x = self.x;
+ bullet.y = self.y;
+ bullet.direction.x = dx / distance;
+ bullet.direction.y = dy / distance;
+ bullets.push(bullet);
+ game.addChild(bullet);
+ LK.getSound('shoot').play();
+ self.shootTimer = self.shootDelay;
+ self.lastTargetX = targetX;
+ self.lastTargetY = targetY;
+ }
+ };
+ self.takeDamage = function () {
+ self.health--;
+ LK.effects.flashObject(self, 0xFF0000, 300);
+ if (self.health <= 0) {
+ LK.showGameOver();
+ }
+ };
+ return self;
+});
+var MissionMarker = Container.expand(function () {
+ var self = Container.call(this);
+ var markerGraphics = self.attachAsset('missionMarker', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.missionType = '';
+ self.completed = false;
+ self.pulseTimer = 0;
+ self.update = function () {
+ self.pulseTimer += 0.1;
+ var scale = 1 + Math.sin(self.pulseTimer) * 0.2;
+ markerGraphics.scaleX = scale;
+ markerGraphics.scaleY = scale;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a1a
+});
+
+/****
+* Game Code
+****/
+var mike = null;
+var enemies = [];
+var bullets = [];
+var enemyBullets = [];
+var missionMarkers = [];
+var buildings = [];
+var playerMoney = 100;
+var currentMission = 1;
+var totalMissions = 5;
+var gameState = 'playing';
+var dragNode = null;
+var moneyText = new Text2('Money: $' + playerMoney, {
+ size: 40,
+ fill: 0x00FF00
+});
+moneyText.anchor.set(0, 0);
+LK.gui.topRight.addChild(moneyText);
+var healthText = new Text2('Health: 10', {
+ size: 40,
+ fill: 0xFF0000
+});
+healthText.anchor.set(0, 0);
+LK.gui.topLeft.addChild(healthText);
+var missionText = new Text2('Mission: 1/' + totalMissions, {
+ size: 40,
+ fill: 0xFFFFFF
+});
+missionText.anchor.set(0.5, 0);
+LK.gui.top.addChild(missionText);
+function createBuildings() {
+ for (var i = 0; i < 8; i++) {
+ var building = game.addChild(LK.getAsset('building', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ building.x = Math.random() * 1800 + 200;
+ building.y = Math.random() * 2400 + 200;
+ buildings.push(building);
+ }
+}
+function spawnEnemies() {
+ var enemyCount = Math.min(2 + currentMission, 6);
+ for (var i = 0; i < enemyCount; i++) {
+ var enemy = new Enemy();
+ enemy.x = Math.random() * 1800 + 200;
+ enemy.y = Math.random() * 2400 + 200;
+ enemies.push(enemy);
+ game.addChild(enemy);
+ }
+}
+function createMissionMarker() {
+ var marker = new MissionMarker();
+ marker.x = Math.random() * 1600 + 400;
+ marker.y = Math.random() * 2200 + 400;
+ marker.missionType = 'eliminate';
+ missionMarkers.push(marker);
+ game.addChild(marker);
+}
+function initializeLevel() {
+ mike = new Mike();
+ mike.x = 1024;
+ mike.y = 1366;
+ game.addChild(mike);
+ createBuildings();
+ spawnEnemies();
+ createMissionMarker();
+}
+function handleMove(x, y, obj) {
+ if (dragNode && gameState === 'playing') {
+ dragNode.x = x;
+ dragNode.y = y;
+ }
+ if (mike && gameState === 'playing' && !dragNode) {
+ mike.shoot(x, y);
+ }
+}
+function checkBulletCollisions() {
+ for (var i = bullets.length - 1; i >= 0; i--) {
+ var bullet = bullets[i];
+ var bulletDestroyed = false;
+ if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) {
+ bullet.destroy();
+ bullets.splice(i, 1);
+ continue;
+ }
+ for (var j = enemies.length - 1; j >= 0; j--) {
+ var enemy = enemies[j];
+ if (bullet.intersects(enemy)) {
+ LK.getSound('enemyHit').play();
+ if (enemy.takeDamage()) {
+ enemy.destroy();
+ enemies.splice(j, 1);
+ playerMoney += 25;
+ moneyText.setText('Money: $' + playerMoney);
+ }
+ bullet.destroy();
+ bullets.splice(i, 1);
+ bulletDestroyed = true;
+ break;
+ }
+ }
+ if (bulletDestroyed) continue;
+ for (var k = 0; k < buildings.length; k++) {
+ if (bullet.intersects(buildings[k])) {
+ bullet.destroy();
+ bullets.splice(i, 1);
+ break;
+ }
+ }
+ }
+}
+function checkEnemyBulletCollisions() {
+ for (var i = enemyBullets.length - 1; i >= 0; i--) {
+ var bullet = enemyBullets[i];
+ if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) {
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ continue;
+ }
+ if (mike && bullet.intersects(mike)) {
+ mike.takeDamage();
+ healthText.setText('Health: ' + mike.health);
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ continue;
+ }
+ for (var k = 0; k < buildings.length; k++) {
+ if (bullet.intersects(buildings[k])) {
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ break;
+ }
+ }
+ }
+}
+function checkMissionProgress() {
+ if (enemies.length === 0 && missionMarkers.length > 0) {
+ for (var i = missionMarkers.length - 1; i >= 0; i--) {
+ var marker = missionMarkers[i];
+ if (mike && mike.intersects(marker)) {
+ marker.destroy();
+ missionMarkers.splice(i, 1);
+ completeMission();
+ break;
+ }
+ }
+ }
+}
+function completeMission() {
+ LK.getSound('missionComplete').play();
+ playerMoney += 100;
+ moneyText.setText('Money: $' + playerMoney);
+ currentMission++;
+ if (currentMission > totalMissions) {
+ LK.showYouWin();
+ return;
+ }
+ missionText.setText('Mission: ' + currentMission + '/' + totalMissions);
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ enemies[i].destroy();
+ enemies.splice(i, 1);
+ }
+ for (var j = bullets.length - 1; j >= 0; j--) {
+ bullets[j].destroy();
+ bullets.splice(j, 1);
+ }
+ for (var k = enemyBullets.length - 1; k >= 0; k--) {
+ enemyBullets[k].destroy();
+ enemyBullets.splice(k, 1);
+ }
+ LK.setTimeout(function () {
+ spawnEnemies();
+ createMissionMarker();
+ if (mike) {
+ mike.health = Math.min(mike.health + 2, mike.maxHealth);
+ healthText.setText('Health: ' + mike.health);
+ }
+ }, 1000);
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ if (gameState === 'playing') {
+ dragNode = mike;
+ handleMove(x, y, obj);
+ }
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+game.update = function () {
+ if (gameState !== 'playing') return;
+ checkBulletCollisions();
+ checkEnemyBulletCollisions();
+ checkMissionProgress();
+};
+initializeLevel();
\ No newline at end of file