User prompt
0 ile 150 puan arası kaka 150 ile 300 arası kusma 300 ile 400 arası osurma saldırıları olacak ve arka plana banyo resmi koyalım
User prompt
sadece sağa sola haraket edecek ana karakter
User prompt
mouse haraketleriye haraket edecek ana karakter
Code edit (1 edits merged)
Please save this source code
User prompt
Kahraman Kaka: Zombi Saldırısı
Initial prompt
yukardan aşağı doğru gelen zombiler olacak ve ana karakter bu zombileri öldürecek ana karakterin kaka atma özelliği olacak gelen zombiler kusarak saldırı yapabilecek zombiler yavaş gelecek.her bir öldürülen zombi için 10 puan kazanacaz 3 canımız olacak 150 puanda kusma özelliğimiz 300 puanda ossurma 450 puanda sümük atma özelliğimiz olacak kusma efekti çok uzağa gitmiyecek.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Fart = Container.expand(function () { var self = Container.call(this); var gfx = self.attachAsset('fart', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -10; self.update = function () { self.y += self.speed; }; return self; }); // Oyuncu karakteri var Player = Container.expand(function () { var self = Container.call(this); var playerGfx = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.radius = playerGfx.width / 2; self.cooldown = 0; // Atış bekleme süresi self.canAttack = true; self.lives = 3; self.attackType = 'poop'; // Başlangıç saldırısı self.unlockedAttacks = { poop: true, vomit: false, fart: false, snot: false }; // Saldırı tipini güncelle self.updateAttackType = function (score) { if (score >= 450 && !self.unlockedAttacks.snot) { self.unlockedAttacks.snot = true; LK.getSound('unlock').play(); } if (score >= 300 && !self.unlockedAttacks.fart) { self.unlockedAttacks.fart = true; LK.getSound('unlock').play(); } if (score >= 150 && !self.unlockedAttacks.vomit) { self.unlockedAttacks.vomit = true; LK.getSound('unlock').play(); } // Saldırı tipi otomatik değişmesin, oyuncu seçsin (ileride eklenebilir) }; return self; }); // Oyuncu saldırıları var Poop = Container.expand(function () { var self = Container.call(this); var gfx = self.attachAsset('poop', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -22; self.update = function () { self.y += self.speed; }; return self; }); var Snot = Container.expand(function () { var self = Container.call(this); var gfx = self.attachAsset('snot', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -30; self.update = function () { self.y += self.speed; }; return self; }); var Vomit = Container.expand(function () { var self = Container.call(this); var gfx = self.attachAsset('vomit', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -16; self.update = function () { self.y += self.speed; }; return self; }); // Zombi var Zombie = Container.expand(function () { var self = Container.call(this); var zombieGfx = self.attachAsset('zombie', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2 + Math.random() * 1.5; // Rastgele yavaş hız self.vomitCooldown = 90 + Math.floor(Math.random() * 120); // 1.5-3.5 sn arası kusma self.vomitTimer = 0; self.isDead = false; self.update = function () { self.y += self.speed; self.vomitTimer++; }; return self; }); // Zombinin kusmuğu var ZombieVomit = Container.expand(function () { var self = Container.call(this); var gfx = self.attachAsset('zombieVomit', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 12; self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ // Zombi, karakter ve saldırı tipleri için temel şekiller tanımlanıyor // Müzik başlat LK.playMusic('bgmusic'); // Oyun alanı boyutları var GAME_W = 2048; var GAME_H = 2732; // Skor ve can göstergeleri var scoreTxt = new Text2('0', { size: 110, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var livesTxt = new Text2('❤❤❤', { size: 90, fill: 0xFF4444 }); livesTxt.anchor.set(1, 0); LK.gui.topRight.addChild(livesTxt); // Saldırı tipi göstergesi var attackTxt = new Text2('Kaka', { size: 80, fill: 0xFFE066 }); attackTxt.anchor.set(0, 0); LK.gui.topLeft.addChild(attackTxt); // Oyuncu karakteri var player = new Player(); player.x = GAME_W / 2; player.y = GAME_H - 350; game.addChild(player); // Zombiler ve saldırılar için diziler var zombies = []; var playerAttacks = []; var zombieAttacks = []; // Sürükleme için var dragNode = null; // Saldırı tipleri ve isimleri var attackTypes = ['poop', 'vomit', 'fart', 'snot']; var attackNames = { poop: 'Kaka', vomit: 'Kusmuk', fart: 'Osuruk', snot: 'Sümük' }; // Saldırı tipini değiştirme (ekranın sol üstüne tıklayınca) attackTxt.down = function (x, y, obj) { // Sadece açılmış saldırılar arasında döngü var unlocked = []; for (var i = 0; i < attackTypes.length; i++) { if (player.unlockedAttacks[attackTypes[i]]) unlocked.push(attackTypes[i]); } var idx = unlocked.indexOf(player.attackType); idx = (idx + 1) % unlocked.length; player.attackType = unlocked[idx]; attackTxt.setText(attackNames[player.attackType]); }; LK.gui.topLeft.addChild(attackTxt); // Zombi oluşturucu function spawnZombie() { var z = new Zombie(); z.x = 180 + Math.random() * (GAME_W - 360); z.y = -100; zombies.push(z); game.addChild(z); } // Zombi saldırısı oluşturucu function spawnZombieVomit(zombie) { var zv = new ZombieVomit(); zv.x = zombie.x; zv.y = zombie.y + 80; zombieAttacks.push(zv); game.addChild(zv); LK.getSound('zombieVomit').play(); } // Saldırı oluşturucu function spawnPlayerAttack() { var atk; if (player.attackType === 'poop') { atk = new Poop(); } else if (player.attackType === 'vomit') { atk = new Vomit(); } else if (player.attackType === 'fart') { atk = new Fart(); } else if (player.attackType === 'snot') { atk = new Snot(); } atk.x = player.x; atk.y = player.y - 90; playerAttacks.push(atk); game.addChild(atk); LK.getSound('attack').play(); } // Saldırı tipi güncelleme function updateAttackUnlocks() { var score = LK.getScore(); player.updateAttackType(score); attackTxt.setText(attackNames[player.attackType]); } // Can güncelle function updateLives() { var s = ''; for (var i = 0; i < player.lives; i++) s += '❤'; livesTxt.setText(s); } // Sürükleme ve hareket function handleMove(x, y, obj) { if (dragNode) { // Sınırlar var px = Math.max(120, Math.min(GAME_W - 120, x)); var py = Math.max(GAME_H - 700, Math.min(GAME_H - 120, y)); dragNode.x = px; dragNode.y = py; } } game.move = handleMove; game.down = function (x, y, obj) { // Sadece karaktere tıklanırsa sürükle if (Math.abs(x - player.x) < 120 && Math.abs(y - player.y) < 120) { dragNode = player; } }; game.up = function (x, y, obj) { dragNode = null; }; // Ekrana dokununca saldırı (karaktere dokunulmazsa) game.down = function (x, y, obj) { if (Math.abs(x - player.x) < 120 && Math.abs(y - player.y) < 120) { dragNode = player; } else { // Saldırı if (player.canAttack) { spawnPlayerAttack(); player.canAttack = false; // Saldırı bekleme süresi saldırı tipine göre değişir var cd = 18; if (player.attackType === 'vomit') cd = 28; if (player.attackType === 'fart') cd = 36; if (player.attackType === 'snot') cd = 50; player.cooldown = cd; } } }; // Oyun döngüsü game.update = function () { // Saldırı bekleme if (!player.canAttack) { player.cooldown--; if (player.cooldown <= 0) { player.canAttack = true; } } // Zombiler for (var i = zombies.length - 1; i >= 0; i--) { var z = zombies[i]; z.update(); // Zombi ekrandan çıktıysa if (z.y > GAME_H + 100) { z.destroy(); zombies.splice(i, 1); continue; } // Zombi oyuncuya çarptı mı? if (!z.isDead && z.intersects(player)) { z.isDead = true; z.destroy(); zombies.splice(i, 1); player.lives--; updateLives(); LK.effects.flashObject(player, 0xff0000, 600); if (player.lives <= 0) { LK.effects.flashScreen(0xff0000, 1200); LK.showGameOver(); return; } continue; } // Zombi kusacak mı? if (z.vomitTimer >= z.vomitCooldown) { spawnZombieVomit(z); z.vomitTimer = 0; z.vomitCooldown = 90 + Math.floor(Math.random() * 120); } } // Oyuncu saldırıları for (var i = playerAttacks.length - 1; i >= 0; i--) { var atk = playerAttacks[i]; atk.update(); // Ekrandan çıktıysa if (atk.y < -100) { atk.destroy(); playerAttacks.splice(i, 1); continue; } // Zombiye çarptı mı? for (var j = zombies.length - 1; j >= 0; j--) { var z = zombies[j]; if (!z.isDead && atk.intersects(z)) { z.isDead = true; z.destroy(); zombies.splice(j, 1); atk.destroy(); playerAttacks.splice(i, 1); // Skor LK.setScore(LK.getScore() + 10); scoreTxt.setText(LK.getScore()); updateAttackUnlocks(); // Kazanma yok, amaç hayatta kalmak break; } } } // Zombi saldırıları for (var i = zombieAttacks.length - 1; i >= 0; i--) { var zv = zombieAttacks[i]; zv.update(); // Ekrandan çıktıysa if (zv.y > GAME_H + 100) { zv.destroy(); zombieAttacks.splice(i, 1); continue; } // Oyuncuya çarptı mı? if (zv.intersects(player)) { zv.destroy(); zombieAttacks.splice(i, 1); player.lives--; updateLives(); LK.effects.flashObject(player, 0x00ff00, 600); if (player.lives <= 0) { LK.effects.flashScreen(0xff0000, 1200); LK.showGameOver(); return; } continue; } } // Zombi üretimi (her 60-90 tickte bir) if (LK.ticks % (60 + Math.floor(Math.random() * 30)) === 0) { if (zombies.length < 7) spawnZombie(); } }; // Oyun başında ilk zombi spawnZombie(); updateLives(); updateAttackUnlocks(); scoreTxt.setText(LK.getScore()); attackTxt.setText(attackNames[player.attackType]);
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,382 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Fart = Container.expand(function () {
+ var self = Container.call(this);
+ var gfx = self.attachAsset('fart', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -10;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+// Oyuncu karakteri
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGfx = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.radius = playerGfx.width / 2;
+ self.cooldown = 0; // Atış bekleme süresi
+ self.canAttack = true;
+ self.lives = 3;
+ self.attackType = 'poop'; // Başlangıç saldırısı
+ self.unlockedAttacks = {
+ poop: true,
+ vomit: false,
+ fart: false,
+ snot: false
+ };
+ // Saldırı tipini güncelle
+ self.updateAttackType = function (score) {
+ if (score >= 450 && !self.unlockedAttacks.snot) {
+ self.unlockedAttacks.snot = true;
+ LK.getSound('unlock').play();
+ }
+ if (score >= 300 && !self.unlockedAttacks.fart) {
+ self.unlockedAttacks.fart = true;
+ LK.getSound('unlock').play();
+ }
+ if (score >= 150 && !self.unlockedAttacks.vomit) {
+ self.unlockedAttacks.vomit = true;
+ LK.getSound('unlock').play();
+ }
+ // Saldırı tipi otomatik değişmesin, oyuncu seçsin (ileride eklenebilir)
+ };
+ return self;
+});
+// Oyuncu saldırıları
+var Poop = Container.expand(function () {
+ var self = Container.call(this);
+ var gfx = self.attachAsset('poop', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -22;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var Snot = Container.expand(function () {
+ var self = Container.call(this);
+ var gfx = self.attachAsset('snot', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -30;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var Vomit = Container.expand(function () {
+ var self = Container.call(this);
+ var gfx = self.attachAsset('vomit', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -16;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+// Zombi
+var Zombie = Container.expand(function () {
+ var self = Container.call(this);
+ var zombieGfx = self.attachAsset('zombie', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2 + Math.random() * 1.5; // Rastgele yavaş hız
+ self.vomitCooldown = 90 + Math.floor(Math.random() * 120); // 1.5-3.5 sn arası kusma
+ self.vomitTimer = 0;
+ self.isDead = false;
+ self.update = function () {
+ self.y += self.speed;
+ self.vomitTimer++;
+ };
+ return self;
+});
+// Zombinin kusmuğu
+var ZombieVomit = Container.expand(function () {
+ var self = Container.call(this);
+ var gfx = self.attachAsset('zombieVomit', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 12;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x222222
+});
+
+/****
+* Game Code
+****/
+// Zombi, karakter ve saldırı tipleri için temel şekiller tanımlanıyor
+// Müzik başlat
+LK.playMusic('bgmusic');
+// Oyun alanı boyutları
+var GAME_W = 2048;
+var GAME_H = 2732;
+// Skor ve can göstergeleri
+var scoreTxt = new Text2('0', {
+ size: 110,
+ fill: "#fff"
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+var livesTxt = new Text2('❤❤❤', {
+ size: 90,
+ fill: 0xFF4444
+});
+livesTxt.anchor.set(1, 0);
+LK.gui.topRight.addChild(livesTxt);
+// Saldırı tipi göstergesi
+var attackTxt = new Text2('Kaka', {
+ size: 80,
+ fill: 0xFFE066
+});
+attackTxt.anchor.set(0, 0);
+LK.gui.topLeft.addChild(attackTxt);
+// Oyuncu karakteri
+var player = new Player();
+player.x = GAME_W / 2;
+player.y = GAME_H - 350;
+game.addChild(player);
+// Zombiler ve saldırılar için diziler
+var zombies = [];
+var playerAttacks = [];
+var zombieAttacks = [];
+// Sürükleme için
+var dragNode = null;
+// Saldırı tipleri ve isimleri
+var attackTypes = ['poop', 'vomit', 'fart', 'snot'];
+var attackNames = {
+ poop: 'Kaka',
+ vomit: 'Kusmuk',
+ fart: 'Osuruk',
+ snot: 'Sümük'
+};
+// Saldırı tipini değiştirme (ekranın sol üstüne tıklayınca)
+attackTxt.down = function (x, y, obj) {
+ // Sadece açılmış saldırılar arasında döngü
+ var unlocked = [];
+ for (var i = 0; i < attackTypes.length; i++) {
+ if (player.unlockedAttacks[attackTypes[i]]) unlocked.push(attackTypes[i]);
+ }
+ var idx = unlocked.indexOf(player.attackType);
+ idx = (idx + 1) % unlocked.length;
+ player.attackType = unlocked[idx];
+ attackTxt.setText(attackNames[player.attackType]);
+};
+LK.gui.topLeft.addChild(attackTxt);
+// Zombi oluşturucu
+function spawnZombie() {
+ var z = new Zombie();
+ z.x = 180 + Math.random() * (GAME_W - 360);
+ z.y = -100;
+ zombies.push(z);
+ game.addChild(z);
+}
+// Zombi saldırısı oluşturucu
+function spawnZombieVomit(zombie) {
+ var zv = new ZombieVomit();
+ zv.x = zombie.x;
+ zv.y = zombie.y + 80;
+ zombieAttacks.push(zv);
+ game.addChild(zv);
+ LK.getSound('zombieVomit').play();
+}
+// Saldırı oluşturucu
+function spawnPlayerAttack() {
+ var atk;
+ if (player.attackType === 'poop') {
+ atk = new Poop();
+ } else if (player.attackType === 'vomit') {
+ atk = new Vomit();
+ } else if (player.attackType === 'fart') {
+ atk = new Fart();
+ } else if (player.attackType === 'snot') {
+ atk = new Snot();
+ }
+ atk.x = player.x;
+ atk.y = player.y - 90;
+ playerAttacks.push(atk);
+ game.addChild(atk);
+ LK.getSound('attack').play();
+}
+// Saldırı tipi güncelleme
+function updateAttackUnlocks() {
+ var score = LK.getScore();
+ player.updateAttackType(score);
+ attackTxt.setText(attackNames[player.attackType]);
+}
+// Can güncelle
+function updateLives() {
+ var s = '';
+ for (var i = 0; i < player.lives; i++) s += '❤';
+ livesTxt.setText(s);
+}
+// Sürükleme ve hareket
+function handleMove(x, y, obj) {
+ if (dragNode) {
+ // Sınırlar
+ var px = Math.max(120, Math.min(GAME_W - 120, x));
+ var py = Math.max(GAME_H - 700, Math.min(GAME_H - 120, y));
+ dragNode.x = px;
+ dragNode.y = py;
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ // Sadece karaktere tıklanırsa sürükle
+ if (Math.abs(x - player.x) < 120 && Math.abs(y - player.y) < 120) {
+ dragNode = player;
+ }
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// Ekrana dokununca saldırı (karaktere dokunulmazsa)
+game.down = function (x, y, obj) {
+ if (Math.abs(x - player.x) < 120 && Math.abs(y - player.y) < 120) {
+ dragNode = player;
+ } else {
+ // Saldırı
+ if (player.canAttack) {
+ spawnPlayerAttack();
+ player.canAttack = false;
+ // Saldırı bekleme süresi saldırı tipine göre değişir
+ var cd = 18;
+ if (player.attackType === 'vomit') cd = 28;
+ if (player.attackType === 'fart') cd = 36;
+ if (player.attackType === 'snot') cd = 50;
+ player.cooldown = cd;
+ }
+ }
+};
+// Oyun döngüsü
+game.update = function () {
+ // Saldırı bekleme
+ if (!player.canAttack) {
+ player.cooldown--;
+ if (player.cooldown <= 0) {
+ player.canAttack = true;
+ }
+ }
+ // Zombiler
+ for (var i = zombies.length - 1; i >= 0; i--) {
+ var z = zombies[i];
+ z.update();
+ // Zombi ekrandan çıktıysa
+ if (z.y > GAME_H + 100) {
+ z.destroy();
+ zombies.splice(i, 1);
+ continue;
+ }
+ // Zombi oyuncuya çarptı mı?
+ if (!z.isDead && z.intersects(player)) {
+ z.isDead = true;
+ z.destroy();
+ zombies.splice(i, 1);
+ player.lives--;
+ updateLives();
+ LK.effects.flashObject(player, 0xff0000, 600);
+ if (player.lives <= 0) {
+ LK.effects.flashScreen(0xff0000, 1200);
+ LK.showGameOver();
+ return;
+ }
+ continue;
+ }
+ // Zombi kusacak mı?
+ if (z.vomitTimer >= z.vomitCooldown) {
+ spawnZombieVomit(z);
+ z.vomitTimer = 0;
+ z.vomitCooldown = 90 + Math.floor(Math.random() * 120);
+ }
+ }
+ // Oyuncu saldırıları
+ for (var i = playerAttacks.length - 1; i >= 0; i--) {
+ var atk = playerAttacks[i];
+ atk.update();
+ // Ekrandan çıktıysa
+ if (atk.y < -100) {
+ atk.destroy();
+ playerAttacks.splice(i, 1);
+ continue;
+ }
+ // Zombiye çarptı mı?
+ for (var j = zombies.length - 1; j >= 0; j--) {
+ var z = zombies[j];
+ if (!z.isDead && atk.intersects(z)) {
+ z.isDead = true;
+ z.destroy();
+ zombies.splice(j, 1);
+ atk.destroy();
+ playerAttacks.splice(i, 1);
+ // Skor
+ LK.setScore(LK.getScore() + 10);
+ scoreTxt.setText(LK.getScore());
+ updateAttackUnlocks();
+ // Kazanma yok, amaç hayatta kalmak
+ break;
+ }
+ }
+ }
+ // Zombi saldırıları
+ for (var i = zombieAttacks.length - 1; i >= 0; i--) {
+ var zv = zombieAttacks[i];
+ zv.update();
+ // Ekrandan çıktıysa
+ if (zv.y > GAME_H + 100) {
+ zv.destroy();
+ zombieAttacks.splice(i, 1);
+ continue;
+ }
+ // Oyuncuya çarptı mı?
+ if (zv.intersects(player)) {
+ zv.destroy();
+ zombieAttacks.splice(i, 1);
+ player.lives--;
+ updateLives();
+ LK.effects.flashObject(player, 0x00ff00, 600);
+ if (player.lives <= 0) {
+ LK.effects.flashScreen(0xff0000, 1200);
+ LK.showGameOver();
+ return;
+ }
+ continue;
+ }
+ }
+ // Zombi üretimi (her 60-90 tickte bir)
+ if (LK.ticks % (60 + Math.floor(Math.random() * 30)) === 0) {
+ if (zombies.length < 7) spawnZombie();
+ }
+};
+// Oyun başında ilk zombi
+spawnZombie();
+updateLives();
+updateAttackUnlocks();
+scoreTxt.setText(LK.getScore());
+attackTxt.setText(attackNames[player.attackType]);
\ No newline at end of file
poop. In-Game asset. 2d. High contrast. No shadows
vomit. In-Game asset. 2d. High contrast. No shadows
bathrom. In-Game asset. 2d. High contrast. No shadows
fart animation. In-Game asset. 2d. High contrast. No shadows
yuvarlak mavi elektirikli kalkan. In-Game asset. 2d. High contrast. No shadows
snot. In-Game asset. 2d. High contrast. No shadows
transparent