Code edit (1 edits merged)
Please save this source code
User prompt
Cluck the Gap: Mouth Bridge Builder
Initial prompt
Hiii i want my game to be where u open ur mouth and the board will get progressively longer then when u close ur mouth the board will hopefully be the long enough length to reach the other side of the land so the chicken will cross the board that looks like a road then on the next level it will do the same thing and for 3 levels like that
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); var facekit = LK.import("@upit/facekit.v1"); /**** * Classes ****/ var Bridge = Container.expand(function () { var self = Container.call(this); self.blocks = []; self.extending = false; self.currentLength = 0; self.maxLength = 500; self.placed = false; self.extend = function () { if (self.placed || self.currentLength >= self.maxLength) { return; } self.extending = true; self.currentLength += 10; // Update existing blocks for (var i = 0; i < self.blocks.length; i++) { self.blocks[i].width = self.currentLength; } // Create a new block if needed if (self.blocks.length === 0) { var block = self.attachAsset('bridgeBlock', { anchorX: 0, anchorY: 0.5, width: self.currentLength, height: 30 }); self.blocks.push(block); } }; self.place = function () { if (!self.extending || self.placed) { return; } self.extending = false; self.placed = true; LK.getSound('place').play(); return self.currentLength; }; self.reset = function () { self.currentLength = 0; self.extending = false; self.placed = false; for (var i = 0; i < self.blocks.length; i++) { self.blocks[i].width = 0; } }; return self; }); var Chicken = Container.expand(function () { var self = Container.call(this); var chickenGraphics = self.attachAsset('chicken', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self.moving = false; self.fell = false; self.crossed = false; self.startMoving = function () { self.moving = true; }; self.update = function () { if (self.moving && !self.fell && !self.crossed) { self.x += self.speed; } }; self.fall = function () { if (self.fell) { return; } self.fell = true; tween(self, { y: self.y + 500, alpha: 0 }, { duration: 1000, easing: tween.easeIn, onFinish: function onFinish() { self.moving = false; } }); LK.getSound('fail').play(); }; self.crossComplete = function () { self.crossed = true; self.moving = false; LK.getSound('success').play(); LK.setScore(LK.getScore() + 1); }; self.reset = function (x, y) { self.x = x; self.y = y; self.alpha = 1; self.moving = false; self.fell = false; self.crossed = false; }; return self; }); var Gap = Container.expand(function () { var self = Container.call(this); var gapGraphics = self.attachAsset('gap', { anchorX: 0.5, anchorY: 0 }); return self; }); var Level = Container.expand(function (levelConfig) { var self = Container.call(this); // Initialize with default config if none provided self.config = levelConfig || { gapWidth: 300, startX: 300, endX: 800, platformY: 1800 }; // Create platforms self.startPlatform = new Platform(); self.startPlatform.x = self.config.startX; self.startPlatform.y = self.config.platformY; self.addChild(self.startPlatform); self.endPlatform = new Platform(); self.endPlatform.x = self.config.endX; self.endPlatform.y = self.config.platformY; self.addChild(self.endPlatform); // Create gap self.gap = new Gap(); self.gap.x = (self.config.startX + self.config.endX) / 2; self.gap.y = self.config.platformY; self.gap.width = self.config.gapWidth; self.addChild(self.gap); // Create bridge self.bridge = new Bridge(); self.bridge.x = self.config.startX + 100; // Bridge starts at edge of platform self.bridge.y = self.config.platformY - 15; // Slightly above platform self.addChild(self.bridge); // Create chicken self.chicken = new Chicken(); self.chicken.x = self.config.startX - 50; self.chicken.y = self.config.platformY - 50; self.addChild(self.chicken); self.reset = function () { self.bridge.reset(); self.chicken.reset(self.config.startX - 50, self.config.platformY - 50); }; return self; }); var Platform = Container.expand(function () { var self = Container.call(this); var platformGraphics = self.attachAsset('platform', { anchorX: 0.5, anchorY: 0 }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game state variables var currentLevel = 0; var levels = []; var levelConfigs = [{ gapWidth: 300, startX: 600, endX: 1100, platformY: 1800 }, { gapWidth: 400, startX: 500, endX: 1200, platformY: 1800 }, { gapWidth: 500, startX: 400, endX: 1300, platformY: 1800 }]; var gameActive = false; var mouthWasOpen = false; var levelComplete = false; var allLevelsComplete = false; // Initialize UI elements var titleText = new Text2('Cluck the Gap', { size: 120, fill: 0x000000 }); titleText.anchor.set(0.5, 0.5); titleText.x = 2048 / 2; titleText.y = 400; game.addChild(titleText); var instructionText = new Text2('Open your mouth to extend the bridge\nClose your mouth to place it', { size: 60, fill: 0x000000 }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 2048 / 2; instructionText.y = 550; game.addChild(instructionText); var startButton = LK.getAsset('bridgeBlock', { width: 300, height: 100, anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 700 }); game.addChild(startButton); var startText = new Text2('START', { size: 80, fill: 0xFFFFFF }); startText.anchor.set(0.5, 0.5); startText.x = 2048 / 2; startText.y = 700; game.addChild(startText); var levelText = new Text2('Level 1', { size: 80, fill: 0x000000 }); levelText.anchor.set(0.5, 0); levelText.visible = false; LK.gui.top.addChild(levelText); var scoreText = new Text2('Chickens Saved: 0', { size: 60, fill: 0x000000 }); scoreText.anchor.set(1, 0); scoreText.visible = false; LK.gui.topRight.addChild(scoreText); // Initialize game levels function setupLevels() { // Clear any existing levels if (levels.length > 0) { for (var i = 0; i < levels.length; i++) { if (levels[i].parent) { levels[i].parent.removeChild(levels[i]); } } levels = []; } // Create new levels for (var i = 0; i < levelConfigs.length; i++) { var level = new Level(levelConfigs[i]); level.visible = false; game.addChild(level); levels.push(level); } } // Start the game function startGame() { // Reset game state LK.setScore(0); currentLevel = 0; levelComplete = false; allLevelsComplete = false; gameActive = true; // Hide menu elements titleText.visible = false; instructionText.visible = false; startButton.visible = false; startText.visible = false; // Show game UI levelText.visible = true; levelText.setText('Level ' + (currentLevel + 1)); scoreText.visible = true; scoreText.setText('Chickens Saved: ' + LK.getScore()); // Setup levels setupLevels(); // Show current level levels[currentLevel].visible = true; // Start background music LK.playMusic('bgMusic'); } // Move to next level function nextLevel() { if (currentLevel >= levelConfigs.length - 1) { // All levels complete allLevelsComplete = true; LK.showYouWin(); return; } // Hide current level levels[currentLevel].visible = false; // Move to next level currentLevel++; // Show new level levelText.setText('Level ' + (currentLevel + 1)); levels[currentLevel].visible = true; levelComplete = false; } // Event handlers startButton.down = function () { startGame(); }; // Main game update loop game.update = function () { if (!gameActive) { return; } // Update current level var level = levels[currentLevel]; if (!level) { return; } // Check for mouth open/close to control bridge if (facekit.mouthOpen && !mouthWasOpen) { // Mouth just opened mouthWasOpen = true; } else if (facekit.mouthOpen && mouthWasOpen) { // Mouth staying open - extend bridge level.bridge.extend(); } else if (!facekit.mouthOpen && mouthWasOpen) { // Mouth just closed - place bridge mouthWasOpen = false; level.bridge.place(); // Start chicken moving level.chicken.startMoving(); } // Update chicken movement level.chicken.update(); // Check for chicken falling if (level.chicken.moving && !level.chicken.fell && !level.chicken.crossed) { // Check if chicken has reached the bridge if (level.chicken.x >= level.bridge.x) { // Check if bridge is long enough var requiredLength = level.config.endX - level.bridge.x; if (!level.bridge.placed || level.bridge.currentLength < requiredLength) { // Bridge not placed or too short - chicken falls level.chicken.fall(); // Reset level after delay LK.setTimeout(function () { level.reset(); }, 2000); } } // Check if chicken has successfully crossed if (level.chicken.x >= level.config.endX - 50) { // Chicken safely crossed level.chicken.crossComplete(); scoreText.setText('Chickens Saved: ' + LK.getScore()); // Mark level as complete levelComplete = true; // Move to next level after delay LK.setTimeout(function () { nextLevel(); }, 2000); } } }; // Play background music LK.playMusic('bgMusic', { fade: { start: 0, end: 0.3, duration: 1000 } });
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,374 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+var facekit = LK.import("@upit/facekit.v1");
+
+/****
+* Classes
+****/
+var Bridge = Container.expand(function () {
+ var self = Container.call(this);
+ self.blocks = [];
+ self.extending = false;
+ self.currentLength = 0;
+ self.maxLength = 500;
+ self.placed = false;
+ self.extend = function () {
+ if (self.placed || self.currentLength >= self.maxLength) {
+ return;
+ }
+ self.extending = true;
+ self.currentLength += 10;
+ // Update existing blocks
+ for (var i = 0; i < self.blocks.length; i++) {
+ self.blocks[i].width = self.currentLength;
+ }
+ // Create a new block if needed
+ if (self.blocks.length === 0) {
+ var block = self.attachAsset('bridgeBlock', {
+ anchorX: 0,
+ anchorY: 0.5,
+ width: self.currentLength,
+ height: 30
+ });
+ self.blocks.push(block);
+ }
+ };
+ self.place = function () {
+ if (!self.extending || self.placed) {
+ return;
+ }
+ self.extending = false;
+ self.placed = true;
+ LK.getSound('place').play();
+ return self.currentLength;
+ };
+ self.reset = function () {
+ self.currentLength = 0;
+ self.extending = false;
+ self.placed = false;
+ for (var i = 0; i < self.blocks.length; i++) {
+ self.blocks[i].width = 0;
+ }
+ };
+ return self;
+});
+var Chicken = Container.expand(function () {
+ var self = Container.call(this);
+ var chickenGraphics = self.attachAsset('chicken', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2;
+ self.moving = false;
+ self.fell = false;
+ self.crossed = false;
+ self.startMoving = function () {
+ self.moving = true;
+ };
+ self.update = function () {
+ if (self.moving && !self.fell && !self.crossed) {
+ self.x += self.speed;
+ }
+ };
+ self.fall = function () {
+ if (self.fell) {
+ return;
+ }
+ self.fell = true;
+ tween(self, {
+ y: self.y + 500,
+ alpha: 0
+ }, {
+ duration: 1000,
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ self.moving = false;
+ }
+ });
+ LK.getSound('fail').play();
+ };
+ self.crossComplete = function () {
+ self.crossed = true;
+ self.moving = false;
+ LK.getSound('success').play();
+ LK.setScore(LK.getScore() + 1);
+ };
+ self.reset = function (x, y) {
+ self.x = x;
+ self.y = y;
+ self.alpha = 1;
+ self.moving = false;
+ self.fell = false;
+ self.crossed = false;
+ };
+ return self;
+});
+var Gap = Container.expand(function () {
+ var self = Container.call(this);
+ var gapGraphics = self.attachAsset('gap', {
+ anchorX: 0.5,
+ anchorY: 0
+ });
+ return self;
+});
+var Level = Container.expand(function (levelConfig) {
+ var self = Container.call(this);
+ // Initialize with default config if none provided
+ self.config = levelConfig || {
+ gapWidth: 300,
+ startX: 300,
+ endX: 800,
+ platformY: 1800
+ };
+ // Create platforms
+ self.startPlatform = new Platform();
+ self.startPlatform.x = self.config.startX;
+ self.startPlatform.y = self.config.platformY;
+ self.addChild(self.startPlatform);
+ self.endPlatform = new Platform();
+ self.endPlatform.x = self.config.endX;
+ self.endPlatform.y = self.config.platformY;
+ self.addChild(self.endPlatform);
+ // Create gap
+ self.gap = new Gap();
+ self.gap.x = (self.config.startX + self.config.endX) / 2;
+ self.gap.y = self.config.platformY;
+ self.gap.width = self.config.gapWidth;
+ self.addChild(self.gap);
+ // Create bridge
+ self.bridge = new Bridge();
+ self.bridge.x = self.config.startX + 100; // Bridge starts at edge of platform
+ self.bridge.y = self.config.platformY - 15; // Slightly above platform
+ self.addChild(self.bridge);
+ // Create chicken
+ self.chicken = new Chicken();
+ self.chicken.x = self.config.startX - 50;
+ self.chicken.y = self.config.platformY - 50;
+ self.addChild(self.chicken);
+ self.reset = function () {
+ self.bridge.reset();
+ self.chicken.reset(self.config.startX - 50, self.config.platformY - 50);
+ };
+ return self;
+});
+var Platform = Container.expand(function () {
+ var self = Container.call(this);
+ var platformGraphics = self.attachAsset('platform', {
+ anchorX: 0.5,
+ anchorY: 0
+ });
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+// Game state variables
+var currentLevel = 0;
+var levels = [];
+var levelConfigs = [{
+ gapWidth: 300,
+ startX: 600,
+ endX: 1100,
+ platformY: 1800
+}, {
+ gapWidth: 400,
+ startX: 500,
+ endX: 1200,
+ platformY: 1800
+}, {
+ gapWidth: 500,
+ startX: 400,
+ endX: 1300,
+ platformY: 1800
+}];
+var gameActive = false;
+var mouthWasOpen = false;
+var levelComplete = false;
+var allLevelsComplete = false;
+// Initialize UI elements
+var titleText = new Text2('Cluck the Gap', {
+ size: 120,
+ fill: 0x000000
+});
+titleText.anchor.set(0.5, 0.5);
+titleText.x = 2048 / 2;
+titleText.y = 400;
+game.addChild(titleText);
+var instructionText = new Text2('Open your mouth to extend the bridge\nClose your mouth to place it', {
+ size: 60,
+ fill: 0x000000
+});
+instructionText.anchor.set(0.5, 0.5);
+instructionText.x = 2048 / 2;
+instructionText.y = 550;
+game.addChild(instructionText);
+var startButton = LK.getAsset('bridgeBlock', {
+ width: 300,
+ height: 100,
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 2048 / 2,
+ y: 700
+});
+game.addChild(startButton);
+var startText = new Text2('START', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+startText.anchor.set(0.5, 0.5);
+startText.x = 2048 / 2;
+startText.y = 700;
+game.addChild(startText);
+var levelText = new Text2('Level 1', {
+ size: 80,
+ fill: 0x000000
+});
+levelText.anchor.set(0.5, 0);
+levelText.visible = false;
+LK.gui.top.addChild(levelText);
+var scoreText = new Text2('Chickens Saved: 0', {
+ size: 60,
+ fill: 0x000000
+});
+scoreText.anchor.set(1, 0);
+scoreText.visible = false;
+LK.gui.topRight.addChild(scoreText);
+// Initialize game levels
+function setupLevels() {
+ // Clear any existing levels
+ if (levels.length > 0) {
+ for (var i = 0; i < levels.length; i++) {
+ if (levels[i].parent) {
+ levels[i].parent.removeChild(levels[i]);
+ }
+ }
+ levels = [];
+ }
+ // Create new levels
+ for (var i = 0; i < levelConfigs.length; i++) {
+ var level = new Level(levelConfigs[i]);
+ level.visible = false;
+ game.addChild(level);
+ levels.push(level);
+ }
+}
+// Start the game
+function startGame() {
+ // Reset game state
+ LK.setScore(0);
+ currentLevel = 0;
+ levelComplete = false;
+ allLevelsComplete = false;
+ gameActive = true;
+ // Hide menu elements
+ titleText.visible = false;
+ instructionText.visible = false;
+ startButton.visible = false;
+ startText.visible = false;
+ // Show game UI
+ levelText.visible = true;
+ levelText.setText('Level ' + (currentLevel + 1));
+ scoreText.visible = true;
+ scoreText.setText('Chickens Saved: ' + LK.getScore());
+ // Setup levels
+ setupLevels();
+ // Show current level
+ levels[currentLevel].visible = true;
+ // Start background music
+ LK.playMusic('bgMusic');
+}
+// Move to next level
+function nextLevel() {
+ if (currentLevel >= levelConfigs.length - 1) {
+ // All levels complete
+ allLevelsComplete = true;
+ LK.showYouWin();
+ return;
+ }
+ // Hide current level
+ levels[currentLevel].visible = false;
+ // Move to next level
+ currentLevel++;
+ // Show new level
+ levelText.setText('Level ' + (currentLevel + 1));
+ levels[currentLevel].visible = true;
+ levelComplete = false;
+}
+// Event handlers
+startButton.down = function () {
+ startGame();
+};
+// Main game update loop
+game.update = function () {
+ if (!gameActive) {
+ return;
+ }
+ // Update current level
+ var level = levels[currentLevel];
+ if (!level) {
+ return;
+ }
+ // Check for mouth open/close to control bridge
+ if (facekit.mouthOpen && !mouthWasOpen) {
+ // Mouth just opened
+ mouthWasOpen = true;
+ } else if (facekit.mouthOpen && mouthWasOpen) {
+ // Mouth staying open - extend bridge
+ level.bridge.extend();
+ } else if (!facekit.mouthOpen && mouthWasOpen) {
+ // Mouth just closed - place bridge
+ mouthWasOpen = false;
+ level.bridge.place();
+ // Start chicken moving
+ level.chicken.startMoving();
+ }
+ // Update chicken movement
+ level.chicken.update();
+ // Check for chicken falling
+ if (level.chicken.moving && !level.chicken.fell && !level.chicken.crossed) {
+ // Check if chicken has reached the bridge
+ if (level.chicken.x >= level.bridge.x) {
+ // Check if bridge is long enough
+ var requiredLength = level.config.endX - level.bridge.x;
+ if (!level.bridge.placed || level.bridge.currentLength < requiredLength) {
+ // Bridge not placed or too short - chicken falls
+ level.chicken.fall();
+ // Reset level after delay
+ LK.setTimeout(function () {
+ level.reset();
+ }, 2000);
+ }
+ }
+ // Check if chicken has successfully crossed
+ if (level.chicken.x >= level.config.endX - 50) {
+ // Chicken safely crossed
+ level.chicken.crossComplete();
+ scoreText.setText('Chickens Saved: ' + LK.getScore());
+ // Mark level as complete
+ levelComplete = true;
+ // Move to next level after delay
+ LK.setTimeout(function () {
+ nextLevel();
+ }, 2000);
+ }
+ }
+};
+// Play background music
+LK.playMusic('bgMusic', {
+ fade: {
+ start: 0,
+ end: 0.3,
+ duration: 1000
+ }
});
\ No newline at end of file