/****
* Classes
****/
// Bonus class
var Bonus = Container.expand(function () {
var self = Container.call(this);
var bonusGraphics = self.attachAsset('bonus', {
anchorX: 0.5,
anchorY: 0.5
});
self.reposition = function () {
self.x = Math.random() * 2048;
self.y = Math.random() * 2732;
};
});
//<Assets used in the game will automatically appear here>
// Car class
var Car = Container.expand(function () {
var self = Container.call(this);
var carGraphics = self.attachAsset('car', {
anchorX: 0.5,
anchorY: 0.5
});
self.carSwitch = false;
self.canKillEnemies = false;
self.bonusTimer = 0;
self.carTimer = 0;
self.speed = 5;
self.direction = 0; // 0: straight, 1: left, 2: right
self.update = function () {
if (self.direction === 1) {
self.rotation -= 0.05;
} else if (self.direction === 2) {
self.rotation += 0.05;
}
var newX = self.x + self.speed * Math.cos(self.rotation);
var newY = self.y + self.speed * Math.sin(self.rotation);
if (newX >= 0 && newX <= 2048 && newY >= 0 && newY <= 2732) {
self.x = newX;
self.y = newY;
}
self.carTimer += 1;
self.bonusTimer += 1;
if (self.bonusTimer >= 900) {
self.canKillEnemies = false;
self.bonusTimer = 0;
}
if (self.carTimer >= 60) {
self.carTimer = 0;
self.carSwitch = !self.carSwitch;
if (self.carSwitch) {
self.attachAsset('car', {
anchorX: 0.5,
anchorY: 0.5
});
} else {
self.attachAsset('car2', {
anchorX: 0.5,
anchorY: 0.5
});
}
}
};
self.turnLeft = function () {
self.direction = 1;
};
self.turnRight = function () {
self.direction = 2;
};
self.straighten = function () {
self.direction = 0;
};
});
// Enemy class
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.enemySwitch = false;
self.enemyTimer = 0;
self.update = function () {
// Randomly change direction
if (Math.random() < 0.01) {
self.speedX = (Math.random() - 0.5) * 10;
self.speedY = (Math.random() - 0.5) * 10;
}
// Move in a random direction
self.x += self.speedX;
self.y += self.speedY;
// Keep within game area and bounce off the walls
if (self.x < 0) {
self.x = 0;
self.speedX = -self.speedX;
}
if (self.x > 2048) {
self.x = 2048;
self.speedX = -self.speedX;
}
if (self.y < 0) {
self.y = 0;
self.speedY = -self.speedY;
}
if (self.y > 2732) {
self.y = 2732;
self.speedY = -self.speedY;
}
self.enemyTimer += 1;
if (self.enemyTimer >= 60) {
self.enemyTimer = 0;
self.enemySwitch = !self.enemySwitch;
if (self.enemySwitch) {
self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
} else {
self.attachAsset('enemy2', {
anchorX: 0.5,
anchorY: 0.5
});
}
}
// Check if the enemy intersects with any poop
for (var i = 0; i < spirals.length; i++) {
if (spirals[i] instanceof Poop && self.intersects(spirals[i])) {
// Remove the poop from the game
spirals[i].destroy();
spirals.splice(i, 1);
// Decrease player lives by 1
playerLives -= 1;
livesTxt.setText('Lives: ' + playerLives); // Update the displayed lives
// Increase the speed of the enemy
self.speed += 0.1;
// End the game if the player's lives reach zero
if (playerLives <= 0) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
}
}
};
});
// Life class
var Life = Container.expand(function () {
var self = Container.call(this);
var lifeGraphics = self.attachAsset('life', {
anchorX: 0.5,
anchorY: 0.5
});
self.reposition = function () {
self.x = Math.random() * 2048;
self.y = Math.random() * 2732;
};
});
// Poop class
var Poop = Container.expand(function () {
var self = Container.call(this);
var poopGraphics = self.attachAsset('poop', {
anchorX: 0.5,
anchorY: 0.5
});
self.reposition = function () {
self.x = Math.random();
self.y = Math.random();
};
});
// Spiral class
var Spiral = Container.expand(function () {
var self = Container.call(this);
self.radius = 100;
self.angle = 0;
self.speed = 0.01;
self.update = function () {
self.angle += self.speed;
self.x = 2048 / 2 + self.radius * Math.cos(self.angle);
self.y = 2732 / 2 + self.radius * Math.sin(self.angle);
if (self.y > 2732) {
self.destroy();
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
var road = game.addChild(LK.getAsset('road', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
}));
// Initialize score and lives variables
var playerScore = 100;
var playerLives = 10;
var scoreTxt = new Text2('0', {
size: 150,
fill: "#0000FF" // Blue color
});
scoreTxt.anchor.set(0, 0); // Sets anchor to the left of the top edge of the text.
LK.gui.topLeft.addChild(scoreTxt); // Add the score text to the GUI overlay at the top left of the screen.
// Initialize and display player lives
var livesTxt = new Text2('10', {
size: 150,
fill: "#FF0000" // Red color
});
livesTxt.anchor.set(1, 0); // Sets anchor to the right of the top edge of the text.
LK.gui.topRight.addChild(livesTxt); // Add the lives text to the GUI overlay at the top right of the screen.
var enemyScore = 0;
var shouldSpawnBonus = false;
// Initialize variables
var car = new Car();
car.x = 2048 / 2;
car.y = 2732 / 2;
game.addChild(car);
var spirals = [];
var enemies = [];
for (var i = 0; i < 3; i++) {
var enemy = new Enemy();
enemy.x = Math.random() * 2048;
enemy.y = 2732 / 2 + 100;
enemies.push(enemy);
game.addChild(enemy);
}
var bonuses = [];
for (var i = 0; i < 2; i++) {
var bonus = new Bonus();
bonus.reposition();
bonuses.push(bonus);
game.addChild(bonus);
}
// Handle touch events
game.down = function (x, y, obj) {
if (x < 2048 / 2) {
car.turnLeft();
} else {
car.turnRight();
}
};
game.up = function (x, y, obj) {
car.straighten();
};
// Update game state
game.update = function () {
car.update();
// Create spirals and poops
if (LK.ticks % 60 === 0) {
var spiral = new Spiral();
spiral.x = 2048 / 2;
spiral.y = -100;
spirals.push(spiral);
game.addChild(spiral);
var poopCount = spirals.filter(function (spiral) {
return spiral instanceof Poop;
}).length;
if (poopCount < 3) {
var poop = new Poop();
poop.x = 2048;
poop.y = 2732 / 2;
spirals.push(poop);
game.addChild(poop);
}
}
// Add life instances to the game
if (LK.ticks % 600 === 0) {
// every 10 seconds
var life = new Life();
life.reposition();
spirals.push(life);
game.addChild(life);
// Make life instances blink before disappearing
LK.setTimeout(function () {
var blinkInterval = LK.setInterval(function () {
life.visible = !life.visible;
}, 200);
LK.setTimeout(function () {
LK.clearInterval(blinkInterval);
var index = spirals.indexOf(life);
if (index !== -1) {
spirals.splice(index, 1);
life.destroy();
}
}, 1000);
}, 2000);
}
// Update spirals, poops, lives and enemies
for (var i = spirals.length - 1; i >= 0; i--) {
if (spirals[i] instanceof Spiral || spirals[i] instanceof Life) {
if (typeof spirals[i].update === 'function') {
spirals[i].update();
}
}
if (car.intersects(spirals[i])) {
if (spirals[i] instanceof Poop) {
if (car.intersects(spirals[i])) {
spirals[i].reposition();
spirals[i].x = Math.random() * 2048;
spirals[i].y = Math.random() * 2732;
playerScore += 100; // Increase player score by 100 when poop is collected
LK.setScore(playerScore); // Update the displayed score
scoreTxt.setText(LK.getScore()); // Update the score text
} else if (enemies.some(function (enemy) {
return enemy.intersects(spirals[i]);
})) {
spirals[i].reposition();
spirals[i].x = Math.random() * 2048;
spirals[i].y = Math.random() * 2732;
playerLives -= 1; // Decrease player lives by 1 when enemy collects poop
livesTxt.setText('Lives: ' + playerLives); // Update the displayed lives
// Make the player's car blink red when it takes damage
LK.effects.flashObject(car, 0xff0000, 1000);
}
} else if (spirals[i] instanceof Life) {
if (car.intersects(spirals[i])) {
spirals[i].destroy();
spirals.splice(i, 1);
playerLives += 1; // Increase player lives by 1 when life is collected
livesTxt.setText('Lives: ' + playerLives); // Update the displayed lives
}
} else {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
}
}
// Check if a bonus should be spawned
if (playerScore % 1000 === 0 && playerScore !== 0 && !shouldSpawnBonus) {
var bonus = new Bonus();
bonus.reposition();
bonuses.push(bonus);
game.addChild(bonus);
shouldSpawnBonus = true;
} else if (playerScore % 1000 !== 0) {
shouldSpawnBonus = false;
}
// Update bonuses
for (var i = 0; i < bonuses.length; i++) {
if (car.intersects(bonuses[i])) {
bonuses[i].destroy();
bonuses.splice(i, 1);
playerScore += 500; // Increase player score by 500 when bonus is collected
car.canKillEnemies = true; // Allow the car to kill enemies
car.bonusTimer = 0; // Reset the bonus timer
LK.setScore(playerScore); // Update the displayed score
scoreTxt.setText(LK.getScore()); // Update the score text
}
}
// Update enemies
for (var i = 0; i < enemies.length; i++) {
if (car.canKillEnemies && car.intersects(enemies[i])) {
enemies[i].destroy();
enemies.splice(i, 1);
LK.setTimeout(function () {
var enemy = new Enemy();
enemy.x = Math.random() * 2048;
enemy.y = 2732 / 2 + 100;
enemies.push(enemy);
game.addChild(enemy);
}, 5000);
} else {
enemies[i].update();
}
}
// Make the player's car blink red when player lives are less than 3
if (playerLives < 3) {
LK.effects.flashObject(car, 0xff0000, 1000);
}
// End the game if the player's lives reach zero
if (playerLives <= 0) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
};
poop heart. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
red color
poop. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
фон туалет. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
magic poop. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.