User prompt
kolaylaştıralım
Code edit (1 edits merged)
Please save this source code
User prompt
Kilitli Kapı: Anahtar Seçimi
Initial prompt
5. Kilitli Kapı Amaç: 5 kapıdan doğru anahtarı seç. Nasıl oynanır: Her kapının önünde 1 anahtar var Yanlış seçersen oyun biter Doğru 5 kapıdan geçersen kazanırsın Zorluk: Basit ama şansına bağlı
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Door class: represents a door var Door = Container.expand(function () { var self = Container.call(this); // Attach door asset (rectangle shape) var doorAsset = self.attachAsset('doorShape', { anchorX: 0.5, anchorY: 0.5 }); // Door index (0-4) self.doorIndex = 0; // Animate door opening self.open = function () { // Animate scaleX to 0 (door "opens") tween(doorAsset, { scaleX: 0 }, { duration: 400, easing: tween.cubicIn }); }; // Animate door closing (reset) self.close = function () { doorAsset.scaleX = 1; }; return self; }); // Key class: represents a key in front of a door var Key = Container.expand(function () { var self = Container.call(this); // Attach key asset (ellipse shape) var keyAsset = self.attachAsset('keyShape', { anchorX: 0.5, anchorY: 0.5 }); // Store which door this key belongs to self.doorIndex = 0; // Is this the correct key for the door? self.isCorrect = false; // Visual feedback for selection self.flash = function (color, duration) { tween(keyAsset, { tint: color }, { duration: duration / 2, onFinish: function onFinish() { tween(keyAsset, { tint: 0xf7d560 }, { duration: duration / 2 }); } }); }; // Handle touch/click self.down = function (x, y, obj) { if (game.state !== 'waitingForKey') return; game.handleKeySelection(self); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2d2d2d }); /**** * Game Code ****/ // --- Game Variables --- // --- Asset Initialization (shapes) --- var NUM_DOORS = 5; var doors = []; var keys = []; var currentDoor = 0; // 0-based index var correctKeyIndexes = []; // For each door, which key is correct (0-4) var stateText = null; var infoText = null; // --- GUI: Progress/Info --- stateText = new Text2('', { size: 100, fill: 0xFFFFFF }); stateText.anchor.set(0.5, 0); LK.gui.top.addChild(stateText); infoText = new Text2('', { size: 70, fill: 0xFFE9A0 }); infoText.anchor.set(0.5, 0); LK.gui.bottom.addChild(infoText); // --- Layout Constants --- var gameWidth = 2048; var gameHeight = 2732; var doorsY = 700; var keysY = 1300; var spacing = 340; // horizontal space between doors/keys // --- Helper: Shuffle array in-place --- function shuffle(arr) { for (var i = arr.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } // --- Helper: Set state text --- function setStateText(txt) { stateText.setText(txt); } // --- Helper: Set info text --- function setInfoText(txt) { infoText.setText(txt); } // --- Setup doors and keys --- function setupDoorsAndKeys() { // Remove old doors/keys if any for (var i = 0; i < doors.length; i++) { doors[i].destroy(); } for (var i = 0; i < keys.length; i++) { keys[i].destroy(); } doors = []; keys = []; // For each door, create a Door instance and a Key instance for (var i = 0; i < NUM_DOORS; i++) { // Door var door = new Door(); door.doorIndex = i; // Center doors horizontally door.x = gameWidth / 2 - (NUM_DOORS - 1) * spacing / 2 + i * spacing; door.y = doorsY; game.addChild(door); doors.push(door); // Key var key = new Key(); key.doorIndex = i; // Center keys horizontally, align with doors key.x = door.x; key.y = keysY; game.addChild(key); keys.push(key); } } // --- Setup correct keys for each door (randomly assign one correct key per door) --- function setupCorrectKeys() { correctKeyIndexes = []; // For each door, always pick the same key index (e.g. 2) as the correct key for (var i = 0; i < NUM_DOORS; i++) { correctKeyIndexes.push(2); // Always the middle key (index 2) is correct } // Mark keys as correct/incorrect for each door for (var i = 0; i < NUM_DOORS; i++) { for (var j = 0; j < NUM_DOORS; j++) { keys[j].isCorrect = j === correctKeyIndexes[i]; } } } // --- Show only the current door and keys, hide others --- function updateVisibility() { for (var i = 0; i < NUM_DOORS; i++) { doors[i].visible = i === currentDoor; keys[i].visible = true; // All keys visible for selection } } // --- Animate all keys to new positions (shuffle keys for each door) --- function shuffleKeys() { // For each door, shuffle the keys' x positions var positions = []; for (var i = 0; i < NUM_DOORS; i++) { positions.push(gameWidth / 2 - (NUM_DOORS - 1) * spacing / 2 + i * spacing); } shuffle(positions); for (var i = 0; i < NUM_DOORS; i++) { // Animate to new x tween(keys[i], { x: positions[i] }, { duration: 350, easing: tween.cubicInOut }); } } // --- Start a new game --- function startGame() { currentDoor = 0; setStateText("Kapı 1 / 5"); setInfoText("Doğru anahtarı seç!"); setupDoorsAndKeys(); setupCorrectKeys(); updateVisibility(); shuffleKeys(); game.state = 'waitingForKey'; } // --- Handle key selection --- game.handleKeySelection = function (keyObj) { if (game.state !== 'waitingForKey') return; game.state = 'animating'; // Is this the correct key for the current door? var correctKeyIdx = correctKeyIndexes[currentDoor]; var isCorrect = keyObj.doorIndex === correctKeyIdx; if (isCorrect) { // Flash green keyObj.flash(0x6bff6b, 300); // Open the door doors[currentDoor].open(); // Next step after animation LK.setTimeout(function () { if (currentDoor === NUM_DOORS - 1) { // Win! setStateText("Tebrikler!"); setInfoText("5'te 5 yaptın!"); LK.showYouWin(); } else { currentDoor++; setStateText("Kapı " + (currentDoor + 1) + " / 5"); setInfoText("Doğru anahtarı seç!"); // Reset all doors to closed (except opened ones) for (var i = 0; i < NUM_DOORS; i++) { if (i > currentDoor) doors[i].close(); } // Shuffle keys for next door setupCorrectKeys(); shuffleKeys(); updateVisibility(); game.state = 'waitingForKey'; } }, 500); } else { // Flash red keyObj.flash(0xff3b3b, 400); // Shake the door var door = doors[currentDoor]; var origX = door.x; tween(door, { x: origX - 30 }, { duration: 80, onFinish: function onFinish() { tween(door, { x: origX + 30 }, { duration: 80, onFinish: function onFinish() { tween(door, { x: origX }, { duration: 80 }); } }); } }); setInfoText("Yanlış anahtar! Oyun bitti."); LK.setTimeout(function () { LK.showGameOver(); }, 600); } }; // --- Start the game on load --- startGame(); // --- Game update loop (not used, but required for future expansion) --- game.update = function () { // No per-frame logic needed for this game };
===================================================================
--- original.js
+++ change.js
@@ -155,14 +155,12 @@
}
// --- Setup correct keys for each door (randomly assign one correct key per door) ---
function setupCorrectKeys() {
correctKeyIndexes = [];
- // For each door, randomly pick a key index (0-4) as the correct key
+ // For each door, always pick the same key index (e.g. 2) as the correct key
for (var i = 0; i < NUM_DOORS; i++) {
- correctKeyIndexes.push(i);
+ correctKeyIndexes.push(2); // Always the middle key (index 2) is correct
}
- // Shuffle so that correct keys are randomly distributed
- shuffle(correctKeyIndexes);
// Mark keys as correct/incorrect for each door
for (var i = 0; i < NUM_DOORS; i++) {
for (var j = 0; j < NUM_DOORS; j++) {
keys[j].isCorrect = j === correctKeyIndexes[i];