/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Fruit = Container.expand(function (type) {
var self = Container.call(this);
var assetName = 'apple';
if (type === 'pear') assetName = 'pear';else if (type === 'banana') assetName = 'banana';
var graphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
self.fruitType = type || 'apple';
return self;
});
var SnakeHead = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('snakeHead', {
anchorX: 0.5,
anchorY: 0.5
});
self.thickness = 1;
self.setThickness = function (newThickness) {
self.thickness = newThickness;
graphics.scaleX = newThickness;
graphics.scaleY = newThickness;
};
return self;
});
var SnakeSegment = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('snakeBody', {
anchorX: 0.5,
anchorY: 0.5
});
self.thickness = 1;
self.setThickness = function (newThickness) {
self.thickness = newThickness;
graphics.scaleX = newThickness;
graphics.scaleY = newThickness;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222222
});
/****
* Game Code
****/
var GRID_SIZE = 40;
var GAME_WIDTH = 2048;
var GAME_HEIGHT = 2732;
var COLS = Math.floor(GAME_WIDTH / GRID_SIZE);
var ROWS = Math.floor(GAME_HEIGHT / GRID_SIZE);
// Snake variables
var snake = [];
var snakeDirection = {
x: 1,
y: 0
};
var nextDirection = {
x: 1,
y: 0
};
var snakeSpeed = 8;
var moveCounter = 0;
var snakeThickness = 1;
// Fruit variables
var currentFruit = null;
var fruits = [];
// Game state
var gameRunning = true;
var touchStartX = 0;
var touchStartY = 0;
// Score display
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
scoreTxt.x = 120;
scoreTxt.y = 20;
LK.gui.topLeft.addChild(scoreTxt);
// Power-up display
var powerTxt = new Text2('Speed: 1x | Thickness: 1x', {
size: 40,
fill: 0xFFFF00
});
powerTxt.anchor.set(1, 0);
powerTxt.x = -20;
powerTxt.y = 20;
LK.gui.topRight.addChild(powerTxt);
// Create walls
var topWall = game.addChild(LK.getAsset('wall', {
x: 0,
y: 0,
width: GAME_WIDTH,
height: 20
}));
var bottomWall = game.addChild(LK.getAsset('wall', {
x: 0,
y: GAME_HEIGHT - 20,
width: GAME_WIDTH,
height: 20
}));
var leftWall = game.addChild(LK.getAsset('wall', {
x: 0,
y: 0,
width: 20,
height: GAME_HEIGHT
}));
var rightWall = game.addChild(LK.getAsset('wall', {
x: GAME_WIDTH - 20,
y: 0,
width: 20,
height: GAME_HEIGHT
}));
// Initialize snake
function initSnake() {
// Create initial snake with 3 segments
var startX = Math.floor(COLS / 4);
var startY = Math.floor(ROWS / 2);
for (var i = 0; i < 3; i++) {
var segment;
if (i === 0) {
segment = new SnakeHead();
} else {
segment = new SnakeSegment();
}
segment.gridX = startX - i;
segment.gridY = startY;
segment.x = segment.gridX * GRID_SIZE + GRID_SIZE / 2;
segment.y = segment.gridY * GRID_SIZE + GRID_SIZE / 2;
snake.push(segment);
game.addChild(segment);
}
}
// Spawn fruit
function spawnFruit() {
if (currentFruit) {
currentFruit.destroy();
currentFruit = null;
}
var fruitTypes = ['apple', 'pear', 'banana'];
var randomType = fruitTypes[Math.floor(Math.random() * fruitTypes.length)];
var validPosition = false;
var gridX, gridY;
while (!validPosition) {
gridX = Math.floor(Math.random() * (COLS - 4)) + 2;
gridY = Math.floor(Math.random() * (ROWS - 4)) + 2;
validPosition = true;
for (var i = 0; i < snake.length; i++) {
if (snake[i].gridX === gridX && snake[i].gridY === gridY) {
validPosition = false;
break;
}
}
}
currentFruit = new Fruit(randomType);
currentFruit.gridX = gridX;
currentFruit.gridY = gridY;
currentFruit.x = gridX * GRID_SIZE + GRID_SIZE / 2;
currentFruit.y = gridY * GRID_SIZE + GRID_SIZE / 2;
game.addChild(currentFruit);
}
// Move snake
function moveSnake() {
if (!gameRunning) return;
var head = snake[0];
var newGridX = head.gridX + snakeDirection.x;
var newGridY = head.gridY + snakeDirection.y;
// Check wall collision
if (newGridX <= 0 || newGridX >= COLS - 1 || newGridY <= 0 || newGridY >= ROWS - 1) {
gameOver();
return;
}
// Check self collision
for (var i = 0; i < snake.length; i++) {
if (snake[i].gridX === newGridX && snake[i].gridY === newGridY) {
gameOver();
return;
}
}
// Check fruit collision
var ateFood = false;
if (currentFruit && currentFruit.gridX === newGridX && currentFruit.gridY === newGridY) {
ateFood = true;
handleFruitEaten(currentFruit.fruitType);
}
// Move snake
var newHead = new SnakeHead();
newHead.gridX = newGridX;
newHead.gridY = newGridY;
newHead.x = newGridX * GRID_SIZE + GRID_SIZE / 2;
newHead.y = newGridY * GRID_SIZE + GRID_SIZE / 2;
newHead.setThickness(snakeThickness);
// Convert old head to body
var oldHead = snake[0];
oldHead.destroy();
var newBody = new SnakeSegment();
newBody.gridX = oldHead.gridX;
newBody.gridY = oldHead.gridY;
newBody.x = oldHead.x;
newBody.y = oldHead.y;
newBody.setThickness(snakeThickness);
game.addChild(newBody);
snake[0] = newBody;
// Add new head
snake.unshift(newHead);
game.addChild(newHead);
if (!ateFood) {
// Remove tail
var tail = snake.pop();
tail.destroy();
}
// Update thickness for all segments
for (var i = 0; i < snake.length; i++) {
snake[i].setThickness(snakeThickness);
}
}
// Handle fruit eaten
function handleFruitEaten(fruitType) {
LK.getSound('eat').play();
if (fruitType === 'apple') {
LK.setScore(LK.getScore() + 3);
LK.getSound('powerup').play();
} else if (fruitType === 'pear') {
snakeThickness += 0.2;
LK.setScore(LK.getScore() + 1);
LK.getSound('powerup').play();
} else if (fruitType === 'banana') {
snakeSpeed += 1;
LK.setScore(LK.getScore() + 1);
LK.getSound('powerup').play();
}
scoreTxt.setText('Score: ' + LK.getScore());
powerTxt.setText('Speed: ' + snakeSpeed + 'x | Thickness: ' + Math.round(snakeThickness * 10) / 10 + 'x');
currentFruit.destroy();
currentFruit = null;
spawnFruit();
}
// Game over
function gameOver() {
gameRunning = false;
LK.showGameOver();
}
// Touch controls
game.down = function (x, y, obj) {
touchStartX = x;
touchStartY = y;
};
game.up = function (x, y, obj) {
if (!gameRunning) return;
var deltaX = x - touchStartX;
var deltaY = y - touchStartY;
var minSwipeDistance = 50;
if (Math.abs(deltaX) > minSwipeDistance || Math.abs(deltaY) > minSwipeDistance) {
if (Math.abs(deltaX) > Math.abs(deltaY)) {
// Horizontal swipe
if (deltaX > 0 && snakeDirection.x !== -1) {
nextDirection = {
x: 1,
y: 0
}; // Right
} else if (deltaX < 0 && snakeDirection.x !== 1) {
nextDirection = {
x: -1,
y: 0
}; // Left
}
} else {
// Vertical swipe
if (deltaY > 0 && snakeDirection.y !== -1) {
nextDirection = {
x: 0,
y: 1
}; // Down
} else if (deltaY < 0 && snakeDirection.y !== 1) {
nextDirection = {
x: 0,
y: -1
}; // Up
}
}
}
};
// Initialize game
initSnake();
spawnFruit();
// Main game loop
game.update = function () {
if (!gameRunning) return;
moveCounter++;
// Update direction
snakeDirection = nextDirection;
// Move snake based on speed
var moveInterval = Math.max(3, 15 - snakeSpeed);
if (moveCounter >= moveInterval) {
moveCounter = 0;
moveSnake();
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,311 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Fruit = Container.expand(function (type) {
+ var self = Container.call(this);
+ var assetName = 'apple';
+ if (type === 'pear') assetName = 'pear';else if (type === 'banana') assetName = 'banana';
+ var graphics = self.attachAsset(assetName, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.fruitType = type || 'apple';
+ return self;
+});
+var SnakeHead = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('snakeHead', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.thickness = 1;
+ self.setThickness = function (newThickness) {
+ self.thickness = newThickness;
+ graphics.scaleX = newThickness;
+ graphics.scaleY = newThickness;
+ };
+ return self;
+});
+var SnakeSegment = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('snakeBody', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.thickness = 1;
+ self.setThickness = function (newThickness) {
+ self.thickness = newThickness;
+ graphics.scaleX = newThickness;
+ graphics.scaleY = newThickness;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x222222
+});
+
+/****
+* Game Code
+****/
+var GRID_SIZE = 40;
+var GAME_WIDTH = 2048;
+var GAME_HEIGHT = 2732;
+var COLS = Math.floor(GAME_WIDTH / GRID_SIZE);
+var ROWS = Math.floor(GAME_HEIGHT / GRID_SIZE);
+// Snake variables
+var snake = [];
+var snakeDirection = {
+ x: 1,
+ y: 0
+};
+var nextDirection = {
+ x: 1,
+ y: 0
+};
+var snakeSpeed = 8;
+var moveCounter = 0;
+var snakeThickness = 1;
+// Fruit variables
+var currentFruit = null;
+var fruits = [];
+// Game state
+var gameRunning = true;
+var touchStartX = 0;
+var touchStartY = 0;
+// Score display
+var scoreTxt = new Text2('Score: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0, 0);
+scoreTxt.x = 120;
+scoreTxt.y = 20;
+LK.gui.topLeft.addChild(scoreTxt);
+// Power-up display
+var powerTxt = new Text2('Speed: 1x | Thickness: 1x', {
+ size: 40,
+ fill: 0xFFFF00
+});
+powerTxt.anchor.set(1, 0);
+powerTxt.x = -20;
+powerTxt.y = 20;
+LK.gui.topRight.addChild(powerTxt);
+// Create walls
+var topWall = game.addChild(LK.getAsset('wall', {
+ x: 0,
+ y: 0,
+ width: GAME_WIDTH,
+ height: 20
+}));
+var bottomWall = game.addChild(LK.getAsset('wall', {
+ x: 0,
+ y: GAME_HEIGHT - 20,
+ width: GAME_WIDTH,
+ height: 20
+}));
+var leftWall = game.addChild(LK.getAsset('wall', {
+ x: 0,
+ y: 0,
+ width: 20,
+ height: GAME_HEIGHT
+}));
+var rightWall = game.addChild(LK.getAsset('wall', {
+ x: GAME_WIDTH - 20,
+ y: 0,
+ width: 20,
+ height: GAME_HEIGHT
+}));
+// Initialize snake
+function initSnake() {
+ // Create initial snake with 3 segments
+ var startX = Math.floor(COLS / 4);
+ var startY = Math.floor(ROWS / 2);
+ for (var i = 0; i < 3; i++) {
+ var segment;
+ if (i === 0) {
+ segment = new SnakeHead();
+ } else {
+ segment = new SnakeSegment();
+ }
+ segment.gridX = startX - i;
+ segment.gridY = startY;
+ segment.x = segment.gridX * GRID_SIZE + GRID_SIZE / 2;
+ segment.y = segment.gridY * GRID_SIZE + GRID_SIZE / 2;
+ snake.push(segment);
+ game.addChild(segment);
+ }
+}
+// Spawn fruit
+function spawnFruit() {
+ if (currentFruit) {
+ currentFruit.destroy();
+ currentFruit = null;
+ }
+ var fruitTypes = ['apple', 'pear', 'banana'];
+ var randomType = fruitTypes[Math.floor(Math.random() * fruitTypes.length)];
+ var validPosition = false;
+ var gridX, gridY;
+ while (!validPosition) {
+ gridX = Math.floor(Math.random() * (COLS - 4)) + 2;
+ gridY = Math.floor(Math.random() * (ROWS - 4)) + 2;
+ validPosition = true;
+ for (var i = 0; i < snake.length; i++) {
+ if (snake[i].gridX === gridX && snake[i].gridY === gridY) {
+ validPosition = false;
+ break;
+ }
+ }
+ }
+ currentFruit = new Fruit(randomType);
+ currentFruit.gridX = gridX;
+ currentFruit.gridY = gridY;
+ currentFruit.x = gridX * GRID_SIZE + GRID_SIZE / 2;
+ currentFruit.y = gridY * GRID_SIZE + GRID_SIZE / 2;
+ game.addChild(currentFruit);
+}
+// Move snake
+function moveSnake() {
+ if (!gameRunning) return;
+ var head = snake[0];
+ var newGridX = head.gridX + snakeDirection.x;
+ var newGridY = head.gridY + snakeDirection.y;
+ // Check wall collision
+ if (newGridX <= 0 || newGridX >= COLS - 1 || newGridY <= 0 || newGridY >= ROWS - 1) {
+ gameOver();
+ return;
+ }
+ // Check self collision
+ for (var i = 0; i < snake.length; i++) {
+ if (snake[i].gridX === newGridX && snake[i].gridY === newGridY) {
+ gameOver();
+ return;
+ }
+ }
+ // Check fruit collision
+ var ateFood = false;
+ if (currentFruit && currentFruit.gridX === newGridX && currentFruit.gridY === newGridY) {
+ ateFood = true;
+ handleFruitEaten(currentFruit.fruitType);
+ }
+ // Move snake
+ var newHead = new SnakeHead();
+ newHead.gridX = newGridX;
+ newHead.gridY = newGridY;
+ newHead.x = newGridX * GRID_SIZE + GRID_SIZE / 2;
+ newHead.y = newGridY * GRID_SIZE + GRID_SIZE / 2;
+ newHead.setThickness(snakeThickness);
+ // Convert old head to body
+ var oldHead = snake[0];
+ oldHead.destroy();
+ var newBody = new SnakeSegment();
+ newBody.gridX = oldHead.gridX;
+ newBody.gridY = oldHead.gridY;
+ newBody.x = oldHead.x;
+ newBody.y = oldHead.y;
+ newBody.setThickness(snakeThickness);
+ game.addChild(newBody);
+ snake[0] = newBody;
+ // Add new head
+ snake.unshift(newHead);
+ game.addChild(newHead);
+ if (!ateFood) {
+ // Remove tail
+ var tail = snake.pop();
+ tail.destroy();
+ }
+ // Update thickness for all segments
+ for (var i = 0; i < snake.length; i++) {
+ snake[i].setThickness(snakeThickness);
+ }
+}
+// Handle fruit eaten
+function handleFruitEaten(fruitType) {
+ LK.getSound('eat').play();
+ if (fruitType === 'apple') {
+ LK.setScore(LK.getScore() + 3);
+ LK.getSound('powerup').play();
+ } else if (fruitType === 'pear') {
+ snakeThickness += 0.2;
+ LK.setScore(LK.getScore() + 1);
+ LK.getSound('powerup').play();
+ } else if (fruitType === 'banana') {
+ snakeSpeed += 1;
+ LK.setScore(LK.getScore() + 1);
+ LK.getSound('powerup').play();
+ }
+ scoreTxt.setText('Score: ' + LK.getScore());
+ powerTxt.setText('Speed: ' + snakeSpeed + 'x | Thickness: ' + Math.round(snakeThickness * 10) / 10 + 'x');
+ currentFruit.destroy();
+ currentFruit = null;
+ spawnFruit();
+}
+// Game over
+function gameOver() {
+ gameRunning = false;
+ LK.showGameOver();
+}
+// Touch controls
+game.down = function (x, y, obj) {
+ touchStartX = x;
+ touchStartY = y;
+};
+game.up = function (x, y, obj) {
+ if (!gameRunning) return;
+ var deltaX = x - touchStartX;
+ var deltaY = y - touchStartY;
+ var minSwipeDistance = 50;
+ if (Math.abs(deltaX) > minSwipeDistance || Math.abs(deltaY) > minSwipeDistance) {
+ if (Math.abs(deltaX) > Math.abs(deltaY)) {
+ // Horizontal swipe
+ if (deltaX > 0 && snakeDirection.x !== -1) {
+ nextDirection = {
+ x: 1,
+ y: 0
+ }; // Right
+ } else if (deltaX < 0 && snakeDirection.x !== 1) {
+ nextDirection = {
+ x: -1,
+ y: 0
+ }; // Left
+ }
+ } else {
+ // Vertical swipe
+ if (deltaY > 0 && snakeDirection.y !== -1) {
+ nextDirection = {
+ x: 0,
+ y: 1
+ }; // Down
+ } else if (deltaY < 0 && snakeDirection.y !== 1) {
+ nextDirection = {
+ x: 0,
+ y: -1
+ }; // Up
+ }
+ }
+ }
+};
+// Initialize game
+initSnake();
+spawnFruit();
+// Main game loop
+game.update = function () {
+ if (!gameRunning) return;
+ moveCounter++;
+ // Update direction
+ snakeDirection = nextDirection;
+ // Move snake based on speed
+ var moveInterval = Math.max(3, 15 - snakeSpeed);
+ if (moveCounter >= moveInterval) {
+ moveCounter = 0;
+ moveSnake();
+ }
+};
\ No newline at end of file
cabeza de serpiente morada con x en los ojos. In-Game asset. High contrast. No shadows. 2d draw, kid draw, simple, minimalistic
apple. In-Game asset. High contrast. minimalistic
banana. In-Game asset. 2d. High contrast. No shadows
angry blue bird. no shadow. cartoon. simple. minimalisitc. animated
crown. In-Game asset. 2d. No shadows. cartoon. animate. simple
snake head. In-Game asset. 2d. No shadows. cartoon. animated. simple. funny
spike block with an angry face. In-Game asset. 2d. High contrast. No shadows. cartoon
X2 signal. In-Game asset. 2d. No shadows. cartoon. simple
orange fruit. In-Game asset. 2d. High contrast. No shadows. cartoon. simple. minimalistic
coconout. In-Game asset. 2d. High contrast. No shadows. cartoon
circular green rough skin. In-Game asset. 2d. High contrast. No shadows. cartoon. comic. drawed
pear fruit. In-Game asset. 2d. High contrast. No shadows. animated. cartoon
eyebrow. In-Game asset. 2d. High contrast. No shadows. comic. cartoon
rock. In-Game asset. 2d. High contrast. No shadows. cartoon
orbe de luz. In-Game asset. 2d. High contrast. No shadows
potato. In-Game asset. 2d. High contrast. No shadows. cartoon
baby rat sprite. In-Game asset. 2d. High contrast. No shadows. cartoonm. animated
purple circle of rough skin. In-Game asset. 2d. High contrast. No shadows. animated. comic. cartoon
blue sfere, ball, slime, translucent,. In-Game asset. 2d. High contrast. No shadows. cartoon. simple. draw
rock line. In-Game asset. 2d. High contrast. No shadows. long. cartoon
fire block background. In-Game asset. 2d. High contrast. No shadows. cartoon. draw