User prompt
Canavarlar ölünce onlara bir patlama efekti ekle ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Mermi sistemi ekle, 10 mermi olsun
Code edit (1 edits merged)
Please save this source code
User prompt
Monster Hunter Arena
Initial prompt
Karakterimizin elinde silah olsun ve siyah yaratıklar olsun, bunlar haritanın dışından spawn olsun ve bize saldırsın, bizde o silahla onları öldürelim
/****
* 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.velocityX = 0;
self.velocityY = 0;
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
};
return self;
});
var Monster = Container.expand(function () {
var self = Container.call(this);
var monsterGraphics = self.attachAsset('monster', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 1.5;
self.velocityX = 0;
self.velocityY = 0;
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 100;
self.shootCooldown = 0;
self.update = function () {
if (self.shootCooldown > 0) {
self.shootCooldown--;
}
};
self.shoot = function (targetX, targetY) {
if (self.shootCooldown <= 0 && ammo > 0 && reloadTime <= 0) {
var bullet = new Bullet();
bullet.x = self.x;
bullet.y = self.y;
var dx = targetX - self.x;
var dy = targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
bullet.velocityX = dx / distance * 12;
bullet.velocityY = dy / distance * 12;
bullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
self.shootCooldown = 10;
ammo--;
ammoText.setText('Ammo: ' + ammo + '/' + maxAmmo);
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2d5a2d
});
/****
* Game Code
****/
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 / 2;
var monsters = [];
var bullets = [];
var spawnTimer = 0;
var spawnRate = 120; // frames between spawns
var gameRunning = true;
var ammo = 10;
var maxAmmo = 10;
var reloadTime = 0;
var reloadDuration = 180; // 3 seconds at 60fps
// UI Elements
var scoreText = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var healthText = new Text2('Health: 100', {
size: 50,
fill: 0xFF4444
});
healthText.anchor.set(0, 0);
healthText.x = 150;
healthText.y = 50;
LK.gui.topLeft.addChild(healthText);
var ammoText = new Text2('Ammo: 10/10', {
size: 50,
fill: 0x44FF44
});
ammoText.anchor.set(0, 0);
ammoText.x = 150;
ammoText.y = 120;
LK.gui.topLeft.addChild(ammoText);
function spawnMonster() {
var monster = new Monster();
// Spawn from random edge
var edge = Math.floor(Math.random() * 4);
switch (edge) {
case 0:
// Top
monster.x = Math.random() * 2048;
monster.y = -30;
break;
case 1:
// Right
monster.x = 2048 + 30;
monster.y = Math.random() * 2732;
break;
case 2:
// Bottom
monster.x = Math.random() * 2048;
monster.y = 2732 + 30;
break;
case 3:
// Left
monster.x = -30;
monster.y = Math.random() * 2732;
break;
}
// Calculate direction toward player
var dx = player.x - monster.x;
var dy = player.y - monster.y;
var distance = Math.sqrt(dx * dx + dy * dy);
monster.velocityX = dx / distance * monster.speed;
monster.velocityY = dy / distance * monster.speed;
monsters.push(monster);
game.addChild(monster);
}
game.down = function (x, y, obj) {
if (gameRunning) {
player.shoot(x, y);
}
};
game.update = function () {
if (!gameRunning) return;
// Handle reloading
if (ammo <= 0 && reloadTime <= 0) {
reloadTime = reloadDuration;
}
if (reloadTime > 0) {
reloadTime--;
if (reloadTime <= 0) {
ammo = maxAmmo;
ammoText.setText('Ammo: ' + ammo + '/' + maxAmmo);
} else {
var reloadProgress = Math.ceil((reloadDuration - reloadTime) / reloadDuration * 100);
ammoText.setText('Reloading... ' + reloadProgress + '%');
}
}
// Spawn monsters
spawnTimer++;
if (spawnTimer >= spawnRate) {
spawnMonster();
spawnTimer = 0;
// Increase difficulty over time
if (spawnRate > 30) {
spawnRate -= 0.5;
}
}
// Update bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
// Remove bullets that go off screen
if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
// Check bullet-monster collisions
for (var j = monsters.length - 1; j >= 0; j--) {
var monster = monsters[j];
if (bullet.intersects(monster)) {
// Hit monster
LK.getSound('hit').play();
LK.setScore(LK.getScore() + 10);
scoreText.setText('Score: ' + LK.getScore());
// Remove bullet and monster
bullet.destroy();
bullets.splice(i, 1);
monster.destroy();
monsters.splice(j, 1);
break;
}
}
}
// Update monsters and check player collision
for (var k = monsters.length - 1; k >= 0; k--) {
var monster = monsters[k];
if (monster.intersects(player)) {
player.health -= 5;
healthText.setText('Health: ' + player.health);
// Flash player red
LK.effects.flashObject(player, 0xff0000, 200);
// Remove monster
monster.destroy();
monsters.splice(k, 1);
// Check game over
if (player.health <= 0) {
gameRunning = false;
LK.showGameOver();
}
}
}
};
// Start background music
LK.playMusic('battle'); ===================================================================
--- original.js
+++ change.js
@@ -48,9 +48,9 @@
self.shootCooldown--;
}
};
self.shoot = function (targetX, targetY) {
- if (self.shootCooldown <= 0) {
+ if (self.shootCooldown <= 0 && ammo > 0 && reloadTime <= 0) {
var bullet = new Bullet();
bullet.x = self.x;
bullet.y = self.y;
var dx = targetX - self.x;
@@ -61,8 +61,10 @@
bullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
self.shootCooldown = 10;
+ ammo--;
+ ammoText.setText('Ammo: ' + ammo + '/' + maxAmmo);
}
};
return self;
});
@@ -84,8 +86,12 @@
var bullets = [];
var spawnTimer = 0;
var spawnRate = 120; // frames between spawns
var gameRunning = true;
+var ammo = 10;
+var maxAmmo = 10;
+var reloadTime = 0;
+var reloadDuration = 180; // 3 seconds at 60fps
// UI Elements
var scoreText = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
@@ -99,8 +105,16 @@
healthText.anchor.set(0, 0);
healthText.x = 150;
healthText.y = 50;
LK.gui.topLeft.addChild(healthText);
+var ammoText = new Text2('Ammo: 10/10', {
+ size: 50,
+ fill: 0x44FF44
+});
+ammoText.anchor.set(0, 0);
+ammoText.x = 150;
+ammoText.y = 120;
+LK.gui.topLeft.addChild(ammoText);
function spawnMonster() {
var monster = new Monster();
// Spawn from random edge
var edge = Math.floor(Math.random() * 4);
@@ -141,8 +155,22 @@
}
};
game.update = function () {
if (!gameRunning) return;
+ // Handle reloading
+ if (ammo <= 0 && reloadTime <= 0) {
+ reloadTime = reloadDuration;
+ }
+ if (reloadTime > 0) {
+ reloadTime--;
+ if (reloadTime <= 0) {
+ ammo = maxAmmo;
+ ammoText.setText('Ammo: ' + ammo + '/' + maxAmmo);
+ } else {
+ var reloadProgress = Math.ceil((reloadDuration - reloadTime) / reloadDuration * 100);
+ ammoText.setText('Reloading... ' + reloadProgress + '%');
+ }
+ }
// Spawn monsters
spawnTimer++;
if (spawnTimer >= spawnRate) {
spawnMonster();
Silah mermisi. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Player. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Monster. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat