/****
* Classes
****/
// AlarmDevice class
var AlarmDevice = Container.expand(function () {
var self = Container.call(this);
var alarmGraphics = self.attachAsset('alarmdevice', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Red flashing effect will be triggered in the game update loop after 3 seconds of beam use
};
});
// But stop if the beam's top edge is at or above the UFO's bottom edge
// Beam class
var Beam = Container.expand(function () {
var self = Container.call(this);
var beamGraphics = self.attachAsset('beam', {
anchorX: 0.5,
anchorY: 1.0
});
beamGraphics.rotation = -Math.PI / 2;
self.update = function () {
// But stop if the beam's top edge is at or above the UFO's bottom edge
if (self.y - self.height / 2 > ufo.y + ufo.height / 2) {
self.y -= 5;
}
};
});
// Cow class
var Cow = Container.expand(function () {
var self = Container.call(this);
var cowGraphics = self.attachAsset('cow', {
anchorX: 0.5,
anchorY: 0.5
});
self.isAbducted = false; // Add a new property to check if the cow is being abducted
self.update = function () {
if (!self.isAbducted) {
// If the cow is not being abducted, it can move freely
if (this.x < guards[0].x) {
this.x = guards[0].x;
}
if (this.x > guards[1].x) {
this.x = guards[1].x;
}
} else {
// If the cow is being abducted, it should move towards the UFO
var dx = ufo.x - this.x;
var dy = ufo.y - this.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 5 && this.y - this.height / 2 > ufo.y + ufo.height / 2) {
LK.getSound('cowmooing').play(); // Play cow mooing sound when the cow is being abducted
// If the cow is not yet at the UFO and the cow's top edge is below the UFO's bottom edge, it should continue moving towards it
this.x += dx / distance * 5;
this.y += dy / distance * 5;
} else {
// If the cow has reached the UFO or its top edge is at or above the UFO's bottom edge, it should disappear
this.destroy();
cows.splice(cows.indexOf(this), 1);
}
}
};
});
// Ground class
var Ground = Container.expand(function () {
var self = Container.call(this);
var groundGraphics = self.attachAsset('ground', {
anchorX: 0.5,
anchorY: 1.0
});
});
// Moon class
var Moon = Container.expand(function () {
var self = Container.call(this);
var moonGraphics = self.attachAsset('moon', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Moon shining animation logic
// this.alpha = 0.5 + Math.sin(LK.ticks / 30) / 2; // Create a shining effect by changing the alpha value
};
});
// SecurityGuard class
var SecurityGuard = Container.expand(function () {
var self = Container.call(this);
var guardGraphics = self.attachAsset('guard', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
if (self.visible) {
if (!self.lastShotTime || Date.now() - self.lastShotTime > 1000) {
// Add a cooldown of 1 second between shots
self.lastShotTime = Date.now();
// Create a red laser beam shooting towards the UFO
var laser = new Container();
var laserGraphics = laser.attachAsset('redlaser', {
anchorX: 0.5,
anchorY: 0.0
});
laser.x = self.x;
laser.y = self.y;
laser.rotation = Math.atan2(ufo.y - self.y, ufo.x - self.x);
game.addChildAt(laser, game.getChildIndex(self));
// Move the laser towards the UFO
laser.update = function () {
laser.x += Math.cos(laser.rotation) * 10;
laser.y += Math.sin(laser.rotation) * 10;
// Ensure the laser beams maintain ten times the distance between them
if (game.ticks % 10 === 0) {
laser.x += Math.cos(laser.rotation) * 10;
laser.y += Math.sin(laser.rotation) * 10;
}
// Destroy the laser if it goes off screen
if (laser.x < 0 || laser.x > 2048 || laser.y < 0 || laser.y > 2732) {
laser.destroy();
}
if (laser.intersects(ufo)) {
// Reduce UFO health by 10%
ufoHealthBar.scaleX -= 0.1;
if (ufoHealthBar.scaleX <= 0) {
// If health is depleted, replace the UFO with an explosion asset
if (!ufo.exploded) {
var explosion = LK.getAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5
});
explosion.x = ufo.x;
explosion.y = ufo.y;
game.addChild(explosion);
ufo.exploded = true;
LK.setTimeout(function () {
explosion.destroy();
ufo.destroy();
guards.forEach(function (guard) {
guard.visible = false; // Stop guards from firing
});
LK.showGameOver(); // Trigger game over
}, 1000); // Display explosion for 1 second
}
}
laser.destroy(); // Destroy the laser after hitting the UFO
}
};
}
}
};
});
// StarrySky class
var StarrySky = Container.expand(function () {
var self = Container.call(this);
var starrySkyGraphics = self.attachAsset('starrySky', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Starry sky animation logic
this.alpha = 0.5 + Math.sin(LK.ticks / 120) / 2; // Create a shining effect by changing the alpha value
};
});
//<Assets used in the game will automatically appear here>
//<Write imports for supported plugins here>
// UFO class
var UFO = Container.expand(function () {
var self = Container.call(this);
var ufoGraphics = self.attachAsset('ufo', {
anchorX: 0.5,
anchorY: 0.5
});
self.beam = null; // Add a beam property to the UFO
self.update = function () {
// UFO movement logic will be handled in the game move event
if (self.beam) {
// If the beam exists, make it flash by changing its alpha value
self.beam.alpha = 0.5 + Math.sin(LK.ticks / 10) / 2;
// If the beam's top is inside the UFO, make it disappear
if (self.beam.y <= self.y + self.height / 2) {
self.beam.destroy();
self.beam = null;
}
}
};
});
// Wormhole class
var Wormhole = Container.expand(function () {
var self = Container.call(this);
var wormholeGraphics = self.attachAsset('wormhole', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Rotate the wormhole continuously
self.rotation += 0.05; // Adjust the rotation speed as needed
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
// Initialize variables
var ufoHealthBar = new Container();
var healthBarGraphics = ufoHealthBar.attachAsset('beam', {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 20,
color: 0x00ff00 // Green color
});
ufoHealthBar.x = 1024; // Center horizontally
ufoHealthBar.y = 20; // Position at the top of the screen
ufoHealthBar.visible = false; // Initially hidden
game.addChild(ufoHealthBar);
var starrySky = game.addChild(new StarrySky());
starrySky.x = 1024; // Center horizontally
starrySky.y = 1366; // Center vertically
// Initialize variables
var ground = game.addChild(new Ground());
var moon = game.addChild(new Moon());
moon.x = 2048 - moon.width / 2 - 200; // Position moon at the upper right corner and move it left by 200 units
moon.y = moon.height / 2 + 200; // Move the moon down by 200 units
var wormhole = game.addChild(new Wormhole());
var alarmdevice = game.addChild(new AlarmDevice());
alarmdevice.x = 565; // Set x position of alarmdevice
alarmdevice.y = 850; // Set y position of alarmdevice
wormhole.x = moon.x; // Center wormhole on the moon
wormhole.y = moon.y; // Align vertically with the moon
wormhole.visible = false; // Initially hide the wormhole
ground.x = 1024; // Center horizontally
ground.y = 2732; // Bottom of the screen
var ufo = game.addChild(new UFO());
ufo.x = 1024; // Center horizontally
ufo.y = 500; // Upper half of the screen
var cows = [];
var guards = [];
var sucking = false;
var suckStartTime = 0;
var beam = null; // Define the beam variable
var laserStartTime = null; // Track when the laser beam starts
var laserActive = false; // Track if the laser is currently active
// Create cows
for (var i = 0; i < 10; i++) {
var cow = new Cow();
do {
cow.x = Math.random() * 2048;
cow.y = 2000 + Math.random() * 500; // Lower half of the screen
} while (cows.some(function (existingCow) {
return Math.abs(existingCow.x - cow.x) < 50 && Math.abs(existingCow.y - cow.y) < 50;
}));
cows.push(cow);
game.addChild(cow);
}
// Create security guards but do not add them to the game yet
for (var i = 0; i < 2; i++) {
var guard = new SecurityGuard();
guard.x = i * 2048 + (i == 0 ? 200 : -200); // Position guards at each side of the screen but 200 units closer to the center
guard.y = 2600; // Bottom of the screen
guards.push(guard);
}
// Handle UFO movement
game.move = function (x, y, obj) {
ufo.x = x;
ufo.y = Math.min(y, 1366); // Restrict to upper half
};
// Handle mouse down event
game.down = function (x, y, obj) {
suckStartTime = Date.now(); // Track the time when the player starts pressing down
// Check if the player clicked on a cow
for (var i = 0; i < cows.length; i++) {
if (Math.abs(cows[i].x - x) < 50 && Math.abs(cows[i].y - y) < 50) {
cows[i].isAbducted = true; // Set the isAbducted property of the clicked cow to true
beam = new Beam();
beam.x = cows[i].x;
beam.y = cows[i].y;
beam.height = Math.abs(cows[i].y - ufo.y); // Adjust the beam's height to match the distance between the UFO and the cow
game.addChildAt(beam, game.getChildIndex(cows[0])); // Add the beam behind the cows in the display list
break;
}
}
};
// Handle mouse up event
game.up = function (x, y, obj) {
if (beam) {
beam.destroy();
beam = null;
for (var i = 0; i < cows.length; i++) {
// Set the isAbducted property of all cows to false
cows[i].isAbducted = false;
}
suckStartTime = 0; // Reset the suckStartTime when the player releases the click
}
};
// Game update loop
game.update = function () {
if (beam && !laserActive) {
laserStartTime = Date.now();
laserActive = true;
} else if (!beam && laserActive) {
laserStartTime = null;
laserActive = false;
}
if (laserActive && Date.now() - laserStartTime >= 3000) {
// Add red flashing animation to the alarmdevice
alarmdevice.update = function () {
alarmdevice.children[0].tint = 0xff0000 * (0.5 + Math.sin(LK.ticks / 10) / 2);
};
LK.getSound('alarm').play(); // Play alarm sound after 3 seconds of continuous laser use
ufoHealthBar.visible = true; // Show the health bar
LK.getSound('alarm').play();
laserStartTime = null; // Reset to prevent repeated alarms
laserActive = false;
// Add guards to the game after the alarm sound has played
guards.forEach(function (guard) {
game.addChild(guard);
});
}
if (sucking) {
var currentTime = Date.now();
if (currentTime - suckStartTime > 2000) {
// Move guards horizontally towards the UFO
guards.forEach(function (guard) {
if (guard.x < ufo.x) {
guard.x += 2; // Move right
} else if (guard.x > ufo.x) {
guard.x -= 2; // Move left
}
// Shoot thin red lines towards the UFO
var line = new Container();
var lineGraphics = line.attachAsset('redlaser', {
anchorX: 0.5,
anchorY: 0.5
});
line.x = guard.x;
line.y = guard.y;
line.rotation = Math.atan2(ufo.y - guard.y, ufo.x - guard.x);
game.addChild(line);
line.update = function () {
line.x += Math.cos(line.rotation) * 10;
line.y += Math.sin(line.rotation) * 10;
if (line.x < 0 || line.x > 2048 || line.y < 0 || line.y > 2732) {
line.destroy();
}
if (line.intersects(ufo)) {
line.destroy();
}
};
});
}
if (currentTime - suckStartTime > 5000) {
// Move guards horizontally towards the UFO
guards.forEach(function (guard) {
if (guard.x < ufo.x) {
guard.x += 2; // Move right
} else if (guard.x > ufo.x) {
guard.x -= 2; // Move left
}
// Shoot thin red lines towards the UFO
var line = new Container();
var lineGraphics = line.attachAsset('beam', {
anchorX: 0.5,
anchorY: 0.5,
color: 0xff0000,
// Red color
width: 2,
// Thin line
height: Math.abs(guard.y - ufo.y)
});
line.x = guard.x;
line.y = guard.y;
game.addChild(line);
});
}
var currentTime = Date.now();
if (currentTime - suckStartTime > 6000) {
// Game over logic
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
if (beam) {
beam.destroy();
beam = null;
}
} else {
// Suck cows
for (var i = cows.length - 1; i >= 0; i--) {
if (Math.abs(cows[i].x - ufo.x) < 50 && Math.abs(cows[i].y - ufo.y) < 50) {
cows[i].destroy();
cows.splice(i, 1);
}
}
}
}
// Check if all cows are collected
if (cows.length === 0) {
wormhole.visible = true; // Display the wormhole
}
// Check if UFO intersects with the wormhole
if (ufo.intersects(wormhole)) {
// Reduce UFO size continuously by 0.05
ufo.scaleX = Math.max(0, ufo.scaleX - 0.05);
ufo.scaleY = Math.max(0, ufo.scaleY - 0.05);
}
};
Cute alien in ufo spaceship. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Windows xp hill with a red barn on the top of the hill at night. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Starry sky. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Shining fullmoon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Sherif man, drone view.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
red flashing police alarm device asset from profile view
explosion. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.