/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
var Adult = Container.expand(function (x, y) {
	var self = Container.call(this);
	self.lifetime = 180; // 3 seconds at 60fps
	self.age = 0;
	var adultGraphics = self.attachAsset('adult', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.x = x;
	self.y = y;
	// Add warning text above adult
	self.warningText = new Text2('ADULT!', {
		size: 32,
		fill: 0xFF0000
	});
	self.warningText.anchor.set(0.5, 1);
	self.warningText.x = 0;
	self.warningText.y = -50;
	self.addChild(self.warningText);
	// Flash effect
	self.alpha = 0;
	tween(self, {
		alpha: 1
	}, {
		duration: 300,
		easing: tween.easeOut
	});
	self.update = function () {
		self.age++;
		// Pulsing effect
		adultGraphics.scaleX = 1 + Math.sin(self.age * 0.2) * 0.1;
		adultGraphics.scaleY = 1 + Math.sin(self.age * 0.2) * 0.1;
		if (self.age >= self.lifetime) {
			self.shouldDestroy = true;
		}
	};
	return self;
});
var Bottle = Container.expand(function (startX, startY, targetX, targetY) {
	var self = Container.call(this);
	self.speed = 3;
	self.targetX = targetX;
	self.targetY = targetY;
	self.lifetime = 180; // 3 seconds at 60fps
	self.age = 0;
	var bottleGraphics = self.attachAsset('bottle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.x = startX;
	self.y = startY;
	// Calculate direction to target
	var dx = targetX - startX;
	var dy = targetY - startY;
	var distance = Math.sqrt(dx * dx + dy * dy);
	if (distance > 0) {
		self.directionX = dx / distance;
		self.directionY = dy / distance;
	} else {
		self.directionX = 0;
		self.directionY = 0;
	}
	self.update = function () {
		self.age++;
		// Move towards target
		self.x += self.directionX * self.speed;
		self.y += self.directionY * self.speed;
		// Rotate bottle for effect
		bottleGraphics.rotation += 0.2;
		// Check bounds and lifetime
		if (self.age >= self.lifetime || self.x < -50 || self.x > 2098 || self.y < -50 || self.y > 2782) {
			self.shouldDestroy = true;
		}
	};
	return self;
});
var Child = Container.expand(function (type) {
	var self = Container.call(this);
	self.type = type || 'boy';
	self.isEscaping = false;
	self.speed = 1;
	self.detectionRange = 150;
	// Age system: 2-4 years for levels < 5, 2-13 years for levels >= 5
	if (currentLevel < 5) {
		self.age = Math.floor(Math.random() * 3) + 2; // 2-4 years
	} else {
		self.age = Math.floor(Math.random() * 12) + 2; // 2-13 years
	}
	// Set speed based on age
	if (self.age >= 6 && self.age < 9) {
		self.speed = 2; // 6-9 year olds are fastest (2x speed)
	} else {
		self.speed = 1; // Others have normal speed
	}
	// Assign random name based on type
	if (self.type === 'girl') {
		self.name = girlNames[Math.floor(Math.random() * girlNames.length)];
	} else {
		self.name = boyNames[Math.floor(Math.random() * boyNames.length)];
	}
	self.specialAbilityTimer = 0;
	self.specialAbilityCooldown = 180 + Math.random() * 240; // 3-7 seconds at 60fps
	var childGraphics = self.attachAsset(self.type, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Add name text above child
	self.nameText = new Text2(self.name, {
		size: 20,
		fill: 0xFFFF00
	});
	self.nameText.anchor.set(0.5, 1);
	self.nameText.x = 0;
	self.nameText.y = -55;
	self.addChild(self.nameText);
	// Add age text above child
	self.ageText = new Text2(self.age.toString(), {
		size: 24,
		fill: 0xFFFFFF
	});
	self.ageText.anchor.set(0.5, 1);
	self.ageText.x = 0;
	self.ageText.y = -35;
	self.addChild(self.ageText);
	self.wanderDirection = Math.random() * Math.PI * 2;
	self.wanderTimer = 0;
	self.wanderChangeTime = 60 + Math.random() * 120;
	self.update = function () {
		// Handle special abilities based on age
		self.specialAbilityTimer++;
		if (self.specialAbilityTimer >= self.specialAbilityCooldown) {
			if (self.age >= 4 && self.age < 6) {
				// 4-6 year olds throw bottles randomly
				if (Math.random() < 0.3) {
					// 30% chance
					// Create bottle projectile aimed at snake
					var bottle = new Bottle(self.x, self.y, snake.x, snake.y);
					game.addChild(bottle);
					bottles.push(bottle);
					// Play throw sound and flash child
					LK.getSound('bottle_throw').play();
					LK.effects.flashObject(self, 0xFFFF00, 500);
				}
			} else if (self.age >= 6 && self.age < 9) {
				// 6-9 year olds call adults randomly
				if (Math.random() < 0.25) {
					// 25% chance
					var pointsLost = Math.floor(Math.random() * 6) + 5; // 5-10 points
					LK.setScore(Math.max(0, LK.getScore() - pointsLost));
					// Play adult call sound and visual effects
					LK.getSound('adult_call').play();
					LK.effects.flashObject(self, 0xFF8800, 800);
					// Create adult visual effect near the child
					var adult = new Adult(self.x + (Math.random() - 0.5) * 100, self.y + (Math.random() - 0.5) * 100);
					game.addChild(adult);
					adults.push(adult);
					checkLevelDown();
				}
			} else if (self.age >= 9 && self.age <= 13) {
				// 9-13 year olds shoot guns - only 1 in 5 chance when they activate ability
				if (Math.random() < 0.2) {
					// 20% chance (1 in 5)
					var pointsLost = Math.floor(Math.random() * 16) + 15; // 15-30 points
					LK.setScore(Math.max(0, LK.getScore() - pointsLost));
					// Create rifle visual effect
					var rifle = new Rifle(self.x, self.y, snake.x, snake.y);
					game.addChild(rifle);
					rifles.push(rifle);
					// Play rifle shot sound and effects
					LK.getSound('rifle_shot').play();
					LK.effects.flashObject(self, 0xFF0000, 1000);
					LK.effects.flashScreen(0xFF0000, 300);
					checkLevelDown();
				}
			}
			self.specialAbilityTimer = 0;
			self.specialAbilityCooldown = 180 + Math.random() * 240;
		}
		if (self.isEscaping) {
			var dx = self.x - snake.x;
			var dy = self.y - snake.y;
			var distance = Math.sqrt(dx * dx + dy * dy);
			if (distance > 0) {
				var escapeSpeed = self.speed * 3;
				self.x += dx / distance * escapeSpeed;
				self.y += dy / distance * escapeSpeed;
			}
		} else {
			var distanceToSnake = Math.sqrt(Math.pow(self.x - snake.x, 2) + Math.pow(self.y - snake.y, 2));
			if (distanceToSnake < self.detectionRange) {
				self.isEscaping = true;
				LK.effects.flashObject(self, 0xFF0000, 300);
			} else {
				self.wanderTimer++;
				if (self.wanderTimer >= self.wanderChangeTime) {
					self.wanderDirection = Math.random() * Math.PI * 2;
					self.wanderTimer = 0;
					self.wanderChangeTime = 60 + Math.random() * 120;
				}
				self.x += Math.cos(self.wanderDirection) * self.speed;
				self.y += Math.sin(self.wanderDirection) * self.speed;
			}
		}
		if (self.x < 50) self.x = 50;
		if (self.x > 1998) self.x = 1998;
		if (self.y < 50) self.y = 50;
		if (self.y > 2682) self.y = 2682;
	};
	return self;
});
var Message = Container.expand(function (text, color) {
	var self = Container.call(this);
	self.lifetime = 300; // 5 seconds at 60fps
	self.age = 0;
	self.fadeStartTime = 240; // Start fading after 4 seconds
	var messageText = new Text2(text, {
		size: 40,
		fill: color || 0xFFFFFF
	});
	messageText.anchor.set(0.5, 0.5);
	self.addChild(messageText);
	// Position at center of screen
	self.x = 1024;
	self.y = 1366;
	// Initial fade in effect
	self.alpha = 0;
	tween(self, {
		alpha: 1
	}, {
		duration: 500,
		easing: tween.easeOut
	});
	self.update = function () {
		self.age++;
		// Start fading out
		if (self.age >= self.fadeStartTime && self.alpha > 0) {
			var fadeProgress = (self.age - self.fadeStartTime) / (self.lifetime - self.fadeStartTime);
			self.alpha = Math.max(0, 1 - fadeProgress);
		}
		if (self.age >= self.lifetime) {
			self.shouldDestroy = true;
		}
	};
	return self;
});
var Rifle = Container.expand(function (x, y, targetX, targetY) {
	var self = Container.call(this);
	self.lifetime = 120; // 2 seconds at 60fps
	self.age = 0;
	var rifleGraphics = self.attachAsset('rifle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.x = x;
	self.y = y;
	// Calculate angle to target
	var dx = targetX - x;
	var dy = targetY - y;
	rifleGraphics.rotation = Math.atan2(dy, dx);
	// Muzzle flash effect
	LK.effects.flashObject(self, 0xFFFF00, 200);
	self.update = function () {
		self.age++;
		// Recoil animation
		if (self.age < 10) {
			rifleGraphics.x = -self.age;
		} else if (self.age < 20) {
			rifleGraphics.x = -(20 - self.age);
		} else {
			rifleGraphics.x = 0;
		}
		if (self.age >= self.lifetime) {
			self.shouldDestroy = true;
		}
	};
	return self;
});
var Snake = Container.expand(function () {
	var self = Container.call(this);
	self.isMoving = false;
	self.targetX = 0;
	self.targetY = 0;
	self.moveSpeed = 4;
	var snakeGraphics = self.attachAsset('snake', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.moveTo = function (x, y) {
		self.targetX = x;
		self.targetY = y;
		self.isMoving = true;
	};
	self.update = function () {
		if (self.isMoving) {
			var dx = self.targetX - self.x;
			var dy = self.targetY - self.y;
			var distance = Math.sqrt(dx * dx + dy * dy);
			if (distance < self.moveSpeed) {
				self.x = self.targetX;
				self.y = self.targetY;
				self.isMoving = false;
			} else {
				self.x += dx / distance * self.moveSpeed;
				self.y += dy / distance * self.moveSpeed;
			}
		}
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x006400
});
/**** 
* Game Code
****/ 
var background = game.attachAsset('background', {
	x: 0,
	y: 0
});
var snake = game.addChild(new Snake());
snake.x = 1024;
snake.y = 1366;
var children = [];
var bottles = [];
var adults = [];
var rifles = [];
var currentLevel = 1;
var pointsNeeded = 50;
// Arrays of names for children
var girlNames = ['Mia', 'Sara', 'Laura', 'Maya', 'Julie', 'Olivia', 'Martine', 'Paula', 'Daisy', 'Juliette', 'Margot', 'Tina', 'Abigaïl', 'Clémence', 'Amélie', 'Amina', 'Laurence', 'Ilona', 'Gloria', 'Valentina', 'Victoria', 'Ninon', 'Manon', 'Violette', 'Rose', 'Zélie', 'Ylenia', 'Sabrina', 'Harper', 'Valentine', 'Élodie', 'Grâce', 'Jade', 'Eva', 'Maëva', 'Anna', 'Alice', 'Louise', 'Zoé', 'Chloé', 'Julia', 'Romy', 'Iris', 'Ambre', 'Agathe', 'Inaya', 'Lea', 'Adele', 'Clara', 'Emily', 'Eveline', 'Dorine', 'Lou', 'Amelia', 'Isabella', 'Charlotte', 'Delphine', 'Dona', 'Yasmine', 'Marie', 'Carine', 'Kimberly', 'Erina', 'Maëlle', 'Joséphine', 'Jacqueline', 'Françoise', 'Théa', 'Denise'];
var boyNames = ['Hugo', 'Louis', 'Karim', 'Julien', 'Thomas', 'Thom', 'Lucas', 'Clément', 'Laurent', 'Ibrahim', 'Mohamed', 'Léo', 'Willy', 'Moris', 'Mathieu', 'Marius', 'Paul', 'Valentin', 'Bernard', 'Eric', 'Jules', 'Claude', 'Quentin', 'Gabriel', 'Dimitri', 'Raphaël', 'Noa', 'Maël', 'Arthur', 'Adam', 'Isaac', 'Eden', 'Léon', 'Sacha', 'Aaron', 'Liam', 'Naël', 'Malo', 'Baptiste', 'Corentin', 'Diego', 'Alexandre', 'Felix', 'Gaspard', 'Alain', 'Albert', 'Adrien', 'Achille', 'Dorian', 'Alexis', 'Alex', 'Mylan', 'Pierre', 'Yann', 'Axel', 'Charles', 'David', 'Joseph', 'Jacques', 'Antoine', 'François', 'Théo', 'Maxime', 'Victor', 'Anthony', 'André', 'William', 'Jacob', 'Nathan', 'Sam', 'Logan'];
var messages = [];
var levelText = new Text2('Level: 1', {
	size: 60,
	fill: 0xFFFFFF
});
levelText.anchor.set(0, 0);
levelText.x = 150;
levelText.y = 50;
LK.gui.topLeft.addChild(levelText);
var scoreText = new Text2('Score: 0', {
	size: 60,
	fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var targetText = new Text2('Target: ' + pointsNeeded, {
	size: 50,
	fill: 0xFFFF00
});
targetText.anchor.set(1, 0);
targetText.x = -50;
targetText.y = 50;
LK.gui.topRight.addChild(targetText);
function spawnChildren() {
	var boyCount = Math.floor(Math.random() * 6) + 1;
	var girlCount = Math.floor(Math.random() * 6) + 1;
	for (var i = 0; i < boyCount; i++) {
		var boy = game.addChild(new Child('boy'));
		boy.x = Math.random() * 1800 + 124;
		boy.y = Math.random() * 2400 + 166;
		// Speed is now calculated in Child constructor based on age
		boy.speed += (currentLevel - 1) * 0.2;
		children.push(boy);
	}
	for (var j = 0; j < girlCount; j++) {
		var girl = game.addChild(new Child('girl'));
		girl.x = Math.random() * 1800 + 124;
		girl.y = Math.random() * 2400 + 166;
		// Speed is now calculated in Child constructor based on age
		girl.speed += (currentLevel - 1) * 0.2;
		children.push(girl);
	}
}
function updateUI() {
	levelText.setText('Level: ' + currentLevel);
	scoreText.setText('Score: ' + LK.getScore());
	targetText.setText('Target: ' + pointsNeeded);
}
function checkLevelUp() {
	if (LK.getScore() >= pointsNeeded) {
		currentLevel++;
		if (currentLevel > 35) {
			LK.showYouWin();
			return;
		}
		// Reset score to 0 and calculate new points needed for next level
		LK.setScore(0);
		pointsNeeded = 50 + (currentLevel - 2) * 5;
		for (var i = 0; i < children.length; i++) {
			children[i].destroy();
		}
		children = [];
		spawnChildren();
		updateUI();
		LK.effects.flashScreen(0x00FF00, 500);
	}
}
function checkLevelDown() {
	if (LK.getScore() < 0) {
		LK.setScore(0);
	}
	// Check if we need to go down a level (if score becomes very low compared to target)
	var minScoreForLevel = Math.max(0, pointsNeeded - 50);
	if (LK.getScore() < minScoreForLevel && currentLevel > 1) {
		currentLevel--;
		pointsNeeded = 50 + (currentLevel - 2) * 5;
		if (pointsNeeded < 50) pointsNeeded = 50;
		for (var i = 0; i < children.length; i++) {
			children[i].destroy();
		}
		children = [];
		spawnChildren();
		updateUI();
		LK.effects.flashScreen(0xFF4444, 500);
	}
}
spawnChildren();
updateUI();
game.down = function (x, y, obj) {
	snake.moveTo(x, y);
};
game.update = function () {
	for (var i = children.length - 1; i >= 0; i--) {
		var child = children[i];
		if (snake.intersects(child)) {
			LK.setScore(LK.getScore() + 5);
			LK.getSound('catch').play();
			// Display congratulations message
			var congratsMessage = new Message('Félicitations ! Vous avez mangé ' + child.name + ' ce petit désastre ambulant', 0x00FF00);
			game.addChild(congratsMessage);
			messages.push(congratsMessage);
			child.destroy();
			children.splice(i, 1);
			checkLevelUp();
			continue;
		}
		var distanceFromCenter = Math.sqrt(Math.pow(child.x - 1024, 2) + Math.pow(child.y - 1366, 2));
		if (distanceFromCenter > 1500) {
			// Display escape message
			var escapeMessage = new Message('Oh non! ' + child.name + ' a réussi à s\'enfuir !', 0xFF4444);
			game.addChild(escapeMessage);
			messages.push(escapeMessage);
			child.destroy();
			children.splice(i, 1);
		}
	}
	// Handle bottle collisions and cleanup
	for (var b = bottles.length - 1; b >= 0; b--) {
		var bottle = bottles[b];
		// Check collision with snake
		if (snake.intersects(bottle)) {
			LK.setScore(Math.max(0, LK.getScore() - 2));
			LK.effects.flashObject(snake, 0xFF0000, 500);
			bottle.destroy();
			bottles.splice(b, 1);
			checkLevelDown();
			continue;
		}
		// Check if bottle should be destroyed
		if (bottle.shouldDestroy) {
			bottle.destroy();
			bottles.splice(b, 1);
		}
	}
	// Handle adult cleanup
	for (var a = adults.length - 1; a >= 0; a--) {
		var adult = adults[a];
		if (adult.shouldDestroy) {
			adult.destroy();
			adults.splice(a, 1);
		}
	}
	// Handle rifle cleanup
	for (var r = rifles.length - 1; r >= 0; r--) {
		var rifle = rifles[r];
		if (rifle.shouldDestroy) {
			rifle.destroy();
			rifles.splice(r, 1);
		}
	}
	// Handle message cleanup
	for (var m = messages.length - 1; m >= 0; m--) {
		var message = messages[m];
		if (message.shouldDestroy) {
			message.destroy();
			messages.splice(m, 1);
		}
	}
	if (children.length === 0) {
		spawnChildren();
	}
	updateUI();
};
LK.playMusic('jungle'); /**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
var Adult = Container.expand(function (x, y) {
	var self = Container.call(this);
	self.lifetime = 180; // 3 seconds at 60fps
	self.age = 0;
	var adultGraphics = self.attachAsset('adult', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.x = x;
	self.y = y;
	// Add warning text above adult
	self.warningText = new Text2('ADULT!', {
		size: 32,
		fill: 0xFF0000
	});
	self.warningText.anchor.set(0.5, 1);
	self.warningText.x = 0;
	self.warningText.y = -50;
	self.addChild(self.warningText);
	// Flash effect
	self.alpha = 0;
	tween(self, {
		alpha: 1
	}, {
		duration: 300,
		easing: tween.easeOut
	});
	self.update = function () {
		self.age++;
		// Pulsing effect
		adultGraphics.scaleX = 1 + Math.sin(self.age * 0.2) * 0.1;
		adultGraphics.scaleY = 1 + Math.sin(self.age * 0.2) * 0.1;
		if (self.age >= self.lifetime) {
			self.shouldDestroy = true;
		}
	};
	return self;
});
var Bottle = Container.expand(function (startX, startY, targetX, targetY) {
	var self = Container.call(this);
	self.speed = 3;
	self.targetX = targetX;
	self.targetY = targetY;
	self.lifetime = 180; // 3 seconds at 60fps
	self.age = 0;
	var bottleGraphics = self.attachAsset('bottle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.x = startX;
	self.y = startY;
	// Calculate direction to target
	var dx = targetX - startX;
	var dy = targetY - startY;
	var distance = Math.sqrt(dx * dx + dy * dy);
	if (distance > 0) {
		self.directionX = dx / distance;
		self.directionY = dy / distance;
	} else {
		self.directionX = 0;
		self.directionY = 0;
	}
	self.update = function () {
		self.age++;
		// Move towards target
		self.x += self.directionX * self.speed;
		self.y += self.directionY * self.speed;
		// Rotate bottle for effect
		bottleGraphics.rotation += 0.2;
		// Check bounds and lifetime
		if (self.age >= self.lifetime || self.x < -50 || self.x > 2098 || self.y < -50 || self.y > 2782) {
			self.shouldDestroy = true;
		}
	};
	return self;
});
var Child = Container.expand(function (type) {
	var self = Container.call(this);
	self.type = type || 'boy';
	self.isEscaping = false;
	self.speed = 1;
	self.detectionRange = 150;
	// Age system: 2-4 years for levels < 5, 2-13 years for levels >= 5
	if (currentLevel < 5) {
		self.age = Math.floor(Math.random() * 3) + 2; // 2-4 years
	} else {
		self.age = Math.floor(Math.random() * 12) + 2; // 2-13 years
	}
	// Set speed based on age
	if (self.age >= 6 && self.age < 9) {
		self.speed = 2; // 6-9 year olds are fastest (2x speed)
	} else {
		self.speed = 1; // Others have normal speed
	}
	// Assign random name based on type
	if (self.type === 'girl') {
		self.name = girlNames[Math.floor(Math.random() * girlNames.length)];
	} else {
		self.name = boyNames[Math.floor(Math.random() * boyNames.length)];
	}
	self.specialAbilityTimer = 0;
	self.specialAbilityCooldown = 180 + Math.random() * 240; // 3-7 seconds at 60fps
	var childGraphics = self.attachAsset(self.type, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Add name text above child
	self.nameText = new Text2(self.name, {
		size: 20,
		fill: 0xFFFF00
	});
	self.nameText.anchor.set(0.5, 1);
	self.nameText.x = 0;
	self.nameText.y = -55;
	self.addChild(self.nameText);
	// Add age text above child
	self.ageText = new Text2(self.age.toString(), {
		size: 24,
		fill: 0xFFFFFF
	});
	self.ageText.anchor.set(0.5, 1);
	self.ageText.x = 0;
	self.ageText.y = -35;
	self.addChild(self.ageText);
	self.wanderDirection = Math.random() * Math.PI * 2;
	self.wanderTimer = 0;
	self.wanderChangeTime = 60 + Math.random() * 120;
	self.update = function () {
		// Handle special abilities based on age
		self.specialAbilityTimer++;
		if (self.specialAbilityTimer >= self.specialAbilityCooldown) {
			if (self.age >= 4 && self.age < 6) {
				// 4-6 year olds throw bottles randomly
				if (Math.random() < 0.3) {
					// 30% chance
					// Create bottle projectile aimed at snake
					var bottle = new Bottle(self.x, self.y, snake.x, snake.y);
					game.addChild(bottle);
					bottles.push(bottle);
					// Play throw sound and flash child
					LK.getSound('bottle_throw').play();
					LK.effects.flashObject(self, 0xFFFF00, 500);
				}
			} else if (self.age >= 6 && self.age < 9) {
				// 6-9 year olds call adults randomly
				if (Math.random() < 0.25) {
					// 25% chance
					var pointsLost = Math.floor(Math.random() * 6) + 5; // 5-10 points
					LK.setScore(Math.max(0, LK.getScore() - pointsLost));
					// Play adult call sound and visual effects
					LK.getSound('adult_call').play();
					LK.effects.flashObject(self, 0xFF8800, 800);
					// Create adult visual effect near the child
					var adult = new Adult(self.x + (Math.random() - 0.5) * 100, self.y + (Math.random() - 0.5) * 100);
					game.addChild(adult);
					adults.push(adult);
					checkLevelDown();
				}
			} else if (self.age >= 9 && self.age <= 13) {
				// 9-13 year olds shoot guns - only 1 in 5 chance when they activate ability
				if (Math.random() < 0.2) {
					// 20% chance (1 in 5)
					var pointsLost = Math.floor(Math.random() * 16) + 15; // 15-30 points
					LK.setScore(Math.max(0, LK.getScore() - pointsLost));
					// Create rifle visual effect
					var rifle = new Rifle(self.x, self.y, snake.x, snake.y);
					game.addChild(rifle);
					rifles.push(rifle);
					// Play rifle shot sound and effects
					LK.getSound('rifle_shot').play();
					LK.effects.flashObject(self, 0xFF0000, 1000);
					LK.effects.flashScreen(0xFF0000, 300);
					checkLevelDown();
				}
			}
			self.specialAbilityTimer = 0;
			self.specialAbilityCooldown = 180 + Math.random() * 240;
		}
		if (self.isEscaping) {
			var dx = self.x - snake.x;
			var dy = self.y - snake.y;
			var distance = Math.sqrt(dx * dx + dy * dy);
			if (distance > 0) {
				var escapeSpeed = self.speed * 3;
				self.x += dx / distance * escapeSpeed;
				self.y += dy / distance * escapeSpeed;
			}
		} else {
			var distanceToSnake = Math.sqrt(Math.pow(self.x - snake.x, 2) + Math.pow(self.y - snake.y, 2));
			if (distanceToSnake < self.detectionRange) {
				self.isEscaping = true;
				LK.effects.flashObject(self, 0xFF0000, 300);
			} else {
				self.wanderTimer++;
				if (self.wanderTimer >= self.wanderChangeTime) {
					self.wanderDirection = Math.random() * Math.PI * 2;
					self.wanderTimer = 0;
					self.wanderChangeTime = 60 + Math.random() * 120;
				}
				self.x += Math.cos(self.wanderDirection) * self.speed;
				self.y += Math.sin(self.wanderDirection) * self.speed;
			}
		}
		if (self.x < 50) self.x = 50;
		if (self.x > 1998) self.x = 1998;
		if (self.y < 50) self.y = 50;
		if (self.y > 2682) self.y = 2682;
	};
	return self;
});
var Message = Container.expand(function (text, color) {
	var self = Container.call(this);
	self.lifetime = 300; // 5 seconds at 60fps
	self.age = 0;
	self.fadeStartTime = 240; // Start fading after 4 seconds
	var messageText = new Text2(text, {
		size: 40,
		fill: color || 0xFFFFFF
	});
	messageText.anchor.set(0.5, 0.5);
	self.addChild(messageText);
	// Position at center of screen
	self.x = 1024;
	self.y = 1366;
	// Initial fade in effect
	self.alpha = 0;
	tween(self, {
		alpha: 1
	}, {
		duration: 500,
		easing: tween.easeOut
	});
	self.update = function () {
		self.age++;
		// Start fading out
		if (self.age >= self.fadeStartTime && self.alpha > 0) {
			var fadeProgress = (self.age - self.fadeStartTime) / (self.lifetime - self.fadeStartTime);
			self.alpha = Math.max(0, 1 - fadeProgress);
		}
		if (self.age >= self.lifetime) {
			self.shouldDestroy = true;
		}
	};
	return self;
});
var Rifle = Container.expand(function (x, y, targetX, targetY) {
	var self = Container.call(this);
	self.lifetime = 120; // 2 seconds at 60fps
	self.age = 0;
	var rifleGraphics = self.attachAsset('rifle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.x = x;
	self.y = y;
	// Calculate angle to target
	var dx = targetX - x;
	var dy = targetY - y;
	rifleGraphics.rotation = Math.atan2(dy, dx);
	// Muzzle flash effect
	LK.effects.flashObject(self, 0xFFFF00, 200);
	self.update = function () {
		self.age++;
		// Recoil animation
		if (self.age < 10) {
			rifleGraphics.x = -self.age;
		} else if (self.age < 20) {
			rifleGraphics.x = -(20 - self.age);
		} else {
			rifleGraphics.x = 0;
		}
		if (self.age >= self.lifetime) {
			self.shouldDestroy = true;
		}
	};
	return self;
});
var Snake = Container.expand(function () {
	var self = Container.call(this);
	self.isMoving = false;
	self.targetX = 0;
	self.targetY = 0;
	self.moveSpeed = 4;
	var snakeGraphics = self.attachAsset('snake', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.moveTo = function (x, y) {
		self.targetX = x;
		self.targetY = y;
		self.isMoving = true;
	};
	self.update = function () {
		if (self.isMoving) {
			var dx = self.targetX - self.x;
			var dy = self.targetY - self.y;
			var distance = Math.sqrt(dx * dx + dy * dy);
			if (distance < self.moveSpeed) {
				self.x = self.targetX;
				self.y = self.targetY;
				self.isMoving = false;
			} else {
				self.x += dx / distance * self.moveSpeed;
				self.y += dy / distance * self.moveSpeed;
			}
		}
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x006400
});
/**** 
* Game Code
****/ 
var background = game.attachAsset('background', {
	x: 0,
	y: 0
});
var snake = game.addChild(new Snake());
snake.x = 1024;
snake.y = 1366;
var children = [];
var bottles = [];
var adults = [];
var rifles = [];
var currentLevel = 1;
var pointsNeeded = 50;
// Arrays of names for children
var girlNames = ['Mia', 'Sara', 'Laura', 'Maya', 'Julie', 'Olivia', 'Martine', 'Paula', 'Daisy', 'Juliette', 'Margot', 'Tina', 'Abigaïl', 'Clémence', 'Amélie', 'Amina', 'Laurence', 'Ilona', 'Gloria', 'Valentina', 'Victoria', 'Ninon', 'Manon', 'Violette', 'Rose', 'Zélie', 'Ylenia', 'Sabrina', 'Harper', 'Valentine', 'Élodie', 'Grâce', 'Jade', 'Eva', 'Maëva', 'Anna', 'Alice', 'Louise', 'Zoé', 'Chloé', 'Julia', 'Romy', 'Iris', 'Ambre', 'Agathe', 'Inaya', 'Lea', 'Adele', 'Clara', 'Emily', 'Eveline', 'Dorine', 'Lou', 'Amelia', 'Isabella', 'Charlotte', 'Delphine', 'Dona', 'Yasmine', 'Marie', 'Carine', 'Kimberly', 'Erina', 'Maëlle', 'Joséphine', 'Jacqueline', 'Françoise', 'Théa', 'Denise'];
var boyNames = ['Hugo', 'Louis', 'Karim', 'Julien', 'Thomas', 'Thom', 'Lucas', 'Clément', 'Laurent', 'Ibrahim', 'Mohamed', 'Léo', 'Willy', 'Moris', 'Mathieu', 'Marius', 'Paul', 'Valentin', 'Bernard', 'Eric', 'Jules', 'Claude', 'Quentin', 'Gabriel', 'Dimitri', 'Raphaël', 'Noa', 'Maël', 'Arthur', 'Adam', 'Isaac', 'Eden', 'Léon', 'Sacha', 'Aaron', 'Liam', 'Naël', 'Malo', 'Baptiste', 'Corentin', 'Diego', 'Alexandre', 'Felix', 'Gaspard', 'Alain', 'Albert', 'Adrien', 'Achille', 'Dorian', 'Alexis', 'Alex', 'Mylan', 'Pierre', 'Yann', 'Axel', 'Charles', 'David', 'Joseph', 'Jacques', 'Antoine', 'François', 'Théo', 'Maxime', 'Victor', 'Anthony', 'André', 'William', 'Jacob', 'Nathan', 'Sam', 'Logan'];
var messages = [];
var levelText = new Text2('Level: 1', {
	size: 60,
	fill: 0xFFFFFF
});
levelText.anchor.set(0, 0);
levelText.x = 150;
levelText.y = 50;
LK.gui.topLeft.addChild(levelText);
var scoreText = new Text2('Score: 0', {
	size: 60,
	fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var targetText = new Text2('Target: ' + pointsNeeded, {
	size: 50,
	fill: 0xFFFF00
});
targetText.anchor.set(1, 0);
targetText.x = -50;
targetText.y = 50;
LK.gui.topRight.addChild(targetText);
function spawnChildren() {
	var boyCount = Math.floor(Math.random() * 6) + 1;
	var girlCount = Math.floor(Math.random() * 6) + 1;
	for (var i = 0; i < boyCount; i++) {
		var boy = game.addChild(new Child('boy'));
		boy.x = Math.random() * 1800 + 124;
		boy.y = Math.random() * 2400 + 166;
		// Speed is now calculated in Child constructor based on age
		boy.speed += (currentLevel - 1) * 0.2;
		children.push(boy);
	}
	for (var j = 0; j < girlCount; j++) {
		var girl = game.addChild(new Child('girl'));
		girl.x = Math.random() * 1800 + 124;
		girl.y = Math.random() * 2400 + 166;
		// Speed is now calculated in Child constructor based on age
		girl.speed += (currentLevel - 1) * 0.2;
		children.push(girl);
	}
}
function updateUI() {
	levelText.setText('Level: ' + currentLevel);
	scoreText.setText('Score: ' + LK.getScore());
	targetText.setText('Target: ' + pointsNeeded);
}
function checkLevelUp() {
	if (LK.getScore() >= pointsNeeded) {
		currentLevel++;
		if (currentLevel > 35) {
			LK.showYouWin();
			return;
		}
		// Reset score to 0 and calculate new points needed for next level
		LK.setScore(0);
		pointsNeeded = 50 + (currentLevel - 2) * 5;
		for (var i = 0; i < children.length; i++) {
			children[i].destroy();
		}
		children = [];
		spawnChildren();
		updateUI();
		LK.effects.flashScreen(0x00FF00, 500);
	}
}
function checkLevelDown() {
	if (LK.getScore() < 0) {
		LK.setScore(0);
	}
	// Check if we need to go down a level (if score becomes very low compared to target)
	var minScoreForLevel = Math.max(0, pointsNeeded - 50);
	if (LK.getScore() < minScoreForLevel && currentLevel > 1) {
		currentLevel--;
		pointsNeeded = 50 + (currentLevel - 2) * 5;
		if (pointsNeeded < 50) pointsNeeded = 50;
		for (var i = 0; i < children.length; i++) {
			children[i].destroy();
		}
		children = [];
		spawnChildren();
		updateUI();
		LK.effects.flashScreen(0xFF4444, 500);
	}
}
spawnChildren();
updateUI();
game.down = function (x, y, obj) {
	snake.moveTo(x, y);
};
game.update = function () {
	for (var i = children.length - 1; i >= 0; i--) {
		var child = children[i];
		if (snake.intersects(child)) {
			LK.setScore(LK.getScore() + 5);
			LK.getSound('catch').play();
			// Display congratulations message
			var congratsMessage = new Message('Félicitations ! Vous avez mangé ' + child.name + ' ce petit désastre ambulant', 0x00FF00);
			game.addChild(congratsMessage);
			messages.push(congratsMessage);
			child.destroy();
			children.splice(i, 1);
			checkLevelUp();
			continue;
		}
		var distanceFromCenter = Math.sqrt(Math.pow(child.x - 1024, 2) + Math.pow(child.y - 1366, 2));
		if (distanceFromCenter > 1500) {
			// Display escape message
			var escapeMessage = new Message('Oh non! ' + child.name + ' a réussi à s\'enfuir !', 0xFF4444);
			game.addChild(escapeMessage);
			messages.push(escapeMessage);
			child.destroy();
			children.splice(i, 1);
		}
	}
	// Handle bottle collisions and cleanup
	for (var b = bottles.length - 1; b >= 0; b--) {
		var bottle = bottles[b];
		// Check collision with snake
		if (snake.intersects(bottle)) {
			LK.setScore(Math.max(0, LK.getScore() - 2));
			LK.effects.flashObject(snake, 0xFF0000, 500);
			bottle.destroy();
			bottles.splice(b, 1);
			checkLevelDown();
			continue;
		}
		// Check if bottle should be destroyed
		if (bottle.shouldDestroy) {
			bottle.destroy();
			bottles.splice(b, 1);
		}
	}
	// Handle adult cleanup
	for (var a = adults.length - 1; a >= 0; a--) {
		var adult = adults[a];
		if (adult.shouldDestroy) {
			adult.destroy();
			adults.splice(a, 1);
		}
	}
	// Handle rifle cleanup
	for (var r = rifles.length - 1; r >= 0; r--) {
		var rifle = rifles[r];
		if (rifle.shouldDestroy) {
			rifle.destroy();
			rifles.splice(r, 1);
		}
	}
	// Handle message cleanup
	for (var m = messages.length - 1; m >= 0; m--) {
		var message = messages[m];
		if (message.shouldDestroy) {
			message.destroy();
			messages.splice(m, 1);
		}
	}
	if (children.length === 0) {
		spawnChildren();
	}
	updateUI();
};
LK.playMusic('jungle');
 Fond d'écran forêt amazonienne. In-Game asset. 2d. High contrast. No shadows
 Petite fille. In-Game asset. 2d. High contrast. No shadows
 Petit garçon. In-Game asset. 2d. High contrast. No shadows
 Serpent. In-Game asset. 2d. High contrast. No shadows
 Biberon. In-Game asset. 2d. High contrast. No shadows
 Fusil. In-Game asset. 2d. High contrast. No shadows
 Adulte de 30 ans. In-Game asset. 2d. High contrast. No shadows