User prompt
Yüksek skor sağ üstte olsun
User prompt
Ana menü olsun
User prompt
Arkaplan da küçük küçük beyaz yıldızlarda olsun
User prompt
Arkaplan uzay olsun
User prompt
Arkaplan assetsleri olsun
User prompt
Mermilerin hitboxini arttır
User prompt
Oyuncu istediği yere gidemesin sadece düz bir alan ve sadece sağa sola gidebilir
User prompt
Oyuncunun hitboxini 3 kat büyüt
User prompt
Her 5 puanda bir mermilerin hızı 2 katına çıksın ve çoğalsınlar
User prompt
Oyuncuyu hareket ettirebilmesi lazım
Code edit (1 edits merged)
Please save this source code
User prompt
Bullet Rain - Dodge & Survive
Initial prompt
Bana bir deodge oyunu yap üstten mermiler düşecek ve oyuncular da o mermilerden kaçmaya çalışacak puan sistemi olsun
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * 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.update = function () { self.y += self.speed; }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); return self; }); var Star = Container.expand(function () { var self = Container.call(this); var starGraphics = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5 }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000011 }); /**** * Game Code ****/ // Game state management var gameState = 'menu'; // 'menu' or 'playing' // Create stars for background var stars = []; for (var i = 0; i < 150; i++) { var star = new Star(); star.x = Math.random() * 2048; star.y = Math.random() * 2732; stars.push(star); game.addChild(star); } // Main Menu Elements var titleText = new Text2('SPACE SHOOTER', { size: 120, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0.5); titleText.x = 1024; titleText.y = 800; game.addChild(titleText); var startButton = new Text2('TAP TO START', { size: 80, fill: 0x00FF00 }); startButton.anchor.set(0.5, 0.5); startButton.x = 1024; startButton.y = 1400; game.addChild(startButton); // Instructions text var instructionsText = new Text2('Move left and right to avoid bullets', { size: 50, fill: 0xCCCCCC }); instructionsText.anchor.set(0.5, 0.5); instructionsText.x = 1024; instructionsText.y = 1600; game.addChild(instructionsText); function startGame() { // Hide menu elements titleText.visible = false; startButton.visible = false; instructionsText.visible = false; // Change game state gameState = 'playing'; // Reset game start time gameStartTime = Date.now(); } // Game variables (initialized when game starts) var player = null; var bullets = []; var bulletSpawnTimer = 0; var bulletSpawnDelay = 60; // Start spawning every 60 ticks (1 second) var minSpawnDelay = 20; // Minimum spawn delay (maximum difficulty) var difficultyTimer = 0; var speedMultiplier = 1; var gameStartTime = Date.now(); var dragNode = null; var scoreTxt = null; var timeTxt = null; function initializeGameplay() { // Create player player = game.addChild(new Player()); player.x = 1024; // Center horizontally player.y = 2200; // Near bottom of screen // Reset game variables bullets = []; bulletSpawnTimer = 0; speedMultiplier = 1; // Score display scoreTxt = new Text2('0', { size: 100, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Time display timeTxt = new Text2('Time: 0s', { size: 60, fill: 0xFFFFFF }); timeTxt.anchor.set(0, 0); timeTxt.x = 120; timeTxt.y = 20; LK.gui.topLeft.addChild(timeTxt); } function updateScore() { var timeAlive = Math.floor((Date.now() - gameStartTime) / 1000); LK.setScore(timeAlive); scoreTxt.setText(timeAlive); timeTxt.setText('Time: ' + timeAlive + 's'); } function spawnBullet() { var bullet = new Bullet(); bullet.x = Math.random() * (2048 - 100) + 50; // Random x position with margin bullet.y = -30; // Start above screen bullet.speed = (6 + Math.random() * 4) * speedMultiplier; // Apply speed multiplier bullets.push(bullet); game.addChild(bullet); } function increaseDifficulty() { var currentScore = LK.getScore(); // Check if we've reached a new 5-point milestone if (currentScore > 0 && currentScore % 5 === 0) { // Only increase difficulty if we haven't already increased it for this score if (currentScore / 5 > speedMultiplier - 1) { speedMultiplier = Math.floor(currentScore / 5) + 1; // Decrease spawn delay (more bullets spawn) bulletSpawnDelay = Math.max(minSpawnDelay, Math.floor(60 / speedMultiplier)); } } } function handleMove(x, y, obj) { if (dragNode) { // Keep player within screen bounds horizontally only dragNode.x = Math.max(40, Math.min(2008, x)); // Keep player locked to bottom area - no vertical movement dragNode.y = 2200; } } game.move = handleMove; game.down = function (x, y, obj) { if (gameState === 'menu') { // Start the game when menu is tapped startGame(); initializeGameplay(); } else if (gameState === 'playing' && player) { // Set drag node to player for any touch on screen dragNode = player; handleMove(x, y, obj); } }; game.up = function (x, y, obj) { dragNode = null; }; game.update = function () { if (gameState === 'menu') { // Add blinking effect to start button if (LK.ticks % 60 < 30) { startButton.alpha = 1; } else { startButton.alpha = 0.5; } return; } if (gameState === 'playing' && player) { updateScore(); increaseDifficulty(); // Spawn bullets bulletSpawnTimer++; if (bulletSpawnTimer >= bulletSpawnDelay) { spawnBullet(); bulletSpawnTimer = 0; } // Update and check bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; // Initialize tracking variables if (bullet.lastY === undefined) bullet.lastY = bullet.y; if (bullet.lastIntersecting === undefined) bullet.lastIntersecting = false; // Check if bullet went off screen if (bullet.lastY <= 2800 && bullet.y > 2800) { bullet.destroy(); bullets.splice(i, 1); continue; } // Check collision with player var currentIntersecting = bullet.intersects(player); if (!bullet.lastIntersecting && currentIntersecting) { // Collision detected - game over LK.getSound('hit').play(); LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } // Update tracking variables bullet.lastY = bullet.y; bullet.lastIntersecting = currentIntersecting; } } };
===================================================================
--- original.js
+++ change.js
@@ -44,8 +44,10 @@
/****
* Game Code
****/
+// Game state management
+var gameState = 'menu'; // 'menu' or 'playing'
// Create stars for background
var stars = [];
for (var i = 0; i < 150; i++) {
var star = new Star();
@@ -53,35 +55,82 @@
star.y = Math.random() * 2732;
stars.push(star);
game.addChild(star);
}
-var player = game.addChild(new Player());
-player.x = 1024; // Center horizontally
-player.y = 2200; // Near bottom of screen
+// Main Menu Elements
+var titleText = new Text2('SPACE SHOOTER', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+titleText.anchor.set(0.5, 0.5);
+titleText.x = 1024;
+titleText.y = 800;
+game.addChild(titleText);
+var startButton = new Text2('TAP TO START', {
+ size: 80,
+ fill: 0x00FF00
+});
+startButton.anchor.set(0.5, 0.5);
+startButton.x = 1024;
+startButton.y = 1400;
+game.addChild(startButton);
+// Instructions text
+var instructionsText = new Text2('Move left and right to avoid bullets', {
+ size: 50,
+ fill: 0xCCCCCC
+});
+instructionsText.anchor.set(0.5, 0.5);
+instructionsText.x = 1024;
+instructionsText.y = 1600;
+game.addChild(instructionsText);
+function startGame() {
+ // Hide menu elements
+ titleText.visible = false;
+ startButton.visible = false;
+ instructionsText.visible = false;
+ // Change game state
+ gameState = 'playing';
+ // Reset game start time
+ gameStartTime = Date.now();
+}
+// Game variables (initialized when game starts)
+var player = null;
var bullets = [];
var bulletSpawnTimer = 0;
var bulletSpawnDelay = 60; // Start spawning every 60 ticks (1 second)
var minSpawnDelay = 20; // Minimum spawn delay (maximum difficulty)
var difficultyTimer = 0;
var speedMultiplier = 1;
var gameStartTime = Date.now();
var dragNode = null;
-// Score display
-var scoreTxt = new Text2('0', {
- size: 100,
- fill: 0xFFFFFF
-});
-scoreTxt.anchor.set(0.5, 0);
-LK.gui.top.addChild(scoreTxt);
-// Time display
-var timeTxt = new Text2('Time: 0s', {
- size: 60,
- fill: 0xFFFFFF
-});
-timeTxt.anchor.set(0, 0);
-timeTxt.x = 120;
-timeTxt.y = 20;
-LK.gui.topLeft.addChild(timeTxt);
+var scoreTxt = null;
+var timeTxt = null;
+function initializeGameplay() {
+ // Create player
+ player = game.addChild(new Player());
+ player.x = 1024; // Center horizontally
+ player.y = 2200; // Near bottom of screen
+ // Reset game variables
+ bullets = [];
+ bulletSpawnTimer = 0;
+ speedMultiplier = 1;
+ // Score display
+ scoreTxt = new Text2('0', {
+ size: 100,
+ fill: 0xFFFFFF
+ });
+ scoreTxt.anchor.set(0.5, 0);
+ LK.gui.top.addChild(scoreTxt);
+ // Time display
+ timeTxt = new Text2('Time: 0s', {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ timeTxt.anchor.set(0, 0);
+ timeTxt.x = 120;
+ timeTxt.y = 20;
+ LK.gui.topLeft.addChild(timeTxt);
+}
function updateScore() {
var timeAlive = Math.floor((Date.now() - gameStartTime) / 1000);
LK.setScore(timeAlive);
scoreTxt.setText(timeAlive);
@@ -116,46 +165,63 @@
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
- // Set drag node to player for any touch on screen
- dragNode = player;
- handleMove(x, y, obj);
+ if (gameState === 'menu') {
+ // Start the game when menu is tapped
+ startGame();
+ initializeGameplay();
+ } else if (gameState === 'playing' && player) {
+ // Set drag node to player for any touch on screen
+ dragNode = player;
+ handleMove(x, y, obj);
+ }
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
- updateScore();
- increaseDifficulty();
- // Spawn bullets
- bulletSpawnTimer++;
- if (bulletSpawnTimer >= bulletSpawnDelay) {
- spawnBullet();
- bulletSpawnTimer = 0;
+ if (gameState === 'menu') {
+ // Add blinking effect to start button
+ if (LK.ticks % 60 < 30) {
+ startButton.alpha = 1;
+ } else {
+ startButton.alpha = 0.5;
+ }
+ return;
}
- // Update and check bullets
- for (var i = bullets.length - 1; i >= 0; i--) {
- var bullet = bullets[i];
- // Initialize tracking variables
- if (bullet.lastY === undefined) bullet.lastY = bullet.y;
- if (bullet.lastIntersecting === undefined) bullet.lastIntersecting = false;
- // Check if bullet went off screen
- if (bullet.lastY <= 2800 && bullet.y > 2800) {
- bullet.destroy();
- bullets.splice(i, 1);
- continue;
+ if (gameState === 'playing' && player) {
+ updateScore();
+ increaseDifficulty();
+ // Spawn bullets
+ bulletSpawnTimer++;
+ if (bulletSpawnTimer >= bulletSpawnDelay) {
+ spawnBullet();
+ bulletSpawnTimer = 0;
}
- // Check collision with player
- var currentIntersecting = bullet.intersects(player);
- if (!bullet.lastIntersecting && currentIntersecting) {
- // Collision detected - game over
- LK.getSound('hit').play();
- LK.effects.flashScreen(0xff0000, 1000);
- LK.showGameOver();
- return;
+ // Update and check bullets
+ for (var i = bullets.length - 1; i >= 0; i--) {
+ var bullet = bullets[i];
+ // Initialize tracking variables
+ if (bullet.lastY === undefined) bullet.lastY = bullet.y;
+ if (bullet.lastIntersecting === undefined) bullet.lastIntersecting = false;
+ // Check if bullet went off screen
+ if (bullet.lastY <= 2800 && bullet.y > 2800) {
+ bullet.destroy();
+ bullets.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ var currentIntersecting = bullet.intersects(player);
+ if (!bullet.lastIntersecting && currentIntersecting) {
+ // Collision detected - game over
+ LK.getSound('hit').play();
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ return;
+ }
+ // Update tracking variables
+ bullet.lastY = bullet.y;
+ bullet.lastIntersecting = currentIntersecting;
}
- // Update tracking variables
- bullet.lastY = bullet.y;
- bullet.lastIntersecting = currentIntersecting;
}
};
\ No newline at end of file