User prompt
basladigim yere kadar yol olsun
User prompt
arabalari 2x hizlandir ve daha fazla yol olustur
Code edit (1 edits merged)
Please save this source code
User prompt
Chicken Cross - Road Rush
User prompt
tavuk ile karsidan karsiya gitme oyunu yap yoldan surekli arabalar gecsin bizde kontrol ederek gecmeye calisalim
User prompt
Please continue polishing my design document.
Initial prompt
tavuk ile karsidan karsiya gitme oyunu yap yoldan surekli arabalar gecsin bizde kontrol ederek gecmeye calisalim
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Car = Container.expand(function (direction, speed, lane) { var self = Container.call(this); var carGraphics = self.attachAsset('car', { anchorX: 0.5, anchorY: 0.5 }); self.direction = direction; // 1 for right, -1 for left self.speed = speed; self.lane = lane; // Position car based on direction if (self.direction === 1) { self.x = -60; // Start from left } else { self.x = 2048 + 60; // Start from right } self.y = 2732 - 250 - lane * 180; // Position in center of road with original spacing self.update = function () { self.x += self.speed * self.direction; // Remove car when it goes off screen if (self.direction === 1 && self.x > 2048 + 100) { self.removeFromParent = true; } else if (self.direction === -1 && self.x < -100) { self.removeFromParent = true; } }; return self; }); var Chicken = Container.expand(function () { var self = Container.call(this); var chickenGraphics = self.attachAsset('chicken', { anchorX: 0.5, anchorY: 0.5 }); self.moveStep = 100; self.isMoving = false; self.targetY = 2732 - 100; // Start near bottom self.moveForward = function () { if (self.isMoving) return; self.isMoving = true; // Calculate next valid road position var currentY = self.y; var nextRoadY = null; var roadSpacing = 180; var startY = 2732 - 250; // Find the next road position above current position for (var i = 0; i < 12; i++) { var roadY = startY - i * roadSpacing; if (roadY < currentY && roadY >= 0) { nextRoadY = roadY; break; } } // If no road found above, move to finish line if (nextRoadY === null) { nextRoadY = 50; } // Animate movement directly to next road tween(self, { y: nextRoadY }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { self.isMoving = false; // Check if crossed a road if (self.y < 150) { // Crossed all roads, reset and increase score crossedRoad(); } } }); LK.getSound('move').play(); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x4CAF50 }); /**** * Game Code ****/ var chicken; var cars = []; var roads = []; var gameSpeed = 1; var carSpawnTimer = 0; var carSpawnRate = 40; // frames between car spawns - fewer cars var crossedRoads = 0; var bonusMode = false; var questionAsked = false; var waitingForAnswer = false; var playerHealth = 2; // Player can take 2 hits before dying var invincibilityMode = false; // Cheat mode for invincibility - deactivated var chatInput = ''; // Store chat input var carsPerLane = []; // Track number of cars in each lane // Question system variables var currentLevel = storage.currentLevel || 1; var correctAnswers = 0; var wrongAnswers = 0; var currentQuestion = ''; var questionOptions = []; var correctAnswer = ''; var questionIndex = 0; // Question sets by difficulty level var questionSets = { 1: [{ q: "2 + 2 = ?", options: ["3", "4", "5", "6"], correct: "4" }, { q: "5 - 3 = ?", options: ["1", "2", "3", "4"], correct: "2" }, { q: "3 × 2 = ?", options: ["5", "6", "7", "8"], correct: "6" }, { q: "8 ÷ 2 = ?", options: ["3", "4", "5", "6"], correct: "4" }, { q: "1 + 1 = ?", options: ["1", "2", "3", "4"], correct: "2" }, { q: "6 - 4 = ?", options: ["1", "2", "3", "4"], correct: "2" }, { q: "4 × 3 = ?", options: ["10", "11", "12", "13"], correct: "12" }, { q: "9 ÷ 3 = ?", options: ["2", "3", "4", "5"], correct: "3" }, { q: "7 + 3 = ?", options: ["9", "10", "11", "12"], correct: "10" }, { q: "10 - 5 = ?", options: ["4", "5", "6", "7"], correct: "5" }], 2: [{ q: "15 + 27 = ?", options: ["40", "41", "42", "43"], correct: "42" }, { q: "84 - 36 = ?", options: ["46", "47", "48", "49"], correct: "48" }, { q: "12 × 7 = ?", options: ["82", "83", "84", "85"], correct: "84" }, { q: "96 ÷ 8 = ?", options: ["11", "12", "13", "14"], correct: "12" }, { q: "25 + 39 = ?", options: ["62", "63", "64", "65"], correct: "64" }, { q: "73 - 28 = ?", options: ["43", "44", "45", "46"], correct: "45" }, { q: "9 × 6 = ?", options: ["52", "53", "54", "55"], correct: "54" }, { q: "72 ÷ 9 = ?", options: ["7", "8", "9", "10"], correct: "8" }, { q: "46 + 17 = ?", options: ["61", "62", "63", "64"], correct: "63" }, { q: "81 - 35 = ?", options: ["44", "45", "46", "47"], correct: "46" }], 3: [{ q: "127 + 248 = ?", options: ["373", "374", "375", "376"], correct: "375" }, { q: "543 - 187 = ?", options: ["354", "355", "356", "357"], correct: "356" }, { q: "23 × 15 = ?", options: ["343", "344", "345", "346"], correct: "345" }, { q: "384 ÷ 12 = ?", options: ["30", "31", "32", "33"], correct: "32" }, { q: "289 + 156 = ?", options: ["443", "444", "445", "446"], correct: "445" }, { q: "672 - 298 = ?", options: ["372", "373", "374", "375"], correct: "374" }, { q: "17 × 24 = ?", options: ["406", "407", "408", "409"], correct: "408" }, { q: "456 ÷ 24 = ?", options: ["17", "18", "19", "20"], correct: "19" }, { q: "365 + 278 = ?", options: ["641", "642", "643", "644"], correct: "643" }, { q: "834 - 467 = ?", options: ["365", "366", "367", "368"], correct: "367" }] }; var answerButtons = []; var currentQuestionShown = false; // Create score display var scoreTxt = new Text2('0', { size: 100, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0.5); scoreTxt.x = 1024; // Center horizontally scoreTxt.y = 50; // Position at the top end of roads game.addChild(scoreTxt); // Create bonus question UI elements var questionTxt = new Text2('Bonus puan denemek ister misin?', { size: 60, fill: 0xFFFFFF }); questionTxt.anchor.set(0.5, 0.5); questionTxt.x = 1024; questionTxt.y = 1366; questionTxt.visible = false; game.addChild(questionTxt); var bonusBtn = new Text2('BONUS', { size: 50, fill: 0x00FF00 }); bonusBtn.anchor.set(0.5, 0.5); bonusBtn.x = 850; bonusBtn.y = 1500; bonusBtn.visible = false; game.addChild(bonusBtn); var continueBtn = new Text2('DEVAM ET', { size: 50, fill: 0x0080FF }); continueBtn.anchor.set(0.5, 0.5); continueBtn.x = 1200; continueBtn.y = 1500; continueBtn.visible = false; game.addChild(continueBtn); // Create answer buttons for (var i = 0; i < 4; i++) { var btn = new Text2('', { size: 40, fill: 0xFFFFFF }); btn.anchor.set(0.5, 0.5); btn.x = 512 + i * 256; btn.y = 1600; btn.visible = false; btn.buttonIndex = i; answerButtons.push(btn); game.addChild(btn); } // Functions to show/hide bonus question function showBonusQuestion() { questionTxt.visible = true; bonusBtn.visible = true; continueBtn.visible = true; waitingForAnswer = true; } function hideBonusQuestion() { questionTxt.visible = false; bonusBtn.visible = false; continueBtn.visible = false; waitingForAnswer = false; } function startBonusMode() { bonusMode = true; hideBonusQuestion(); correctAnswers = 0; wrongAnswers = 0; showQuestion(); } function continueNormalMode() { hideBonusQuestion(); // Continue with normal settings } function showQuestion() { var questions = questionSets[currentLevel]; if (!questions || questionIndex >= questions.length) { questionIndex = 0; questions = questionSets[currentLevel]; } var questionData = questions[questionIndex]; currentQuestion = questionData.q; questionOptions = questionData.options; correctAnswer = questionData.correct; questionTxt.setText(currentQuestion); questionTxt.visible = true; for (var i = 0; i < 4; i++) { answerButtons[i].setText(questionOptions[i]); answerButtons[i].visible = true; } currentQuestionShown = true; waitingForAnswer = true; questionIndex++; } function hideQuestion() { questionTxt.visible = false; for (var i = 0; i < 4; i++) { answerButtons[i].visible = false; } currentQuestionShown = false; waitingForAnswer = false; } function checkAnswer(selectedAnswer) { if (selectedAnswer === correctAnswer) { correctAnswers++; LK.effects.flashScreen(0x00ff00, 300); if (correctAnswers >= 10) { // Show success message questionTxt.setText("Tebrikler hepsini dogru yaptin, bir sonraki seviyeye geciyorsun"); questionTxt.visible = true; // Hide answer buttons for (var i = 0; i < 4; i++) { answerButtons[i].visible = false; } // Level up after 2 seconds LK.setTimeout(function () { currentLevel++; storage.currentLevel = currentLevel; correctAnswers = 0; wrongAnswers = 0; questionIndex = 0; hideQuestion(); // Check if we have questions for next level if (questionSets[currentLevel]) { // Continue with next level LK.setTimeout(function () { showQuestion(); }, 500); } else { // No more levels, return to normal game bonusMode = false; questionAsked = false; gameSpeed = 1; carSpawnRate = 40; chicken.y = 2732 - 100; crossedRoads = 0; hideQuestion(); waitingForAnswer = false; } }, 2000); } else { // Show next question LK.setTimeout(function () { showQuestion(); }, 500); } } else { wrongAnswers++; LK.effects.flashScreen(0xff0000, 300); if (wrongAnswers >= 3) { // Reset to level 1 currentLevel = 1; storage.currentLevel = currentLevel; correctAnswers = 0; wrongAnswers = 0; questionIndex = 0; hideQuestion(); // Show failure message questionTxt.setText("3 yanlis yaptiniz, basa donuyorsunuz"); questionTxt.visible = true; LK.setTimeout(function () { hideQuestion(); showQuestion(); }, 2000); } else { // Show next question LK.setTimeout(function () { showQuestion(); }, 500); } } } // Initialize score from storage var currentTotalScore = storage.totalScore || 0; LK.setScore(currentTotalScore); scoreTxt.setText(currentTotalScore.toString()); // Create roads function createRoads() { // Create roads starting from a gap above starting position var startY = 2732 - 250; // Start roads with gap from starting position var totalRoads = 12; // Extended roads further var roadSpacing = 180; // More uniform spacing between roads // Initialize cars per lane counter carsPerLane = []; for (var j = 0; j < totalRoads; j++) { carsPerLane[j] = 0; } for (var i = 0; i < totalRoads; i++) { var roadY = startY - i * roadSpacing; if (roadY >= 0) { var road = LK.getAsset('road', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: roadY }); roads.push(road); game.addChild(road); // Add road lines at the edges of roads for better visual separation var roadLineTop = LK.getAsset('roadLine', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: roadY - 75 }); game.addChild(roadLineTop); var roadLineBottom = LK.getAsset('roadLine', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: roadY + 75 }); game.addChild(roadLineBottom); } } } // Create chicken function createChicken() { chicken = game.addChild(new Chicken()); chicken.x = 1024; // Center horizontally chicken.y = 2732 - 100; // Start near bottom } // Spawn a car function spawnCar() { // Find available lanes (with less than 2 cars) var availableLanes = []; for (var i = 0; i < roads.length; i++) { if (carsPerLane[i] < 2) { availableLanes.push(i); } } // Only spawn if there are available lanes if (availableLanes.length > 0) { var lane = availableLanes[Math.floor(Math.random() * availableLanes.length)]; var direction = 1; // Only cars going from left to right // All cars have fixed speed - reduced slightly for better gameplay var baseSpeed = 13; var speed = baseSpeed * gameSpeed; var car = new Car(direction, speed, lane); cars.push(car); game.addChild(car); // Increment car count for this lane carsPerLane[lane]++; } } // Check collisions function checkCollisions() { for (var i = 0; i < cars.length; i++) { var car = cars[i]; if (chicken.intersects(car) && !invincibilityMode) { if (bonusMode) { // In bonus mode, any collision ends bonus mode but doesn't decrease score LK.getSound('hit').play(); LK.effects.flashScreen(0xff4444, 500); bonusMode = false; questionAsked = false; // Reset game settings to normal gameSpeed = 1; carSpawnRate = 25; // Reset chicken position and health chicken.y = 2732 - 100; crossedRoads = 0; playerHealth = 2; // Reset health return; } else { // Reduce health on any car collision playerHealth--; if (playerHealth > 0) { // First hit - injury, player survives LK.getSound('hit').play(); // Create injury effect - flash red and shake LK.effects.flashScreen(0xff4444, 300); tween(chicken, { x: chicken.x + 20 }, { duration: 50, easing: tween.easeOut, onFinish: function onFinish() { tween(chicken, { x: chicken.x - 40 }, { duration: 100, easing: tween.easeInOut, onFinish: function onFinish() { tween(chicken, { x: chicken.x + 20 }, { duration: 50, easing: tween.easeIn }); } }); } }); } else { // Second hit - death, game over and reset score LK.getSound('dead').play(); LK.effects.flashScreen(0xff0000, 500); // Reset score to 0 storage.totalScore = 0; LK.setScore(0); scoreTxt.setText('0'); // Reset health for next game playerHealth = 2; LK.setTimeout(function () { LK.showGameOver(); }, 500); return; } // Remove the car after collision carsPerLane[car.lane]--; car.removeFromParent = true; } } } } // Handle successful road crossing function crossedRoad() { crossedRoads++; var totalScore = storage.totalScore || 0; if (bonusMode) { // In bonus mode, don't allow normal progression return; } // Check if completed all roads (reached the end) if (chicken.y <= 50) { // Completed all roads - give 1 point and reset to start totalScore += 1; storage.totalScore = totalScore; LK.setScore(totalScore); scoreTxt.setText(totalScore.toString()); // Reset chicken position to starting position when score increases chicken.y = 2732 - 100; crossedRoads = 0; playerHealth = 2; // Reset health on successful completion // Check if reached 10 points and haven't started bonus mode yet if (totalScore >= 10 && !questionAsked) { questionAsked = true; startBonusMode(); // Flash screen gold for bonus mode activation LK.effects.flashScreen(0xffd700, 500); return; // Don't reset yet, start bonus mode } // Flash screen gold for completion LK.effects.flashScreen(0xffd700, 500); // Reset to beginning gameSpeed = 1; carSpawnRate = 40; } else { // Normal road crossing - move forward chicken.y = 2732 - 100; // Increase difficulty gameSpeed += 0.1; if (carSpawnRate > 30) { carSpawnRate -= 2; } // Flash screen green for success LK.effects.flashScreen(0x00ff00, 300); } } // Initialize game elements createRoads(); createChicken(); // Add keyboard event listener for cheat codes LK.on('keydown', function (event) { var key = String.fromCharCode(event.keyCode).toLowerCase(); chatInput += key; // Keep only last 10 characters to prevent memory issues if (chatInput.length > 10) { chatInput = chatInput.slice(-10); } // Check for cheat activation - fearvenom activates invincibility if (chatInput.includes('fearvenom') && !chatInput.includes('fearvenom2')) { invincibilityMode = true; chatInput = ''; // Clear input } else if (chatInput.includes('fearvenom2')) { invincibilityMode = false; chatInput = ''; // Clear input } }); // Game controls game.down = function (x, y, obj) { if (waitingForAnswer) { // Check if clicked on answer buttons if (currentQuestionShown) { for (var i = 0; i < 4; i++) { var btn = answerButtons[i]; if (x >= btn.x - 120 && x <= btn.x + 120 && y >= btn.y - 30 && y <= btn.y + 30) { checkAnswer(btn.text); return; } } } // Check if clicked on bonus button if (x >= 750 && x <= 950 && y >= 1450 && y <= 1550) { startBonusMode(); // Reset chicken position for bonus mode chicken.y = 2732 - 100; crossedRoads = 0; return; } // Check if clicked on continue button if (x >= 1100 && x <= 1300 && y >= 1450 && y <= 1550) { continueNormalMode(); // Reset chicken position for normal mode chicken.y = 2732 - 100; crossedRoads = 0; return; } } if (chicken && !chicken.isMoving && !waitingForAnswer) { chicken.moveForward(); } }; // Main game loop game.update = function () { // Spawn cars carSpawnTimer++; if (carSpawnTimer >= carSpawnRate) { spawnCar(); carSpawnTimer = 0; } // Clean up cars that are off screen for (var i = cars.length - 1; i >= 0; i--) { var car = cars[i]; if (car.removeFromParent) { // Decrement car count for this lane carsPerLane[car.lane]--; car.destroy(); cars.splice(i, 1); } } // Check collisions checkCollisions(); };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Car = Container.expand(function (direction, speed, lane) {
var self = Container.call(this);
var carGraphics = self.attachAsset('car', {
anchorX: 0.5,
anchorY: 0.5
});
self.direction = direction; // 1 for right, -1 for left
self.speed = speed;
self.lane = lane;
// Position car based on direction
if (self.direction === 1) {
self.x = -60; // Start from left
} else {
self.x = 2048 + 60; // Start from right
}
self.y = 2732 - 250 - lane * 180; // Position in center of road with original spacing
self.update = function () {
self.x += self.speed * self.direction;
// Remove car when it goes off screen
if (self.direction === 1 && self.x > 2048 + 100) {
self.removeFromParent = true;
} else if (self.direction === -1 && self.x < -100) {
self.removeFromParent = true;
}
};
return self;
});
var Chicken = Container.expand(function () {
var self = Container.call(this);
var chickenGraphics = self.attachAsset('chicken', {
anchorX: 0.5,
anchorY: 0.5
});
self.moveStep = 100;
self.isMoving = false;
self.targetY = 2732 - 100; // Start near bottom
self.moveForward = function () {
if (self.isMoving) return;
self.isMoving = true;
// Calculate next valid road position
var currentY = self.y;
var nextRoadY = null;
var roadSpacing = 180;
var startY = 2732 - 250;
// Find the next road position above current position
for (var i = 0; i < 12; i++) {
var roadY = startY - i * roadSpacing;
if (roadY < currentY && roadY >= 0) {
nextRoadY = roadY;
break;
}
}
// If no road found above, move to finish line
if (nextRoadY === null) {
nextRoadY = 50;
}
// Animate movement directly to next road
tween(self, {
y: nextRoadY
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
self.isMoving = false;
// Check if crossed a road
if (self.y < 150) {
// Crossed all roads, reset and increase score
crossedRoad();
}
}
});
LK.getSound('move').play();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x4CAF50
});
/****
* Game Code
****/
var chicken;
var cars = [];
var roads = [];
var gameSpeed = 1;
var carSpawnTimer = 0;
var carSpawnRate = 40; // frames between car spawns - fewer cars
var crossedRoads = 0;
var bonusMode = false;
var questionAsked = false;
var waitingForAnswer = false;
var playerHealth = 2; // Player can take 2 hits before dying
var invincibilityMode = false; // Cheat mode for invincibility - deactivated
var chatInput = ''; // Store chat input
var carsPerLane = []; // Track number of cars in each lane
// Question system variables
var currentLevel = storage.currentLevel || 1;
var correctAnswers = 0;
var wrongAnswers = 0;
var currentQuestion = '';
var questionOptions = [];
var correctAnswer = '';
var questionIndex = 0;
// Question sets by difficulty level
var questionSets = {
1: [{
q: "2 + 2 = ?",
options: ["3", "4", "5", "6"],
correct: "4"
}, {
q: "5 - 3 = ?",
options: ["1", "2", "3", "4"],
correct: "2"
}, {
q: "3 × 2 = ?",
options: ["5", "6", "7", "8"],
correct: "6"
}, {
q: "8 ÷ 2 = ?",
options: ["3", "4", "5", "6"],
correct: "4"
}, {
q: "1 + 1 = ?",
options: ["1", "2", "3", "4"],
correct: "2"
}, {
q: "6 - 4 = ?",
options: ["1", "2", "3", "4"],
correct: "2"
}, {
q: "4 × 3 = ?",
options: ["10", "11", "12", "13"],
correct: "12"
}, {
q: "9 ÷ 3 = ?",
options: ["2", "3", "4", "5"],
correct: "3"
}, {
q: "7 + 3 = ?",
options: ["9", "10", "11", "12"],
correct: "10"
}, {
q: "10 - 5 = ?",
options: ["4", "5", "6", "7"],
correct: "5"
}],
2: [{
q: "15 + 27 = ?",
options: ["40", "41", "42", "43"],
correct: "42"
}, {
q: "84 - 36 = ?",
options: ["46", "47", "48", "49"],
correct: "48"
}, {
q: "12 × 7 = ?",
options: ["82", "83", "84", "85"],
correct: "84"
}, {
q: "96 ÷ 8 = ?",
options: ["11", "12", "13", "14"],
correct: "12"
}, {
q: "25 + 39 = ?",
options: ["62", "63", "64", "65"],
correct: "64"
}, {
q: "73 - 28 = ?",
options: ["43", "44", "45", "46"],
correct: "45"
}, {
q: "9 × 6 = ?",
options: ["52", "53", "54", "55"],
correct: "54"
}, {
q: "72 ÷ 9 = ?",
options: ["7", "8", "9", "10"],
correct: "8"
}, {
q: "46 + 17 = ?",
options: ["61", "62", "63", "64"],
correct: "63"
}, {
q: "81 - 35 = ?",
options: ["44", "45", "46", "47"],
correct: "46"
}],
3: [{
q: "127 + 248 = ?",
options: ["373", "374", "375", "376"],
correct: "375"
}, {
q: "543 - 187 = ?",
options: ["354", "355", "356", "357"],
correct: "356"
}, {
q: "23 × 15 = ?",
options: ["343", "344", "345", "346"],
correct: "345"
}, {
q: "384 ÷ 12 = ?",
options: ["30", "31", "32", "33"],
correct: "32"
}, {
q: "289 + 156 = ?",
options: ["443", "444", "445", "446"],
correct: "445"
}, {
q: "672 - 298 = ?",
options: ["372", "373", "374", "375"],
correct: "374"
}, {
q: "17 × 24 = ?",
options: ["406", "407", "408", "409"],
correct: "408"
}, {
q: "456 ÷ 24 = ?",
options: ["17", "18", "19", "20"],
correct: "19"
}, {
q: "365 + 278 = ?",
options: ["641", "642", "643", "644"],
correct: "643"
}, {
q: "834 - 467 = ?",
options: ["365", "366", "367", "368"],
correct: "367"
}]
};
var answerButtons = [];
var currentQuestionShown = false;
// Create score display
var scoreTxt = new Text2('0', {
size: 100,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0.5);
scoreTxt.x = 1024; // Center horizontally
scoreTxt.y = 50; // Position at the top end of roads
game.addChild(scoreTxt);
// Create bonus question UI elements
var questionTxt = new Text2('Bonus puan denemek ister misin?', {
size: 60,
fill: 0xFFFFFF
});
questionTxt.anchor.set(0.5, 0.5);
questionTxt.x = 1024;
questionTxt.y = 1366;
questionTxt.visible = false;
game.addChild(questionTxt);
var bonusBtn = new Text2('BONUS', {
size: 50,
fill: 0x00FF00
});
bonusBtn.anchor.set(0.5, 0.5);
bonusBtn.x = 850;
bonusBtn.y = 1500;
bonusBtn.visible = false;
game.addChild(bonusBtn);
var continueBtn = new Text2('DEVAM ET', {
size: 50,
fill: 0x0080FF
});
continueBtn.anchor.set(0.5, 0.5);
continueBtn.x = 1200;
continueBtn.y = 1500;
continueBtn.visible = false;
game.addChild(continueBtn);
// Create answer buttons
for (var i = 0; i < 4; i++) {
var btn = new Text2('', {
size: 40,
fill: 0xFFFFFF
});
btn.anchor.set(0.5, 0.5);
btn.x = 512 + i * 256;
btn.y = 1600;
btn.visible = false;
btn.buttonIndex = i;
answerButtons.push(btn);
game.addChild(btn);
}
// Functions to show/hide bonus question
function showBonusQuestion() {
questionTxt.visible = true;
bonusBtn.visible = true;
continueBtn.visible = true;
waitingForAnswer = true;
}
function hideBonusQuestion() {
questionTxt.visible = false;
bonusBtn.visible = false;
continueBtn.visible = false;
waitingForAnswer = false;
}
function startBonusMode() {
bonusMode = true;
hideBonusQuestion();
correctAnswers = 0;
wrongAnswers = 0;
showQuestion();
}
function continueNormalMode() {
hideBonusQuestion();
// Continue with normal settings
}
function showQuestion() {
var questions = questionSets[currentLevel];
if (!questions || questionIndex >= questions.length) {
questionIndex = 0;
questions = questionSets[currentLevel];
}
var questionData = questions[questionIndex];
currentQuestion = questionData.q;
questionOptions = questionData.options;
correctAnswer = questionData.correct;
questionTxt.setText(currentQuestion);
questionTxt.visible = true;
for (var i = 0; i < 4; i++) {
answerButtons[i].setText(questionOptions[i]);
answerButtons[i].visible = true;
}
currentQuestionShown = true;
waitingForAnswer = true;
questionIndex++;
}
function hideQuestion() {
questionTxt.visible = false;
for (var i = 0; i < 4; i++) {
answerButtons[i].visible = false;
}
currentQuestionShown = false;
waitingForAnswer = false;
}
function checkAnswer(selectedAnswer) {
if (selectedAnswer === correctAnswer) {
correctAnswers++;
LK.effects.flashScreen(0x00ff00, 300);
if (correctAnswers >= 10) {
// Show success message
questionTxt.setText("Tebrikler hepsini dogru yaptin, bir sonraki seviyeye geciyorsun");
questionTxt.visible = true;
// Hide answer buttons
for (var i = 0; i < 4; i++) {
answerButtons[i].visible = false;
}
// Level up after 2 seconds
LK.setTimeout(function () {
currentLevel++;
storage.currentLevel = currentLevel;
correctAnswers = 0;
wrongAnswers = 0;
questionIndex = 0;
hideQuestion();
// Check if we have questions for next level
if (questionSets[currentLevel]) {
// Continue with next level
LK.setTimeout(function () {
showQuestion();
}, 500);
} else {
// No more levels, return to normal game
bonusMode = false;
questionAsked = false;
gameSpeed = 1;
carSpawnRate = 40;
chicken.y = 2732 - 100;
crossedRoads = 0;
hideQuestion();
waitingForAnswer = false;
}
}, 2000);
} else {
// Show next question
LK.setTimeout(function () {
showQuestion();
}, 500);
}
} else {
wrongAnswers++;
LK.effects.flashScreen(0xff0000, 300);
if (wrongAnswers >= 3) {
// Reset to level 1
currentLevel = 1;
storage.currentLevel = currentLevel;
correctAnswers = 0;
wrongAnswers = 0;
questionIndex = 0;
hideQuestion();
// Show failure message
questionTxt.setText("3 yanlis yaptiniz, basa donuyorsunuz");
questionTxt.visible = true;
LK.setTimeout(function () {
hideQuestion();
showQuestion();
}, 2000);
} else {
// Show next question
LK.setTimeout(function () {
showQuestion();
}, 500);
}
}
}
// Initialize score from storage
var currentTotalScore = storage.totalScore || 0;
LK.setScore(currentTotalScore);
scoreTxt.setText(currentTotalScore.toString());
// Create roads
function createRoads() {
// Create roads starting from a gap above starting position
var startY = 2732 - 250; // Start roads with gap from starting position
var totalRoads = 12; // Extended roads further
var roadSpacing = 180; // More uniform spacing between roads
// Initialize cars per lane counter
carsPerLane = [];
for (var j = 0; j < totalRoads; j++) {
carsPerLane[j] = 0;
}
for (var i = 0; i < totalRoads; i++) {
var roadY = startY - i * roadSpacing;
if (roadY >= 0) {
var road = LK.getAsset('road', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: roadY
});
roads.push(road);
game.addChild(road);
// Add road lines at the edges of roads for better visual separation
var roadLineTop = LK.getAsset('roadLine', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: roadY - 75
});
game.addChild(roadLineTop);
var roadLineBottom = LK.getAsset('roadLine', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: roadY + 75
});
game.addChild(roadLineBottom);
}
}
}
// Create chicken
function createChicken() {
chicken = game.addChild(new Chicken());
chicken.x = 1024; // Center horizontally
chicken.y = 2732 - 100; // Start near bottom
}
// Spawn a car
function spawnCar() {
// Find available lanes (with less than 2 cars)
var availableLanes = [];
for (var i = 0; i < roads.length; i++) {
if (carsPerLane[i] < 2) {
availableLanes.push(i);
}
}
// Only spawn if there are available lanes
if (availableLanes.length > 0) {
var lane = availableLanes[Math.floor(Math.random() * availableLanes.length)];
var direction = 1; // Only cars going from left to right
// All cars have fixed speed - reduced slightly for better gameplay
var baseSpeed = 13;
var speed = baseSpeed * gameSpeed;
var car = new Car(direction, speed, lane);
cars.push(car);
game.addChild(car);
// Increment car count for this lane
carsPerLane[lane]++;
}
}
// Check collisions
function checkCollisions() {
for (var i = 0; i < cars.length; i++) {
var car = cars[i];
if (chicken.intersects(car) && !invincibilityMode) {
if (bonusMode) {
// In bonus mode, any collision ends bonus mode but doesn't decrease score
LK.getSound('hit').play();
LK.effects.flashScreen(0xff4444, 500);
bonusMode = false;
questionAsked = false;
// Reset game settings to normal
gameSpeed = 1;
carSpawnRate = 25;
// Reset chicken position and health
chicken.y = 2732 - 100;
crossedRoads = 0;
playerHealth = 2; // Reset health
return;
} else {
// Reduce health on any car collision
playerHealth--;
if (playerHealth > 0) {
// First hit - injury, player survives
LK.getSound('hit').play();
// Create injury effect - flash red and shake
LK.effects.flashScreen(0xff4444, 300);
tween(chicken, {
x: chicken.x + 20
}, {
duration: 50,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(chicken, {
x: chicken.x - 40
}, {
duration: 100,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(chicken, {
x: chicken.x + 20
}, {
duration: 50,
easing: tween.easeIn
});
}
});
}
});
} else {
// Second hit - death, game over and reset score
LK.getSound('dead').play();
LK.effects.flashScreen(0xff0000, 500);
// Reset score to 0
storage.totalScore = 0;
LK.setScore(0);
scoreTxt.setText('0');
// Reset health for next game
playerHealth = 2;
LK.setTimeout(function () {
LK.showGameOver();
}, 500);
return;
}
// Remove the car after collision
carsPerLane[car.lane]--;
car.removeFromParent = true;
}
}
}
}
// Handle successful road crossing
function crossedRoad() {
crossedRoads++;
var totalScore = storage.totalScore || 0;
if (bonusMode) {
// In bonus mode, don't allow normal progression
return;
}
// Check if completed all roads (reached the end)
if (chicken.y <= 50) {
// Completed all roads - give 1 point and reset to start
totalScore += 1;
storage.totalScore = totalScore;
LK.setScore(totalScore);
scoreTxt.setText(totalScore.toString());
// Reset chicken position to starting position when score increases
chicken.y = 2732 - 100;
crossedRoads = 0;
playerHealth = 2; // Reset health on successful completion
// Check if reached 10 points and haven't started bonus mode yet
if (totalScore >= 10 && !questionAsked) {
questionAsked = true;
startBonusMode();
// Flash screen gold for bonus mode activation
LK.effects.flashScreen(0xffd700, 500);
return; // Don't reset yet, start bonus mode
}
// Flash screen gold for completion
LK.effects.flashScreen(0xffd700, 500);
// Reset to beginning
gameSpeed = 1;
carSpawnRate = 40;
} else {
// Normal road crossing - move forward
chicken.y = 2732 - 100;
// Increase difficulty
gameSpeed += 0.1;
if (carSpawnRate > 30) {
carSpawnRate -= 2;
}
// Flash screen green for success
LK.effects.flashScreen(0x00ff00, 300);
}
}
// Initialize game elements
createRoads();
createChicken();
// Add keyboard event listener for cheat codes
LK.on('keydown', function (event) {
var key = String.fromCharCode(event.keyCode).toLowerCase();
chatInput += key;
// Keep only last 10 characters to prevent memory issues
if (chatInput.length > 10) {
chatInput = chatInput.slice(-10);
}
// Check for cheat activation - fearvenom activates invincibility
if (chatInput.includes('fearvenom') && !chatInput.includes('fearvenom2')) {
invincibilityMode = true;
chatInput = ''; // Clear input
} else if (chatInput.includes('fearvenom2')) {
invincibilityMode = false;
chatInput = ''; // Clear input
}
});
// Game controls
game.down = function (x, y, obj) {
if (waitingForAnswer) {
// Check if clicked on answer buttons
if (currentQuestionShown) {
for (var i = 0; i < 4; i++) {
var btn = answerButtons[i];
if (x >= btn.x - 120 && x <= btn.x + 120 && y >= btn.y - 30 && y <= btn.y + 30) {
checkAnswer(btn.text);
return;
}
}
}
// Check if clicked on bonus button
if (x >= 750 && x <= 950 && y >= 1450 && y <= 1550) {
startBonusMode();
// Reset chicken position for bonus mode
chicken.y = 2732 - 100;
crossedRoads = 0;
return;
}
// Check if clicked on continue button
if (x >= 1100 && x <= 1300 && y >= 1450 && y <= 1550) {
continueNormalMode();
// Reset chicken position for normal mode
chicken.y = 2732 - 100;
crossedRoads = 0;
return;
}
}
if (chicken && !chicken.isMoving && !waitingForAnswer) {
chicken.moveForward();
}
};
// Main game loop
game.update = function () {
// Spawn cars
carSpawnTimer++;
if (carSpawnTimer >= carSpawnRate) {
spawnCar();
carSpawnTimer = 0;
}
// Clean up cars that are off screen
for (var i = cars.length - 1; i >= 0; i--) {
var car = cars[i];
if (car.removeFromParent) {
// Decrement car count for this lane
carsPerLane[car.lane]--;
car.destroy();
cars.splice(i, 1);
}
}
// Check collisions
checkCollisions();
};
Fullscreen modern App Store landscape banner, 16:9, high definition, for a game titled "Chicken Cross - Road Rush" and with the description "Guide a chicken across busy roads filled with speeding cars. Time your movements carefully to avoid traffic and cross safely in this classic arcade-style challenge.". No text on banner!