User prompt
Oyunun adını eğlenceli -2048 oyunu yap bide oyuna uygun Arkaplan müziği ekle
User prompt
Nasıl oynanır durumunda -2 den başlayıp -2048 yapsan kazanırsın oyunun ismini -2048 oyun yap
User prompt
Toplam 64 kare olsun arkaplan rengi desenli rente olsun boş ve sayılı kare rengi 3d biçimimde gercekçi rente olsun
User prompt
Boş hücre renki daha gerçekçi canlı yap sayı hücresi de daha gerçekçi ve canlı olsun
User prompt
Oyunun ismi -2048 yap bide oyna butonu ve nasıl oynanır butonu biraz daha büyük aralarında boşluk olsun bide yeşil renkte olsun bide boş kareler biraz daha olsun ve kareler biraz daha büyük olsun
User prompt
Oyun tablosu biraz daha büyük olsun ve boş kareler beli olsun bide oyunun sesi olsun
User prompt
Oyun - 2 den başlasın -2048 gelirse kazansın bide oyna butonu ve nasıl oynanır butonu daha büyük olsun
Code edit (1 edits merged)
Please save this source code
User prompt
Reverse 2048: Countdown Challenge
Initial prompt
Merhaba bana android telefon için bir mobil oyun yap Türkçe dil desteği olsun oyun 2048 oyunu olsun 2048 farkı sayı eksiye doğru gitsin yani oyun -2048 olunca bitsin sitil süper olsun oyuna başlamadan önce oyna butonu ve nasıl oynanır butonu olsun oyna butonu basmadan oyun açılmasın bide oyuna uygun ses ve arkplan sesi ekle
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var GameGrid = Container.expand(function () {
var self = Container.call(this);
var bg = self.attachAsset('grid_bg', {
anchorX: 0.5,
anchorY: 0.5
});
self.grid = [];
self.tiles = [];
// Initialize 4x4 grid
for (var row = 0; row < 4; row++) {
self.grid[row] = [];
for (var col = 0; col < 4; col++) {
self.grid[row][col] = null;
}
}
self.addRandomTile = function () {
var emptyCells = [];
for (var row = 0; row < 4; row++) {
for (var col = 0; col < 4; col++) {
if (!self.grid[row][col]) {
emptyCells.push({
row: row,
col: col
});
}
}
}
if (emptyCells.length > 0) {
var randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];
var value = Math.random() < 0.9 ? -2 : -4;
self.addTile(randomCell.row, randomCell.col, value);
}
};
self.addTile = function (row, col, value) {
var tile = new Tile(value);
tile.gridX = col;
tile.gridY = row;
var tileX = (col - 1.5) * 150;
var tileY = (row - 1.5) * 150;
tile.x = tileX;
tile.y = tileY;
self.grid[row][col] = tile;
self.tiles.push(tile);
self.addChild(tile);
};
self.canMove = function () {
// Check for empty cells
for (var row = 0; row < 4; row++) {
for (var col = 0; col < 4; col++) {
if (!self.grid[row][col]) {
return true;
}
}
}
// Check for possible merges
for (var row = 0; row < 4; row++) {
for (var col = 0; col < 4; col++) {
var current = self.grid[row][col];
if (current) {
// Check right
if (col < 3 && self.grid[row][col + 1] && self.grid[row][col + 1].value === current.value) {
return true;
}
// Check down
if (row < 3 && self.grid[row + 1][col] && self.grid[row + 1][col].value === current.value) {
return true;
}
}
}
}
return false;
};
self.move = function (direction) {
var moved = false;
var newGrid = [];
for (var row = 0; row < 4; row++) {
newGrid[row] = [];
for (var col = 0; col < 4; col++) {
newGrid[row][col] = null;
}
}
if (direction === 'left') {
for (var row = 0; row < 4; row++) {
var line = [];
for (var col = 0; col < 4; col++) {
if (self.grid[row][col]) {
line.push(self.grid[row][col]);
}
}
var merged = self.mergeLine(line);
for (var i = 0; i < merged.length; i++) {
newGrid[row][i] = merged[i];
if (!moved && (merged[i].gridX !== i || merged[i].gridY !== row)) {
moved = true;
}
merged[i].gridX = i;
merged[i].gridY = row;
}
}
} else if (direction === 'right') {
for (var row = 0; row < 4; row++) {
var line = [];
for (var col = 3; col >= 0; col--) {
if (self.grid[row][col]) {
line.push(self.grid[row][col]);
}
}
var merged = self.mergeLine(line);
for (var i = 0; i < merged.length; i++) {
newGrid[row][3 - i] = merged[i];
if (!moved && (merged[i].gridX !== 3 - i || merged[i].gridY !== row)) {
moved = true;
}
merged[i].gridX = 3 - i;
merged[i].gridY = row;
}
}
} else if (direction === 'up') {
for (var col = 0; col < 4; col++) {
var line = [];
for (var row = 0; row < 4; row++) {
if (self.grid[row][col]) {
line.push(self.grid[row][col]);
}
}
var merged = self.mergeLine(line);
for (var i = 0; i < merged.length; i++) {
newGrid[i][col] = merged[i];
if (!moved && (merged[i].gridX !== col || merged[i].gridY !== i)) {
moved = true;
}
merged[i].gridX = col;
merged[i].gridY = i;
}
}
} else if (direction === 'down') {
for (var col = 0; col < 4; col++) {
var line = [];
for (var row = 3; row >= 0; row--) {
if (self.grid[row][col]) {
line.push(self.grid[row][col]);
}
}
var merged = self.mergeLine(line);
for (var i = 0; i < merged.length; i++) {
newGrid[3 - i][col] = merged[i];
if (!moved && (merged[i].gridX !== col || merged[i].gridY !== 3 - i)) {
moved = true;
}
merged[i].gridX = col;
merged[i].gridY = 3 - i;
}
}
}
if (moved) {
self.grid = newGrid;
self.animateTiles();
LK.getSound('tile_move').play();
LK.setTimeout(function () {
self.addRandomTile();
if (!self.canMove()) {
LK.showGameOver();
}
}, 200);
}
return moved;
};
self.mergeLine = function (line) {
var result = [];
var i = 0;
while (i < line.length) {
if (i < line.length - 1 && line[i].value === line[i + 1].value) {
// Merge tiles - in reverse 2048, we go towards negative numbers
var newValue;
if (line[i].value === -2) {
newValue = -4;
} else if (line[i].value === -4) {
newValue = -8;
} else if (line[i].value < 0) {
newValue = line[i].value * 2;
} else if (line[i].value === 2) {
newValue = 1;
} else if (line[i].value === 1) {
newValue = 0;
} else if (line[i].value === 0) {
newValue = -1;
} else if (line[i].value > 0) {
newValue = line[i].value / 2;
} else {
newValue = line[i].value * 2;
}
line[i].setValue(newValue);
result.push(line[i]);
// Remove the merged tile
line[i + 1].destroy();
var index = gameGrid.tiles.indexOf(line[i + 1]);
if (index > -1) {
gameGrid.tiles.splice(index, 1);
}
LK.getSound('tile_merge').play();
// Check for win condition
if (newValue <= -2048) {
LK.setTimeout(function () {
LK.showYouWin();
}, 300);
}
i += 2;
} else {
result.push(line[i]);
i++;
}
}
return result;
};
self.animateTiles = function () {
for (var i = 0; i < self.tiles.length; i++) {
var tile = self.tiles[i];
var targetX = (tile.gridX - 1.5) * 150;
var targetY = (tile.gridY - 1.5) * 150;
tween(tile, {
x: targetX,
y: targetY
}, {
duration: 200
});
}
};
return self;
});
var MenuButton = Container.expand(function (text, action) {
var self = Container.call(this);
var bg = self.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(text, {
size: 48,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.action = action;
self.down = function () {
tween(self, {
scaleX: 0.95,
scaleY: 0.95
}, {
duration: 100
});
};
self.up = function () {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
if (self.action) {
self.action();
}
};
return self;
});
var Tile = Container.expand(function (value) {
var self = Container.call(this);
var bg = self.attachAsset('tile', {
anchorX: 0.5,
anchorY: 0.5
});
self.value = value || -2;
self.gridX = 0;
self.gridY = 0;
var text = new Text2(self.value.toString(), {
size: 48,
fill: 0xFFFFFF
});
text.anchor.set(0.5, 0.5);
self.addChild(text);
self.setValue = function (newValue) {
self.value = newValue;
text.setText(newValue.toString());
// Color tiles based on value
if (newValue <= -1024) {
bg.tint = 0x8e44ad;
} else if (newValue <= -512) {
bg.tint = 0x9b59b6;
} else if (newValue <= -256) {
bg.tint = 0xaf7ac5;
} else if (newValue <= -128) {
bg.tint = 0xbb8fce;
} else if (newValue <= -64) {
bg.tint = 0xc8a2c8;
} else if (newValue <= -32) {
bg.tint = 0xd7bde2;
} else if (newValue <= -16) {
bg.tint = 0xe8daef;
} else if (newValue <= -8) {
bg.tint = 0xf4ecf7;
} else if (newValue <= -4) {
bg.tint = 0xfdedec;
} else if (newValue <= -2) {
bg.tint = 0xfdeaea;
} else if (newValue >= 16) {
bg.tint = 0xff6b6b;
} else if (newValue >= 8) {
bg.tint = 0x4ecdc4;
} else if (newValue >= 4) {
bg.tint = 0x45b7d1;
} else if (newValue >= 2) {
bg.tint = 0x96ceb4;
} else if (newValue >= 0) {
bg.tint = 0xfcea2b;
} else {
bg.tint = 0xff9ff3;
}
};
self.setValue(self.value);
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x34495e
});
/****
* Game Code
****/
var gameState = 'menu'; // 'menu', 'instructions', 'playing'
var gameGrid;
var swipeStartX = 0;
var swipeStartY = 0;
var isSweping = false;
// Menu elements
var menuContainer = new Container();
var menuBg = menuContainer.attachAsset('menu_bg', {
anchorX: 0.5,
anchorY: 0.5
});
var titleText = new Text2('Reverse 2048', {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 0;
titleText.y = -200;
menuContainer.addChild(titleText);
var playButton = new MenuButton('Oyna', function () {
startGame();
});
playButton.x = 0;
playButton.y = 50;
menuContainer.addChild(playButton);
var instructionsButton = new MenuButton('Nasıl Oynanır', function () {
showInstructions();
});
instructionsButton.x = 0;
instructionsButton.y = 200;
menuContainer.addChild(instructionsButton);
menuContainer.x = 2048 / 2;
menuContainer.y = 2732 / 2;
game.addChild(menuContainer);
// Instructions container
var instructionsContainer = new Container();
var instructionsBg = instructionsContainer.attachAsset('menu_bg', {
anchorX: 0.5,
anchorY: 0.5
});
var instructionsTitle = new Text2('Nasıl Oynanır', {
size: 60,
fill: 0xFFFFFF
});
instructionsTitle.anchor.set(0.5, 0.5);
instructionsTitle.x = 0;
instructionsTitle.y = -300;
instructionsContainer.addChild(instructionsTitle);
var instructionsText = new Text2('• Aynı sayıları birleştirerek\n daha küçük sayılar elde edin\n• Hedefiniz -2048 sayısına ulaşmak\n• Kaydırarak taşları hareket ettirin\n• 2+2=1, 1+1=0, 0+0=-1', {
size: 36,
fill: 0xFFFFFF
});
instructionsText.anchor.set(0.5, 0.5);
instructionsText.x = 0;
instructionsText.y = -50;
instructionsContainer.addChild(instructionsText);
var backButton = new MenuButton('Geri', function () {
showMenu();
});
backButton.x = 0;
backButton.y = 250;
instructionsContainer.addChild(backButton);
instructionsContainer.x = 2048 / 2;
instructionsContainer.y = 2732 / 2;
instructionsContainer.visible = false;
game.addChild(instructionsContainer);
// Score display
var scoreText = new Text2('Skor: 0', {
size: 48,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
scoreText.x = 0;
scoreText.y = 50;
LK.gui.top.addChild(scoreText);
scoreText.visible = false;
function showMenu() {
gameState = 'menu';
menuContainer.visible = true;
instructionsContainer.visible = false;
if (gameGrid) {
gameGrid.visible = false;
}
scoreText.visible = false;
LK.stopMusic();
}
function showInstructions() {
gameState = 'instructions';
menuContainer.visible = false;
instructionsContainer.visible = true;
}
function startGame() {
gameState = 'playing';
menuContainer.visible = false;
instructionsContainer.visible = false;
scoreText.visible = true;
if (gameGrid) {
gameGrid.destroy();
}
gameGrid = new GameGrid();
gameGrid.x = 2048 / 2;
gameGrid.y = 2732 / 2;
game.addChild(gameGrid);
// Add initial tiles
gameGrid.addRandomTile();
gameGrid.addRandomTile();
LK.setScore(0);
scoreText.setText('Skor: 0');
LK.playMusic('bgmusic');
}
game.down = function (x, y, obj) {
if (gameState === 'playing') {
swipeStartX = x;
swipeStartY = y;
isSweping = true;
}
};
game.up = function (x, y, obj) {
if (gameState === 'playing' && isSweping) {
var deltaX = x - swipeStartX;
var deltaY = y - swipeStartY;
var minSwipeDistance = 50;
if (Math.abs(deltaX) > minSwipeDistance || Math.abs(deltaY) > minSwipeDistance) {
var direction;
if (Math.abs(deltaX) > Math.abs(deltaY)) {
direction = deltaX > 0 ? 'right' : 'left';
} else {
direction = deltaY > 0 ? 'down' : 'up';
}
if (gameGrid.move(direction)) {
LK.setScore(LK.getScore() + 10);
scoreText.setText('Skor: ' + LK.getScore());
}
}
isSweping = false;
}
};
game.update = function () {
// Game loop logic if needed
}; ===================================================================
--- original.js
+++ change.js
@@ -35,9 +35,9 @@
}
}
if (emptyCells.length > 0) {
var randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];
- var value = Math.random() < 0.9 ? 2 : 4;
+ var value = Math.random() < 0.9 ? -2 : -4;
self.addTile(randomCell.row, randomCell.col, value);
}
};
self.addTile = function (row, col, value) {
@@ -180,9 +180,15 @@
while (i < line.length) {
if (i < line.length - 1 && line[i].value === line[i + 1].value) {
// Merge tiles - in reverse 2048, we go towards negative numbers
var newValue;
- if (line[i].value === 2) {
+ if (line[i].value === -2) {
+ newValue = -4;
+ } else if (line[i].value === -4) {
+ newValue = -8;
+ } else if (line[i].value < 0) {
+ newValue = line[i].value * 2;
+ } else if (line[i].value === 2) {
newValue = 1;
} else if (line[i].value === 1) {
newValue = 0;
} else if (line[i].value === 0) {
@@ -236,9 +242,9 @@
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(text, {
- size: 36,
+ size: 48,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
@@ -269,9 +275,9 @@
var bg = self.attachAsset('tile', {
anchorX: 0.5,
anchorY: 0.5
});
- self.value = value || 2;
+ self.value = value || -2;
self.gridX = 0;
self.gridY = 0;
var text = new Text2(self.value.toString(), {
size: 48,
@@ -282,9 +288,29 @@
self.setValue = function (newValue) {
self.value = newValue;
text.setText(newValue.toString());
// Color tiles based on value
- if (newValue >= 16) {
+ if (newValue <= -1024) {
+ bg.tint = 0x8e44ad;
+ } else if (newValue <= -512) {
+ bg.tint = 0x9b59b6;
+ } else if (newValue <= -256) {
+ bg.tint = 0xaf7ac5;
+ } else if (newValue <= -128) {
+ bg.tint = 0xbb8fce;
+ } else if (newValue <= -64) {
+ bg.tint = 0xc8a2c8;
+ } else if (newValue <= -32) {
+ bg.tint = 0xd7bde2;
+ } else if (newValue <= -16) {
+ bg.tint = 0xe8daef;
+ } else if (newValue <= -8) {
+ bg.tint = 0xf4ecf7;
+ } else if (newValue <= -4) {
+ bg.tint = 0xfdedec;
+ } else if (newValue <= -2) {
+ bg.tint = 0xfdeaea;
+ } else if (newValue >= 16) {
bg.tint = 0xff6b6b;
} else if (newValue >= 8) {
bg.tint = 0x4ecdc4;
} else if (newValue >= 4) {