Code edit (4 edits merged)
Please save this source code
User prompt
опустить таймер на 10 пикселей
Code edit (9 edits merged)
Please save this source code
User prompt
переместить таймер на 10 пикселей вправо
Code edit (1 edits merged)
Please save this source code
User prompt
переместить whiteflag На 1000 вправо и на 100 вниз
User prompt
добавить whiteflag в тоже место где и счетчик
User prompt
Save the score the player has earned
User prompt
Save the score the player has earned and display it in the overlay
User prompt
Save the score the player has earned and display it in the overlay
User prompt
выводить количество очков набранных до смерти
User prompt
выводить количество очков набранных очков при смерте
User prompt
выводить количество набранных очков в нижней части экрана
User prompt
выводить количество очков в overlay gameover при смерте от противника самолета
User prompt
выводить количество очков в overlay gameover
User prompt
преобразовать таймер в очки
User prompt
Сохранять количество очков и выводить в overlay gameover
Code edit (1 edits merged)
Please save this source code
User prompt
переместить таймер в верхний центр экрана
Code edit (3 edits merged)
Please save this source code
User prompt
преобразовать таймер в очки и добавить на экран gameover
Code edit (2 edits merged)
Please save this source code
User prompt
опустить таймер на 100 пикселей вниз
Code edit (1 edits merged)
Please save this source code
User prompt
Добавить обьект blackbox в правый верхний угол
/****
* Classes
****/
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.visible = false;
self.angle = Math.PI / 18 + Math.random() * (17 * Math.PI / 18); // Random angle between 10 and 170 degrees
self.update = function () {
if (LK.ticks > 240) {
// 4 seconds at 60FPS
self.visible = true;
self.x += self.speed * Math.cos(self.angle);
self.y -= self.speed * Math.sin(self.angle);
}
};
});
var Cannon = Container.expand(function () {
var self = Container.call(this);
var cannonGraphics = self.attachAsset('Cannon', {
anchorX: 0.5,
anchorY: 0.5
});
});
// Cannon2 class
var Cannon2 = Container.expand(function () {
var self = Container.call(this);
var cannon2Graphics = self.attachAsset('Cannon2', {
anchorX: 0.5,
anchorY: 0.5
});
});
// EnemyPlane class
var EnemyPlane = Container.expand(function () {
var self = Container.call(this);
var enemyPlaneGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = -6;
self.speedY = 0;
// Update enemy plane position
self.update = function () {
self.x += self.speedX;
// Smoothly adjust vertical position within a random range
if (LK.ticks > 1500 && (!self.verticalTarget || Math.abs(self.verticalTarget - self.y) < 1)) {
self.verticalTarget = self.y + (Math.random() > 0.5 ? Math.random() * 250 : -Math.random() * 250); // Set or reset target within a random range from 0 to 250 pixels
}
self.y += (self.verticalTarget - self.y) * 0.05; // Smoothly move towards the target
};
});
// EnemyPlaneLeft class
var EnemyPlaneLeft = Container.expand(function () {
var self = Container.call(this);
var enemyPlaneGraphics = self.attachAsset('Enemyleft', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = 6;
self.speedY = 0;
// Update enemy plane position
self.update = function () {
self.x += self.speedX;
// Smoothly adjust vertical position within a random range
if (LK.ticks > 1500 && (!self.verticalTarget || Math.abs(self.verticalTarget - self.y) < 1)) {
self.verticalTarget = self.y + (Math.random() > 0.5 ? Math.random() * 250 : -Math.random() * 250); // Set or reset target within a random range from 0 to 250 pixels
}
self.y += (self.verticalTarget - self.y) * 0.05; // Smoothly move towards the target
};
});
// Plane1 class
var Plane1 = Container.expand(function () {
var self = Container.call(this);
var planeGraphics = self.attachAsset('plane', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = 7;
self.speedY = 0;
// Update plane position
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
// Check if the plane has crossed the screen boundary
if (self.x < 0) {
self.x = 2048;
} else if (self.x > 2048) {
self.x = 0;
}
// Prevent the plane from crossing the floor and ceiling
if (self.y < 0) {
self.y = 0;
self.speedY = 0;
} else if (self.y > 2752 - self.height) {
self.y = 2752 - self.height;
self.speedY = 0;
}
};
});
/****
* Initialize Game
****/
// Assets are automatically created based on usage in the code.
var game = new LK.Game({
backgroundColor: 0xffffff // Init game with white background
});
/****
* Game Code
****/
// Add blackbox to the top-right corner
var blackbox = game.attachAsset('blackbox', {
anchorX: 1,
// Anchor to the right
anchorY: 0 // Anchor to the top
});
blackbox.x = 2048; // Position at the right edge of the screen
blackbox.y = 0; // Position at the top of the screen
game.addChild(blackbox);
var background2 = game.attachAsset('background2', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1,
scaleY: 1
});
background2.x = 2175 / 2;
background2.y = 2620 / 2;
// Add background to the bottom of the game
var background = game.attachAsset('background', {
anchorX: 0,
anchorY: 1,
scaleX: 1,
scaleY: 1
});
background.y = 2732;
var enemyPlanes = []; // Global array to keep track of enemy planes
var enemyPlane; // Global variable to keep track of the enemy plane
// Create a player plane
var plane1 = new Plane1();
plane1.x = 150; // Moved 50 units to the right
plane1.y = 2750 - plane1.height; // Bottom of the screen
game.addChild(plane1);
// Create a cannon
var cannon = new Cannon();
cannon.x = -100; // Position at the bottom left of the screen
cannon.y = 2660;
game.addChild(cannon);
// Create a cannon2
var cannon2 = new Cannon2();
cannon2.x = 2150; // Position at the bottom left of the screen
cannon2.y = 2660;
game.addChild(cannon2);
var bullets = []; // Initialize an array to manage multiple bullets
LK.setTimeout(function () {
var bulletSpawnInterval = LK.setInterval(function () {
var newBullet = new Bullet();
newBullet.x = 175;
newBullet.y = 2590;
game.addChild(newBullet);
bullets.push(newBullet);
var newBulletDuplicate = new Bullet();
newBulletDuplicate.x = 1882; // New x position
newBulletDuplicate.y = 2590; // New y position, same as original
game.addChild(newBulletDuplicate);
bullets.push(newBulletDuplicate);
}, 800); // Spawn a new bullet every second, starting from the fourth second
}, 18000);
// Create the rest of the enemy planes every 2 seconds for the first 7 seconds
var enemySpawnTimer = LK.setInterval(function () {
enemyPlane = new EnemyPlane();
enemyPlane.x = 2150;
enemyPlane.y = 100 + Math.random() * (2732 - enemyPlane.height - 100); // Random y-coordinate between 100 and 2732 minus the height of the enemy plane
game.addChild(enemyPlane);
enemyPlanes.push(enemyPlane);
var enemyPlaneLeft = new EnemyPlaneLeft();
enemyPlaneLeft.x = -100;
enemyPlaneLeft.y = 100 + Math.random() * (2732 - enemyPlaneLeft.height - 100); // Random y-coordinate between 100 and 2732 minus the height of the enemy plane
game.addChild(enemyPlaneLeft);
enemyPlanes.push(enemyPlaneLeft);
}, 1300);
// After 7 seconds, change the enemy spawn interval to 1 every 1.3 seconds
LK.setTimeout(function () {
LK.clearInterval(enemySpawnTimer);
enemySpawnTimer = LK.setInterval(function () {
enemyPlane = new EnemyPlane();
enemyPlane.x = 2150;
enemyPlane.y = 100 + Math.random() * (2732 - enemyPlane.height - 100); // Random y-coordinate between 100 and 2732 minus the height of the enemy plane
game.addChild(enemyPlane);
enemyPlanes.push(enemyPlane);
var enemyPlaneLeft = new EnemyPlaneLeft();
enemyPlaneLeft.x = -100;
enemyPlaneLeft.y = 100 + Math.random() * (2732 - enemyPlaneLeft.height - 100); // Random y-coordinate between 100 and 2732 minus the height of the enemy plane
game.addChild(enemyPlaneLeft);
enemyPlanes.push(enemyPlaneLeft);
}, 1100);
}, 5000);
// After 14 seconds, change the enemy spawn interval to 1 every second
LK.setTimeout(function () {
LK.clearInterval(enemySpawnTimer);
enemySpawnTimer = LK.setInterval(function () {
enemyPlane = new EnemyPlane();
enemyPlane.x = 2150;
enemyPlane.y = 100 + Math.random() * (2732 - enemyPlane.height - 100); // Random y-coordinate between 100 and 2732 minus the height of the enemy plane
game.addChild(enemyPlane);
enemyPlanes.push(enemyPlane);
var enemyPlaneLeft = new EnemyPlaneLeft();
enemyPlaneLeft.x = -100;
enemyPlaneLeft.y = 100 + Math.random() * (2732 - enemyPlaneLeft.height - 100); // Random y-coordinate between 100 and 2732 minus the height of the enemy plane
game.addChild(enemyPlaneLeft);
enemyPlanes.push(enemyPlaneLeft);
}, 900);
}, 11000);
// Initialize score counter
var scoreCounter = 0;
var scoreTxt = new Text2(scoreCounter.toString(), {
size: 75,
fill: "#000000"
});
scoreTxt.x = -200; // Move score counter 100 pixels to the left
LK.gui.topRight.addChild(scoreTxt);
// Increment score every second and update the score display
var scoreIncrementInterval = LK.setInterval(function () {
scoreCounter += 1;
scoreTxt.setText(scoreCounter.toString()); // Update score display
}, 1000);
// Set up game tick
LK.on('tick', function () {
plane1.update();
for (var j = 0; j < bullets.length; j++) {
bullets[j].update();
}
for (var i = 0; i < enemyPlanes.length; i++) {
enemyPlanes[i].update();
}
});
// Flags to track if the screen is being touched
var isTouchingLeft = false;
var isTouchingRight = false;
// Change enemy direction when the screen is touched
var initialTouchPosition = null;
game.on('down', function (obj) {
initialTouchPosition = obj.event.getLocalPosition(game);
});
game.on('move', function (obj) {
if (initialTouchPosition) {
var currentTouchPosition = obj.event.getLocalPosition(game);
var swipeDirection = currentTouchPosition.x - initialTouchPosition.x;
if (swipeDirection < 0) {
isTouchingLeft = true;
isTouchingRight = false;
} else if (swipeDirection > 0) {
isTouchingRight = true;
isTouchingLeft = false;
}
}
});
// Stop changing enemy direction when the screen is no longer being touched
game.on('up', function (obj) {
isTouchingLeft = false;
isTouchingRight = false;
initialTouchPosition = null;
});
// In the game tick, change plane direction while the screen is being touched
LK.on('tick', function () {
if (isTouchingLeft) {
var angle = Math.atan2(plane1.speedY, plane1.speedX);
angle -= Math.PI / 60; // Subtract 1.5 degrees (in radians) for counter-clockwise rotation
plane1.speedX = Math.cos(angle) * 7;
plane1.speedY = Math.sin(angle) * 7;
plane1.rotation -= Math.PI / 60; // Rotate the plane counter-clockwise
}
if (isTouchingRight && LK.ticks > 78) {
var angle = Math.atan2(plane1.speedY, plane1.speedX);
angle += Math.PI / 60; // Add 1.5 degrees (in radians) for clockwise rotation
plane1.speedX = Math.cos(angle) * 7;
plane1.speedY = Math.sin(angle) * 7;
plane1.rotation += Math.PI / 60; // Rotate the plane clockwise
}
// Check if the plane crosses the side boundaries of the screen, touches the top or bottom of the screen, or collides with the health_bar
if (plane1.x <= 70 || plane1.x >= 2170 - plane1.width || plane1.y <= 70 || plane1.y >= 2752 - plane1.height) {
// Trigger game over
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
// Check if the bullet touches the player within a 100x100 square area
for (var j = 0; j < bullets.length; j++) {
if (bullets[j].visible && Math.abs(bullets[j].x - plane1.x) <= 50 && Math.abs(bullets[j].y - plane1.y) <= 50) {
// Trigger game over
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
}
// Check for collision between player and enemy planes
for (var i = 0; i < enemyPlanes.length; i++) {
if (plane1.x < enemyPlanes[i].x + 100 && plane1.x + 100 > enemyPlanes[i].x && plane1.y < enemyPlanes[i].y + 100 && plane1.y + 100 > enemyPlanes[i].y) {
// Add a red flash screen effect
LK.effects.flashScreen(0xff0000, 1000);
// Trigger game over
LK.showGameOver();
}
}
// Delay the movement of the cannons by 4 seconds after the game starts
LK.setTimeout(function () {
if (cannon.x < 100) {
cannon.x += 2;
}
if (cannon2.x > 1950) {
cannon2.x -= 2;
}
}, 16000);
});
снаряд от пушки. 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.
Артиллерийское оружие, смотрит вверх. 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.