User prompt
Add a asset background
User prompt
Make a background all screen
User prompt
Make a asset background green
User prompt
Add a background
Code edit (1 edits merged)
Please save this source code
User prompt
Canlı Kalıp Savaşı
User prompt
3 canı olsun yukarı ortada kalıplar olsun asset şeklinde
Initial prompt
Yazı mı tura mı oyunu yap animasyonlar ekle
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Obstacle class var Obstacle = Container.expand(function () { var self = Container.call(this); // Randomly pick a shape for variety var types = ['obstacle_box', 'obstacle_ellipse', 'obstacle_tall', 'obstacle_wide']; var type = types[Math.floor(Math.random() * types.length)]; var gfx = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5 }); self.type = type; // Speed will be set on creation self.speed = 0; // Update method for movement self.update = function () { self.y += self.speed; }; return self; }); // Player class var Player = Container.expand(function () { var self = Container.call(this); var playerGfx = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); // For collision, use the container itself return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181818 }); /**** * Game Code ****/ // Heart icon for lives // Obstacle shapes (variety for visual interest) // Player character: a colored box // Game constants var GAME_WIDTH = 2048; var GAME_HEIGHT = 2732; var PLAYER_START_X = GAME_WIDTH / 2; var PLAYER_START_Y = GAME_HEIGHT - 400; var OBSTACLE_SPAWN_Y = 220; // Top area for obstacles var OBSTACLE_MIN_SPEED = 7; var OBSTACLE_MAX_SPEED = 15; var OBSTACLE_SPAWN_INTERVAL = 70; // ticks var PLAYER_MOVE_AREA = { left: 180, right: GAME_WIDTH - 180, top: 600, bottom: GAME_HEIGHT - 100 }; var MAX_LIVES = 3; // State variables var player; var obstacles = []; var lives = MAX_LIVES; var score = 0; var scoreTxt; var livesNodes = []; var dragNode = null; var lastScoreTick = 0; // --- UI: Score --- scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // --- UI: Lives (Hearts) --- function updateLivesUI() { // Remove old for (var i = 0; i < livesNodes.length; i++) { if (livesNodes[i].parent) livesNodes[i].parent.removeChild(livesNodes[i]); } livesNodes = []; // Place hearts at top right, spaced for (var i = 0; i < lives; i++) { var heart = LK.getAsset('heart', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 0 }); // Place: right margin 60px, then 100px per heart leftward, y=100 heart.x = GAME_WIDTH - 100 - i * 100; heart.y = 100; // Add to game (not GUI, so it scales with game) game.addChild(heart); livesNodes.push(heart); } } updateLivesUI(); // --- Player --- player = new Player(); player.x = PLAYER_START_X; player.y = PLAYER_START_Y; game.addChild(player); // --- Touch/Drag Controls --- function clamp(val, min, max) { return Math.max(min, Math.min(max, val)); } function handleMove(x, y, obj) { if (dragNode) { // Clamp to allowed area dragNode.x = clamp(x, PLAYER_MOVE_AREA.left, PLAYER_MOVE_AREA.right); dragNode.y = clamp(y, PLAYER_MOVE_AREA.top, PLAYER_MOVE_AREA.bottom); } } game.move = handleMove; game.down = function (x, y, obj) { // Only allow drag if touch is on player or below if (x >= player.x - 100 && x <= player.x + 100 && y >= player.y - 100 && y <= player.y + 100) { dragNode = player; handleMove(x, y, obj); } }; game.up = function (x, y, obj) { dragNode = null; }; // --- Obstacle Spawning --- function spawnObstacle() { var obs = new Obstacle(); // Random X in a central band (avoid extreme edges) var minX = 300, maxX = GAME_WIDTH - 300; obs.x = minX + Math.floor(Math.random() * (maxX - minX)); obs.y = OBSTACLE_SPAWN_Y; // Random speed obs.speed = OBSTACLE_MIN_SPEED + Math.random() * (OBSTACLE_MAX_SPEED - OBSTACLE_MIN_SPEED); // Optionally, for some types, add horizontal movement if (obs.type === 'obstacle_wide' && Math.random() < 0.5) { obs.horizSpeed = (Math.random() < 0.5 ? -1 : 1) * (2 + Math.random() * 3); obs.update = function () { this.y += this.speed; this.x += this.horizSpeed; // Bounce off walls if (this.x < 200 || this.x > GAME_WIDTH - 200) this.horizSpeed *= -1; }; } obstacles.push(obs); game.addChild(obs); } // --- Game Update Loop --- game.update = function () { // Score increases with time survived (every 30 ticks = 0.5s) if (LK.ticks - lastScoreTick >= 30) { score += 1; scoreTxt.setText(score); lastScoreTick = LK.ticks; } // Spawn obstacles if (LK.ticks % OBSTACLE_SPAWN_INTERVAL === 0) { spawnObstacle(); } // Update obstacles, check for collision, remove off-screen for (var i = obstacles.length - 1; i >= 0; i--) { var obs = obstacles[i]; // Move if (typeof obs.update === 'function') obs.update(); // Remove if off bottom if (obs.y > GAME_HEIGHT + 200) { obs.destroy(); obstacles.splice(i, 1); continue; } // Collision with player if (obs.intersects(player)) { // Remove obstacle obs.destroy(); obstacles.splice(i, 1); // Lose a life lives -= 1; updateLivesUI(); // Flash player red LK.effects.flashObject(player, 0xff0000, 600); // If out of lives, game over if (lives <= 0) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } } } }; // --- Reset on Game Over --- LK.on('gameover', function () { // Reset state for new game lives = MAX_LIVES; score = 0; scoreTxt.setText(score); updateLivesUI(); // Remove all obstacles for (var i = 0; i < obstacles.length; i++) { obstacles[i].destroy(); } obstacles = []; // Reset player position player.x = PLAYER_START_X; player.y = PLAYER_START_Y; dragNode = null; lastScoreTick = LK.ticks; }); // --- Initial UI state --- scoreTxt.setText(score); updateLivesUI();
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,220 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+// Obstacle class
+var Obstacle = Container.expand(function () {
+ var self = Container.call(this);
+ // Randomly pick a shape for variety
+ var types = ['obstacle_box', 'obstacle_ellipse', 'obstacle_tall', 'obstacle_wide'];
+ var type = types[Math.floor(Math.random() * types.length)];
+ var gfx = self.attachAsset(type, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = type;
+ // Speed will be set on creation
+ self.speed = 0;
+ // Update method for movement
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+// Player class
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGfx = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // For collision, use the container itself
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x181818
+});
+
+/****
+* Game Code
+****/
+// Heart icon for lives
+// Obstacle shapes (variety for visual interest)
+// Player character: a colored box
+// Game constants
+var GAME_WIDTH = 2048;
+var GAME_HEIGHT = 2732;
+var PLAYER_START_X = GAME_WIDTH / 2;
+var PLAYER_START_Y = GAME_HEIGHT - 400;
+var OBSTACLE_SPAWN_Y = 220; // Top area for obstacles
+var OBSTACLE_MIN_SPEED = 7;
+var OBSTACLE_MAX_SPEED = 15;
+var OBSTACLE_SPAWN_INTERVAL = 70; // ticks
+var PLAYER_MOVE_AREA = {
+ left: 180,
+ right: GAME_WIDTH - 180,
+ top: 600,
+ bottom: GAME_HEIGHT - 100
+};
+var MAX_LIVES = 3;
+// State variables
+var player;
+var obstacles = [];
+var lives = MAX_LIVES;
+var score = 0;
+var scoreTxt;
+var livesNodes = [];
+var dragNode = null;
+var lastScoreTick = 0;
+// --- UI: Score ---
+scoreTxt = new Text2('0', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// --- UI: Lives (Hearts) ---
+function updateLivesUI() {
+ // Remove old
+ for (var i = 0; i < livesNodes.length; i++) {
+ if (livesNodes[i].parent) livesNodes[i].parent.removeChild(livesNodes[i]);
+ }
+ livesNodes = [];
+ // Place hearts at top right, spaced
+ for (var i = 0; i < lives; i++) {
+ var heart = LK.getAsset('heart', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 0,
+ y: 0
+ });
+ // Place: right margin 60px, then 100px per heart leftward, y=100
+ heart.x = GAME_WIDTH - 100 - i * 100;
+ heart.y = 100;
+ // Add to game (not GUI, so it scales with game)
+ game.addChild(heart);
+ livesNodes.push(heart);
+ }
+}
+updateLivesUI();
+// --- Player ---
+player = new Player();
+player.x = PLAYER_START_X;
+player.y = PLAYER_START_Y;
+game.addChild(player);
+// --- Touch/Drag Controls ---
+function clamp(val, min, max) {
+ return Math.max(min, Math.min(max, val));
+}
+function handleMove(x, y, obj) {
+ if (dragNode) {
+ // Clamp to allowed area
+ dragNode.x = clamp(x, PLAYER_MOVE_AREA.left, PLAYER_MOVE_AREA.right);
+ dragNode.y = clamp(y, PLAYER_MOVE_AREA.top, PLAYER_MOVE_AREA.bottom);
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ // Only allow drag if touch is on player or below
+ if (x >= player.x - 100 && x <= player.x + 100 && y >= player.y - 100 && y <= player.y + 100) {
+ dragNode = player;
+ handleMove(x, y, obj);
+ }
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// --- Obstacle Spawning ---
+function spawnObstacle() {
+ var obs = new Obstacle();
+ // Random X in a central band (avoid extreme edges)
+ var minX = 300,
+ maxX = GAME_WIDTH - 300;
+ obs.x = minX + Math.floor(Math.random() * (maxX - minX));
+ obs.y = OBSTACLE_SPAWN_Y;
+ // Random speed
+ obs.speed = OBSTACLE_MIN_SPEED + Math.random() * (OBSTACLE_MAX_SPEED - OBSTACLE_MIN_SPEED);
+ // Optionally, for some types, add horizontal movement
+ if (obs.type === 'obstacle_wide' && Math.random() < 0.5) {
+ obs.horizSpeed = (Math.random() < 0.5 ? -1 : 1) * (2 + Math.random() * 3);
+ obs.update = function () {
+ this.y += this.speed;
+ this.x += this.horizSpeed;
+ // Bounce off walls
+ if (this.x < 200 || this.x > GAME_WIDTH - 200) this.horizSpeed *= -1;
+ };
+ }
+ obstacles.push(obs);
+ game.addChild(obs);
+}
+// --- Game Update Loop ---
+game.update = function () {
+ // Score increases with time survived (every 30 ticks = 0.5s)
+ if (LK.ticks - lastScoreTick >= 30) {
+ score += 1;
+ scoreTxt.setText(score);
+ lastScoreTick = LK.ticks;
+ }
+ // Spawn obstacles
+ if (LK.ticks % OBSTACLE_SPAWN_INTERVAL === 0) {
+ spawnObstacle();
+ }
+ // Update obstacles, check for collision, remove off-screen
+ for (var i = obstacles.length - 1; i >= 0; i--) {
+ var obs = obstacles[i];
+ // Move
+ if (typeof obs.update === 'function') obs.update();
+ // Remove if off bottom
+ if (obs.y > GAME_HEIGHT + 200) {
+ obs.destroy();
+ obstacles.splice(i, 1);
+ continue;
+ }
+ // Collision with player
+ if (obs.intersects(player)) {
+ // Remove obstacle
+ obs.destroy();
+ obstacles.splice(i, 1);
+ // Lose a life
+ lives -= 1;
+ updateLivesUI();
+ // Flash player red
+ LK.effects.flashObject(player, 0xff0000, 600);
+ // If out of lives, game over
+ if (lives <= 0) {
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ return;
+ }
+ }
+ }
+};
+// --- Reset on Game Over ---
+LK.on('gameover', function () {
+ // Reset state for new game
+ lives = MAX_LIVES;
+ score = 0;
+ scoreTxt.setText(score);
+ updateLivesUI();
+ // Remove all obstacles
+ for (var i = 0; i < obstacles.length; i++) {
+ obstacles[i].destroy();
+ }
+ obstacles = [];
+ // Reset player position
+ player.x = PLAYER_START_X;
+ player.y = PLAYER_START_Y;
+ dragNode = null;
+ lastScoreTick = LK.ticks;
+});
+// --- Initial UI state ---
+scoreTxt.setText(score);
+updateLivesUI();
\ No newline at end of file