User prompt
Rekor sayıcını 6'a al.
User prompt
Skor sayıcı görünümlü bir yerde olsun. Biraz daha altı altı.
User prompt
Oyun level level olsun. Her leveli geçtiğimizde level artsın. Level sayıcı olsun yani.
User prompt
Generate the first version of the source code of my game: Yılan: Sonsuz Sürünüş.
User prompt
Yılanın karşısına belirli meyveler çıksın.
Code edit (1 edits merged)
Please save this source code
User prompt
Yılan: Sonsuz Sürünüş
Initial prompt
Bana bir yılan oyunu oluştur.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Food class var Food = Container.expand(function (fruitType) { var self = Container.call(this); // Default to apple if not specified var type = fruitType || 'apple'; var assetId = 'food_' + type; var food = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); self.fruitType = type; return self; }); // Snake Head class var SnakeHead = Container.expand(function () { var self = Container.call(this); var head = self.attachAsset('snakeHead', { anchorX: 0.5, anchorY: 0.5 }); return self; }); // Snake Segment class var SnakeSegment = Container.expand(function () { var self = Container.call(this); var body = self.attachAsset('snakeBody', { anchorX: 0.5, anchorY: 0.5 }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ // Game constants // Snake head: green ellipse // Snake body: lighter green ellipse // Food: red ellipse // Fruit assets // Snake assets var GRID_SIZE = 80; // Each cell is 80x80 px var GRID_COLS = Math.floor(2048 / GRID_SIZE); var GRID_ROWS = Math.floor(2732 / GRID_SIZE); // Directions var DIR_UP = 0, DIR_RIGHT = 1, DIR_DOWN = 2, DIR_LEFT = 3; // Snake state var snake = []; var snakeDir = DIR_RIGHT; var nextDir = DIR_RIGHT; var pendingGrowth = 0; // Food state var food = null; // Score var score = 0; var level = 1; var scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); scoreTxt.y = 600; // Move score lower for better grouping at y=600 LK.gui.top.addChild(scoreTxt); var levelTxt = new Text2('Level 1', { size: 80, fill: 0xFFD700 }); levelTxt.anchor.set(0.5, 0); levelTxt.y = scoreTxt.y + scoreTxt.height + 10; // Place level just below score LK.gui.top.addChild(levelTxt); // Helper: get grid-aligned position function gridPos(col, row) { return { x: col * GRID_SIZE + GRID_SIZE / 2, y: row * GRID_SIZE + GRID_SIZE / 2 }; } // Helper: get random empty cell function getRandomEmptyCell() { var occupied = {}; for (var i = 0; i < snake.length; i++) { occupied[snake[i].col + ',' + snake[i].row] = true; } var empty = []; for (var c = 0; c < GRID_COLS; c++) { for (var r = 0; r < GRID_ROWS; r++) { if (!occupied[c + ',' + r]) empty.push({ col: c, row: r }); } } if (empty.length === 0) return null; var idx = Math.floor(Math.random() * empty.length); return empty[idx]; } // Initialize snake in center function resetSnake() { // Remove old snake for (var i = 0; i < snake.length; i++) { snake[i].destroy(); } snake = []; var startCol = Math.floor(GRID_COLS / 2); var startRow = Math.floor(GRID_ROWS / 2); // Head var head = new SnakeHead(); head.col = startCol; head.row = startRow; var pos = gridPos(startCol, startRow); head.x = pos.x; head.y = pos.y; game.addChild(head); snake.push(head); // 2 body segments for (var i = 1; i <= 2; i++) { var seg = new SnakeSegment(); seg.col = startCol - i; seg.row = startRow; var pos2 = gridPos(seg.col, seg.row); seg.x = pos2.x; seg.y = pos2.y; game.addChild(seg); snake.push(seg); } snakeDir = DIR_RIGHT; nextDir = DIR_RIGHT; pendingGrowth = 0; } // Place food at random empty cell function placeFood() { if (food) food.destroy(); var cell = getRandomEmptyCell(); if (!cell) return; // Pick a random fruit type var fruitTypes = ['apple', 'banana', 'grape', 'orange']; var idx = Math.floor(Math.random() * fruitTypes.length); var fruitType = fruitTypes[idx]; food = new Food(fruitType); food.col = cell.col; food.row = cell.row; var pos = gridPos(cell.col, cell.row); food.x = pos.x; food.y = pos.y; game.addChild(food); } // Check collision with self or wall function checkCollision(col, row) { // Wall if (col < 0 || col >= GRID_COLS || row < 0 || row >= GRID_ROWS) return true; // Self for (var i = 0; i < snake.length; i++) { if (snake[i].col === col && snake[i].row === row) return true; } return false; } // Move snake one step function moveSnake() { // Compute new head position var head = snake[0]; var dcol = 0, drow = 0; if (snakeDir === DIR_UP) drow = -1;else if (snakeDir === DIR_DOWN) drow = 1;else if (snakeDir === DIR_LEFT) dcol = -1;else if (snakeDir === DIR_RIGHT) dcol = 1; var newCol = head.col + dcol; var newRow = head.row + drow; // Check collision for (var i = 0; i < snake.length; i++) { if (snake[i].col === newCol && snake[i].row === newRow) { // Collided with self LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } } if (newCol < 0 || newCol >= GRID_COLS || newRow < 0 || newRow >= GRID_ROWS) { // Collided with wall LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } // Move body segments for (var i = snake.length - 1; i > 0; i--) { snake[i].col = snake[i - 1].col; snake[i].row = snake[i - 1].row; } head.col = newCol; head.row = newRow; // Animate movement for (var i = 0; i < snake.length; i++) { var pos = gridPos(snake[i].col, snake[i].row); tween(snake[i], { x: pos.x, y: pos.y }, { duration: 80, easing: tween.linear }); } // Check food collision if (food && head.col === food.col && head.row === food.row) { // Eat food pendingGrowth += 1; score += 1; LK.setScore(score); scoreTxt.setText(score); // Level up every 5 points var prevLevel = level; level = Math.floor(score / 5) + 1; if (level !== prevLevel) { levelTxt.setText('Level ' + level); // Optional: flash level text or add effect LK.effects.flashObject(levelTxt, 0xFFD700, 600); } placeFood(); } // Grow if needed if (pendingGrowth > 0) { var tail = snake[snake.length - 1]; var newSeg = new SnakeSegment(); newSeg.col = tail.col; newSeg.row = tail.row; var pos2 = gridPos(newSeg.col, newSeg.row); newSeg.x = pos2.x; newSeg.y = pos2.y; game.addChild(newSeg); snake.push(newSeg); pendingGrowth -= 1; } } // Touch controls: swipe to change direction var touchStartX = null, touchStartY = null; game.down = function (x, y, obj) { touchStartX = x; touchStartY = y; }; game.up = function (x, y, obj) { if (touchStartX === null || touchStartY === null) return; var dx = x - touchStartX; var dy = y - touchStartY; if (Math.abs(dx) > Math.abs(dy)) { // Horizontal swipe if (dx > 40 && snakeDir !== DIR_LEFT) nextDir = DIR_RIGHT;else if (dx < -40 && snakeDir !== DIR_RIGHT) nextDir = DIR_LEFT; } else { // Vertical swipe if (dy > 40 && snakeDir !== DIR_UP) nextDir = DIR_DOWN;else if (dy < -40 && snakeDir !== DIR_DOWN) nextDir = DIR_UP; } touchStartX = null; touchStartY = null; }; // Also allow tap on left/right/top/bottom of screen to change direction game.move = function (x, y, obj) { // No drag for snake }; // Game update: move snake every N ticks var MOVE_INTERVAL = 10; // Lower = faster var moveTick = 0; game.update = function () { if (snake.length === 0) { resetSnake(); score = 0; LK.setScore(0); scoreTxt.setText('0'); level = 1; levelTxt.setText('Level 1'); placeFood(); moveTick = 0; return; } moveTick++; if (moveTick >= MOVE_INTERVAL) { // Only allow 90-degree turns (no reverse) if (snakeDir === DIR_UP && nextDir !== DIR_DOWN || snakeDir === DIR_DOWN && nextDir !== DIR_UP || snakeDir === DIR_LEFT && nextDir !== DIR_RIGHT || snakeDir === DIR_RIGHT && nextDir !== DIR_LEFT) { snakeDir = nextDir; } moveSnake(); moveTick = 0; } }; // Center score text horizontally scoreTxt.setText('0'); scoreTxt.anchor.set(0.5, 0); // Initial setup resetSnake(); placeFood();
===================================================================
--- original.js
+++ change.js
@@ -76,9 +76,9 @@
size: 120,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
-scoreTxt.y = 60; // Move score a bit lower for better grouping
+scoreTxt.y = 600; // Move score lower for better grouping at y=600
LK.gui.top.addChild(scoreTxt);
var levelTxt = new Text2('Level 1', {
size: 80,
fill: 0xFFD700
yılan resmi. In-Game asset. 2d. High contrast. No shadows
yılan gövdesi. In-Game asset. 2d. High contrast. No shadows
portakal. In-Game asset. 2d. High contrast. No shadows
elma. In-Game asset. 2d. High contrast. No shadows
muz resmi. In-Game asset. 2d. High contrast. No shadows
üzüm resmi. In-Game asset. 2d. High contrast. No shadows