xxxxxxxxxx
256
// sketch.js
let gameStarted = false;
let gameOver = false;
let gameResult = "";
let timer = 15; // Game duration in seconds
let countdown = timer;
let player;
let tiger;
let backgroundElements = [];
let playerSpeed = 0; // Player's current speed
let basePlayerSpeed = 2; // Base speed when not clicking
let maxPlayerSpeed = 10; // Maximum player speed
let playerAcceleration = 0.5; // How much speed increases per click
let playerDecay = 0.1; // How much speed decreases per frame when not clicking
let tigerSpeed = 0; // Tiger's current speed
let baseTigerSpeed = 2; // Base tiger speed
let maxTigerSpeed = 10; // Maximum tiger speed
let tigerAcceleration = 0.5; // Tiger's speed increase rate (mirrors player)
let pathY; // Y position of the path
function setup() {
createCanvas(windowWidth, windowHeight);
pathY = height * 0.7;
// Initialize game elements
setupGameElements();
}
function draw() {
background(135, 206, 235); // Sky blue background
if (!gameStarted) {
handleStartPage();
} else if (gameStarted && !gameOver) {
handleGamePage();
} else if (gameOver) {
handleEndPage();
}
}
function handleStartPage() {
fill(0);
textSize(36);
textAlign(CENTER, CENTER);
text("Press SPACE to Start Running!", width / 2, height / 2 - 50);
}
function handleGamePage() {
// Move the camera to follow the player
push();
translate(-player.x + width / 2, 0);
// Draw the ground
drawGround();
// Update and draw background elements
updateBackgroundElements();
// Update player and tiger positions
updatePlayer();
updateTiger();
// Draw player and tiger
drawPlayer();
drawTiger();
pop();
// Display the timer and player speed
displayHUD();
// Check for win or loss conditions
checkWinOrLoss();
}
function handleEndPage() {
fill(gameResult.includes("Win") ? color(0, 200, 0) : color(200, 0, 0));
textSize(48);
textAlign(CENTER, CENTER);
text(gameResult, width / 2, height / 2);
// Instructions to restart
textSize(24);
fill(0);
text("Press 'R' to Restart", width / 2, height / 2 + 50);
}
function setupGameElements() {
// Initialize player and tiger positions
player = {
x: 0,
y: height / 2,
size: 50,
};
tiger = {
x: -200, // Start behind the player
y: height / 2,
size: 80,
};
// Initialize background elements
backgroundElements = [];
for (let i = 0; i < 50; i++) {
backgroundElements.push(createBackgroundElement());
}
// Reset variables
playerSpeed = basePlayerSpeed;
tigerSpeed = baseTigerSpeed;
countdown = timer;
gameOver = false;
gameResult = "";
}
function updatePlayer() {
// Update player's speed
if (keyIsDown(32)) {
// If SPACE is pressed, increase speed
playerSpeed += playerAcceleration;
playerSpeed = constrain(playerSpeed, basePlayerSpeed, maxPlayerSpeed);
} else {
// If not pressing, decrease speed
playerSpeed -= playerDecay;
playerSpeed = constrain(playerSpeed, basePlayerSpeed, maxPlayerSpeed);
}
// Update player's position based on speed
player.x += playerSpeed;
}
function updateTiger() {
// Increase tiger's speed over time to match player's increase
tigerSpeed += tigerAcceleration * 0.01; // Adjust as needed for balance
tigerSpeed = constrain(tigerSpeed, baseTigerSpeed, maxTigerSpeed);
// Tiger moves towards the player
tiger.x += tigerSpeed;
}
function drawPlayer() {
fill(0, 255, 0); // Green color for player
noStroke();
push();
translate(player.x, player.y);
ellipse(0, 0, player.size, player.size); // Represent the player as a circle
pop();
}
function drawTiger() {
fill(255, 165, 0); // Orange color for tiger
noStroke();
push();
translate(tiger.x, tiger.y);
ellipse(0, 0, tiger.size, tiger.size); // Represent the tiger as a circle
pop();
}
function drawGround() {
fill(34, 139, 34); // Green color for ground
rect(player.x - width / 2, pathY, width, height - pathY);
// Draw lane lines or texture if desired
}
function createBackgroundElement() {
return {
x: random(player.x - width, player.x + width * 2),
y: random(0, pathY - 100),
size: random(50, 100),
};
}
function updateBackgroundElements() {
for (let elem of backgroundElements) {
// Remove elements that are far behind
if (elem.x < player.x - width) {
elem.x = player.x + random(width, width * 2);
elem.y = random(0, pathY - 100);
elem.size = random(50, 100);
}
drawBackgroundElement(elem);
}
}
function drawBackgroundElement(elem) {
fill(139, 69, 19); // Brown color for tree trunks
rect(elem.x - 5, elem.y + 50, 10, 50); // Tree trunk
fill(34, 139, 34); // Green color for leaves
ellipse(elem.x, elem.y + 50, elem.size, elem.size); // Tree foliage
}
function displayHUD() {
fill(255);
textSize(24);
textAlign(LEFT, TOP);
text("Time Left: " + countdown + "s", 20, 20);
text("Player Speed: " + nf(playerSpeed, 0, 2), 20, 50);
text("Tiger Speed: " + nf(tigerSpeed, 0, 2), 20, 80);
}
function checkWinOrLoss() {
// Check win condition: Player runs for the duration without being caught
if (countdown <= 0) {
gameOver = true;
gameResult = "You Escaped the Tiger! You Win!";
endGame();
}
// Check loss condition: Tiger catches the player
if (tiger.x + tiger.size / 2 >= player.x - player.size / 2) {
gameOver = true;
gameResult = "The Tiger Caught You!";
endGame();
}
}
function endGame() {
clearInterval(timerInterval);
}
function keyPressed() {
if (!gameStarted && keyCode === 32) { // SPACE key to start the game
gameStarted = true;
startTimer();
}
if (gameOver && (key === 'r' || key === 'R')) {
setupGameElements();
startTimer();
}
}
function keyReleased() {
// Optionally, handle key release if needed
}
// *** TIMER FUNCTION ***
let timerInterval;
function startTimer() {
countdown = timer;
timerInterval = setInterval(() => {
if (countdown > 0) {
countdown--;
} else {
clearInterval(timerInterval);
}
}, 1000);
}