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