User prompt
ama biz dolaba saklandığımızda bizi görmesin ama biz saklanmazsak bize saldırıp canımızı azaltsın ve yukarda can barımız olsun
User prompt
her 15 saniyede bir giriş kapısından hayalet gelsin, kapı açılıp geri kapansın ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
üst katta bir dolap olsun ve dolaba basınca karakter dolabın içine saklansın
User prompt
karakter sadece merdivenden yukarı çıkabilsin başka türlü çıkamasın
User prompt
karakterimiz merdiven hariç hiç bir şekilde üst kata çıkamasın ve üst kata iki oda olsun
User prompt
iki katın arasındaki boşluk olmasın ve merdiven üzerinde yürüyebiliceğimiz bir merdiven olsun
User prompt
şimdi öncelikle karakter evin duvarlarından dışarıya çıkamasın ve birinci kattan ikinci kata bir merdiven olsun
User prompt
ev ekranı kaplayacak büyüklükte olsun
User prompt
hava sisli olmasın ama ev daha büyük olsun
User prompt
öncelikle bir ev olsun ev bodrum katı hariç 2 katlı olsun bodrum katının kapısı kilitli olsun evin çıkış kapısı da kilitli olsun korku oyunu yapacağım için hava biraz sisli olsun
User prompt
Dark House Explorer
Initial prompt
bana bir ev yap ev iki katı olsun ha bide korku oyunu yapacağım için biraz karanlık olsun
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Ghost = Container.expand(function () { var self = Container.call(this); var ghostGraphics = self.attachAsset('ghost', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self.alpha = 0.7; ghostGraphics.alpha = 0.7; self.update = function () { // Move ghost towards player only if player is not hidden if (!playerHidden) { var dx = player.x - self.x; var dy = player.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 0) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } // Attack player if close enough and player is not hidden if (distance < 80) { // Damage player if (self.lastAttackTime === undefined) self.lastAttackTime = 0; var currentTime = LK.ticks; if (currentTime - self.lastAttackTime > 60) { // Attack once per second playerHealth -= 10; self.lastAttackTime = currentTime; updateHealthBar(); // Flash player red when damaged LK.effects.flashObject(player, 0xff0000, 500); // Check if player is dead if (playerHealth <= 0) { LK.showGameOver(); return; } } } } else { // If player is hidden, ghost moves randomly self.x += (Math.random() - 0.5) * 4; self.y += (Math.random() - 0.5) * 4; } // Remove ghost if it goes off screen or after some time if (self.x < -100 || self.x > 2148 || self.y < -100 || self.y > 2832) { self.destroy(); for (var i = ghosts.length - 1; i >= 0; i--) { if (ghosts[i] === self) { ghosts.splice(i, 1); break; } } } }; return self; }); var House = Container.expand(function () { var self = Container.call(this); // Ground floor var groundFloorWall = self.attachAsset('houseWall', { x: 0, y: 1200 }); var groundFloor = self.attachAsset('houseFloor', { x: 0, y: 1800 }); // Second floor var secondFloorWall = self.attachAsset('houseWall', { x: 0, y: 600 }); var secondFloor = self.attachAsset('houseFloor', { x: 0, y: 1200 }); // Stairs connecting floors - make them walkable var stairway = self.attachAsset('stairs', { x: 974, y: 1200, width: 100, height: 600 }); // Second floor room dividers var roomWall1 = self.attachAsset('houseWall', { x: 1024, y: 600, width: 20, height: 600 }); var roomWall2 = self.attachAsset('houseWall', { x: 0, y: 900, width: 1024, height: 20 }); var roomWall3 = self.attachAsset('houseWall', { x: 1044, y: 900, width: 1004, height: 20 }); // Floor barriers to prevent jumping between floors (except stairs) var floorBarrierLeft = self.attachAsset('houseWall', { x: 0, y: 1200, width: 974, height: 20 }); var floorBarrierRight = self.attachAsset('houseWall', { x: 1074, y: 1200, width: 974, height: 20 }); // Store barrier references for collision detection self.roomWall1 = roomWall1; self.roomWall2 = roomWall2; self.roomWall3 = roomWall3; self.floorBarrierLeft = floorBarrierLeft; self.floorBarrierRight = floorBarrierRight; // Windows var window1 = self.attachAsset('window', { x: 300, y: 700 }); var window2 = self.attachAsset('window', { x: 800, y: 700 }); var window3 = self.attachAsset('window', { x: 1200, y: 700 }); var window4 = self.attachAsset('window', { x: 1600, y: 700 }); var window5 = self.attachAsset('window', { x: 300, y: 1300 }); var window6 = self.attachAsset('window', { x: 800, y: 1300 }); var window7 = self.attachAsset('window', { x: 1200, y: 1300 }); var window8 = self.attachAsset('window', { x: 1600, y: 1300 }); // Exit door (locked) var exitDoor = self.attachAsset('door', { x: 1900, y: 1620 }); var exitLock = self.attachAsset('lock', { x: 1970, y: 1660 }); // Basement door (locked) var basementDoor = self.attachAsset('door', { x: 100, y: 1620 }); var basementLock = self.attachAsset('lock', { x: 170, y: 1660 }); // Closet on second floor var closet = self.attachAsset('closet', { x: 1800, y: 680 }); // Entrance door var entranceDoor = self.attachAsset('door', { x: 50, y: 1620 }); // Store door and closet references for game logic self.exitDoor = exitDoor; self.basementDoor = basementDoor; self.entranceDoor = entranceDoor; self.closet = closet; self.exitLocked = true; self.basementLocked = true; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; return self; }); /**** * Initialize Game ****/ // Set dark atmospheric background var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // House structure assets // Set dark atmospheric background game.setBackgroundColor(0x0a0a0a); // Create the two-story house var house = game.addChild(new House()); // Position house to fill entire screen house.x = 0; house.y = 0; // Create player var player = game.addChild(new Player()); player.x = 2048 / 2; player.y = 1750; // Start on ground floor // Variables for player movement var dragNode = null; // Game state variables var gameStarted = false; var playerHidden = false; var originalPlayerAlpha = 1; var ghosts = []; var ghostSpawnTimer = 0; var playerHealth = 100; var maxHealth = 100; // Create health bar var healthBarBg = new Text2('', { size: 40, fill: 0x333333 }); healthBarBg.anchor.set(0.5, 0); healthBarBg.x = 0; healthBarBg.y = 60; LK.gui.top.addChild(healthBarBg); var healthBarFill = new Text2('', { size: 40, fill: 0xff0000 }); healthBarFill.anchor.set(0, 0); healthBarFill.x = -200; healthBarFill.y = 60; LK.gui.top.addChild(healthBarFill); var healthText = new Text2('Health: 100/100', { size: 40, fill: 0xffffff }); healthText.anchor.set(0.5, 0); healthText.x = 0; healthText.y = 110; LK.gui.top.addChild(healthText); // Function to update health bar function updateHealthBar() { var healthPercent = playerHealth / maxHealth; var barWidth = Math.floor(400 * healthPercent); healthBarBg.setText('████████████████████████████████████████'); healthBarFill.setText('█'.repeat(Math.floor(40 * healthPercent))); healthText.setText('Health: ' + playerHealth + '/' + maxHealth); } // Initialize health bar updateHealthBar(); // Touch controls for player movement game.down = function (x, y, obj) { // Check if clicked on closet var closetBounds = { x: house.closet.x, y: house.closet.y, width: 80, height: 120 }; if (x >= closetBounds.x && x <= closetBounds.x + closetBounds.width && y >= closetBounds.y && y <= closetBounds.y + closetBounds.height) { // Toggle hiding in closet if (!playerHidden) { // Hide player in closet player.x = closetBounds.x + closetBounds.width / 2; player.y = closetBounds.y + closetBounds.height / 2; player.alpha = 0.3; // Make player semi-transparent playerHidden = true; return; // Don't set drag node when hiding } else { // Come out of closet player.alpha = originalPlayerAlpha; playerHidden = false; return; // Don't set drag node when coming out } } // Only allow dragging if not hidden if (!playerHidden) { dragNode = player; } // Apply collision boundaries to keep player inside house walls var newX = x; var newY = y; // Horizontal boundaries (house walls at x=0 and x=2048) if (newX < 20) newX = 20; // Left wall boundary if (newX > 2028) newX = 2028; // Right wall boundary // Vertical boundaries if (newY < 620) newY = 620; // Top of second floor if (newY > 1800) newY = 1800; // Bottom of ground floor // Floor barrier collision - prevent jumping between floors except via stairs // Strict floor separation - only allow movement between floors in stairs area if (player.y <= 1200 && newY > 1200) { // Player trying to move from second floor to ground floor if (newX < 974 || newX > 1074) { // Not in stairs area - block movement newY = 1200; // Keep on second floor } } else if (player.y > 1200 && newY <= 1200) { // Player trying to move from ground floor to second floor if (newX < 974 || newX > 1074) { // Not in stairs area - block movement newY = 1201; // Keep on ground floor } } // Second floor room wall collisions if (newY >= 600 && newY <= 1200) { // Vertical room divider at x=1024 if (newX > 1024 && newX < 1044 && newY >= 600 && newY <= 1200) { if (player.x <= 1024) { newX = 1024; } else { newX = 1044; } } // Horizontal room dividers at y=900 if (newY > 900 && newY < 920) { if (newX < 1024 || newX > 1044) { if (player.y <= 900) { newY = 900; } else { newY = 920; } } } } player.x = newX; player.y = newY; }; game.move = function (x, y, obj) { if (dragNode && !playerHidden) { // Apply collision boundaries to keep player inside house walls var newX = x; var newY = y; // Horizontal boundaries (house walls at x=0 and x=2048) if (newX < 20) newX = 20; // Left wall boundary if (newX > 2028) newX = 2028; // Right wall boundary // Vertical boundaries if (newY < 620) newY = 620; // Top of second floor if (newY > 1800) newY = 1800; // Bottom of ground floor // Floor barrier collision - prevent jumping between floors except via stairs // Strict floor separation - only allow movement between floors in stairs area if (dragNode.y <= 1200 && newY > 1200) { // Player trying to move from second floor to ground floor if (newX < 974 || newX > 1074) { // Not in stairs area - block movement newY = 1200; // Keep on second floor } } else if (dragNode.y > 1200 && newY <= 1200) { // Player trying to move from ground floor to second floor if (newX < 974 || newX > 1074) { // Not in stairs area - block movement newY = 1201; // Keep on ground floor } } // Second floor room wall collisions if (newY >= 600 && newY <= 1200) { // Vertical room divider at x=1024 if (newX > 1024 && newX < 1044 && newY >= 600 && newY <= 1200) { if (dragNode.x <= 1024) { newX = 1024; } else { newX = 1044; } } // Horizontal room dividers at y=900 if (newY > 900 && newY < 920) { if (newX < 1024 || newX > 1044) { if (dragNode.y <= 900) { newY = 900; } else { newY = 920; } } } } dragNode.x = newX; dragNode.y = newY; } }; game.up = function (x, y, obj) { dragNode = null; }; // Player floor tracking var playerFloor = 1; // 1 = ground floor, 2 = second floor // Game update loop for stair interaction game.update = function () { // Check if player is on stairs area (walkable stairs) var stairLeft = 974; var stairRight = 974 + 100; var stairTop = 1200; var stairBottom = 1800; // Determine current floor based on Y position if (player.y <= 1200) { playerFloor = 2; // Second floor } else if (player.y >= 1200) { playerFloor = 1; // Ground floor } // Allow player to walk freely on stairs - no special collision needed // as stairs are now part of the walkable area between floors // Update collision boundaries - allow movement between floors via stairs if (player.y > 1800) player.y = 1800; // Bottom boundary if (player.y < 620) player.y = 620; // Top boundary // Ghost spawning system - every 15 seconds (900 ticks at 60fps) ghostSpawnTimer++; if (ghostSpawnTimer >= 900) { ghostSpawnTimer = 0; spawnGhost(); } }; // Ghost spawning function function spawnGhost() { // Animate door opening tween(house.entranceDoor, { scaleX: 0.1 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { // Create ghost at entrance door var ghost = new Ghost(); ghost.x = house.entranceDoor.x + 40; ghost.y = house.entranceDoor.y + 60; ghosts.push(ghost); game.addChild(ghost); // Close door after ghost spawns tween(house.entranceDoor, { scaleX: 1 }, { duration: 300, easing: tween.easeIn }); } }); } // Display instructions var instructionText = new Text2('Explore the haunted house\nUse stairs to move between floors\nExit and basement doors are locked', { size: 50, fill: 0xCCCCCC }); instructionText.anchor.set(0.5, 0); LK.gui.top.addChild(instructionText); ;
===================================================================
--- original.js
+++ change.js
@@ -15,18 +15,43 @@
self.speed = 2;
self.alpha = 0.7;
ghostGraphics.alpha = 0.7;
self.update = function () {
- // Move ghost towards player
- var dx = player.x - self.x;
- var dy = player.y - self.y;
- var distance = Math.sqrt(dx * dx + dy * dy);
- if (distance > 0) {
- self.x += dx / distance * self.speed;
- self.y += dy / distance * self.speed;
+ // Move ghost towards player only if player is not hidden
+ if (!playerHidden) {
+ var dx = player.x - self.x;
+ var dy = player.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 0) {
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ }
+ // Attack player if close enough and player is not hidden
+ if (distance < 80) {
+ // Damage player
+ if (self.lastAttackTime === undefined) self.lastAttackTime = 0;
+ var currentTime = LK.ticks;
+ if (currentTime - self.lastAttackTime > 60) {
+ // Attack once per second
+ playerHealth -= 10;
+ self.lastAttackTime = currentTime;
+ updateHealthBar();
+ // Flash player red when damaged
+ LK.effects.flashObject(player, 0xff0000, 500);
+ // Check if player is dead
+ if (playerHealth <= 0) {
+ LK.showGameOver();
+ return;
+ }
+ }
+ }
+ } else {
+ // If player is hidden, ghost moves randomly
+ self.x += (Math.random() - 0.5) * 4;
+ self.y += (Math.random() - 0.5) * 4;
}
- // Remove ghost if it gets too close to player or goes off screen
- if (distance < 50 || self.x < -100 || self.x > 2148 || self.y < -100 || self.y > 2832) {
+ // Remove ghost if it goes off screen or after some time
+ if (self.x < -100 || self.x > 2148 || self.y < -100 || self.y > 2832) {
self.destroy();
for (var i = ghosts.length - 1; i >= 0; i--) {
if (ghosts[i] === self) {
ghosts.splice(i, 1);
@@ -212,8 +237,45 @@
var playerHidden = false;
var originalPlayerAlpha = 1;
var ghosts = [];
var ghostSpawnTimer = 0;
+var playerHealth = 100;
+var maxHealth = 100;
+// Create health bar
+var healthBarBg = new Text2('', {
+ size: 40,
+ fill: 0x333333
+});
+healthBarBg.anchor.set(0.5, 0);
+healthBarBg.x = 0;
+healthBarBg.y = 60;
+LK.gui.top.addChild(healthBarBg);
+var healthBarFill = new Text2('', {
+ size: 40,
+ fill: 0xff0000
+});
+healthBarFill.anchor.set(0, 0);
+healthBarFill.x = -200;
+healthBarFill.y = 60;
+LK.gui.top.addChild(healthBarFill);
+var healthText = new Text2('Health: 100/100', {
+ size: 40,
+ fill: 0xffffff
+});
+healthText.anchor.set(0.5, 0);
+healthText.x = 0;
+healthText.y = 110;
+LK.gui.top.addChild(healthText);
+// Function to update health bar
+function updateHealthBar() {
+ var healthPercent = playerHealth / maxHealth;
+ var barWidth = Math.floor(400 * healthPercent);
+ healthBarBg.setText('████████████████████████████████████████');
+ healthBarFill.setText('█'.repeat(Math.floor(40 * healthPercent)));
+ healthText.setText('Health: ' + playerHealth + '/' + maxHealth);
+}
+// Initialize health bar
+updateHealthBar();
// Touch controls for player movement
game.down = function (x, y, obj) {
// Check if clicked on closet
var closetBounds = {
merdiven. In-Game asset. 2d. High contrast. No shadows
pencere. In-Game asset. 2d. High contrast. No shadows
pikselli bir karakter ama kız. In-Game asset. 2d. High contrast. No shadows
siyah sade uzun duvar. In-Game asset. 2d. High contrast. No shadows
hayalet. In-Game asset. 2d. High contrast. No shadows
kapı ama eskimiş. In-Game asset. 2d. High contrast. No shadows
silah gerçek. In-Game asset. 2d. High contrast. No shadows
anahtar. In-Game asset. 2d. High contrast. No shadows