User prompt
2 tane x yan yana iken 2. x yanına o gelsin
User prompt
basit bir ai karşı oynansın
User prompt
oyuncu x koyduğunda rastgele o koyulsun
User prompt
bu oyun tic tac toe oyunu.X ve O gri kutu görsellerinin üzerine koyulsun
User prompt
x o koyulabilsin
User prompt
yerine grikutularu koy
User prompt
oyundaki küçük kutuları kaldır
User prompt
x o nun üzerinde olduğu kutu görseli grikutu güncellensin
User prompt
healtbar boyutu güncelle
User prompt
oyundaki siyah o assets deki y görseli olsun
User prompt
oyundaki siyah x assets deki x görseli olsun
User prompt
assets paketlerini tic tac toe ya göre düzenle
User prompt
Tic tac Tor oyununa geri dön
User prompt
yapay zeka ya karşı oynansın. vikinglerin kılıcı olsun
User prompt
viking savaş oyunu yap
Code edit (1 edits merged)
Please save this source code
User prompt
Tic Tac Toe Touch
Initial prompt
tic tac toe yap,
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // BoardCell: Represents a single cell in the Tic Tac Toe grid var BoardCell = Container.expand(function () { var self = Container.call(this); // Cell background (box) var cellBg = self.attachAsset('cellBg', { anchorX: 0.5, anchorY: 0.5 }); // Symbol text (X or O) var symbolText = new Text2('', { size: 220, fill: 0x222222 }); symbolText.anchor.set(0.5, 0.5); self.addChild(symbolText); self.symbol = ''; // '', 'X', or 'O' self.row = 0; self.col = 0; self.isActive = true; // Can be tapped self.setSymbol = function (sym) { self.symbol = sym; symbolText.setText(sym); }; self.clear = function () { self.symbol = ''; symbolText.setText(''); self.isActive = true; }; self.flash = function (color, duration) { tween(cellBg, { tint: color }, { duration: duration / 2, easing: tween.easeIn, onFinish: function onFinish() { tween(cellBg, { tint: 0xffffff }, { duration: duration / 2, easing: tween.easeOut }); } }); }; return self; }); // Health bar class var HealthBar = Container.expand(function () { var self = Container.call(this); var bg = self.attachAsset('healthBarBg', { anchorX: 0.5, anchorY: 0.5 }); var bar = self.attachAsset('healthBar', { anchorX: 0.5, anchorY: 0.5 }); self.set = function (val, max) { bar.width = 220 * (val / max); if (val / max < 0.3) bar.tint = 0xff4444;else if (val / max < 0.6) bar.tint = 0xffcc00;else bar.tint = 0x4caf50; }; self.set(1, 1); return self; }); /**** * Initialize Game ****/ // Create vikings var game = new LK.Game({ backgroundColor: 0xffffff }); /**** * Game Code ****/ // Tic Tac Toe Game State var BOARD_SIZE = 3; var CELL_SIZE = 320; var CELL_MARGIN = 24; var board = []; var currentPlayer = 'X'; var gameActive = true; var statusText = new Text2('Sıra: X', { size: 110, fill: 0x333333 }); statusText.anchor.set(0.5, 0); LK.gui.top.addChild(statusText); // Center the board var boardWidth = BOARD_SIZE * CELL_SIZE + (BOARD_SIZE - 1) * CELL_MARGIN; var boardHeight = BOARD_SIZE * CELL_SIZE + (BOARD_SIZE - 1) * CELL_MARGIN; var boardOriginX = (2048 - boardWidth) / 2; var boardOriginY = (2732 - boardHeight) / 2 + 60; // Create board cells for (var row = 0; row < BOARD_SIZE; row++) { board[row] = []; for (var col = 0; col < BOARD_SIZE; col++) { var cell = new BoardCell(); cell.x = boardOriginX + col * (CELL_SIZE + CELL_MARGIN) + CELL_SIZE / 2; cell.y = boardOriginY + row * (CELL_SIZE + CELL_MARGIN) + CELL_SIZE / 2; cell.row = row; cell.col = col; cell.setSymbol(''); cell.isActive = true; // Cell tap handler cell.down = function (cell) { return function (x, y, obj) { if (!gameActive || !cell.isActive) return; cell.setSymbol(currentPlayer); cell.isActive = false; if (checkWin(currentPlayer)) { gameActive = false; statusText.setText('Kazanan: ' + currentPlayer); highlightWin(currentPlayer); LK.setTimeout(function () { LK.showYouWin(); }, 1200); } else if (isBoardFull()) { gameActive = false; statusText.setText('Berabere!'); LK.setTimeout(function () { LK.showGameOver(); }, 1200); } else { currentPlayer = currentPlayer === 'X' ? 'O' : 'X'; statusText.setText('Sıra: ' + currentPlayer); } }; }(cell); board[row][col] = cell; game.addChild(cell); } } // Check for win function checkWin(player) { // Rows for (var r = 0; r < BOARD_SIZE; r++) { var win = true; for (var c = 0; c < BOARD_SIZE; c++) { if (board[r][c].symbol !== player) win = false; } if (win) return true; } // Columns for (var c = 0; c < BOARD_SIZE; c++) { var win = true; for (var r = 0; r < BOARD_SIZE; r++) { if (board[r][c].symbol !== player) win = false; } if (win) return true; } // Diagonal \ var win = true; for (var i = 0; i < BOARD_SIZE; i++) { if (board[i][i].symbol !== player) win = false; } if (win) return true; // Diagonal / win = true; for (var i = 0; i < BOARD_SIZE; i++) { if (board[i][BOARD_SIZE - 1 - i].symbol !== player) win = false; } if (win) return true; return false; } // Highlight winning cells function highlightWin(player) { // Rows for (var r = 0; r < BOARD_SIZE; r++) { var win = true; for (var c = 0; c < BOARD_SIZE; c++) { if (board[r][c].symbol !== player) win = false; } if (win) { for (var c = 0; c < BOARD_SIZE; c++) { board[r][c].flash(0x00ff00, 800); } return; } } // Columns for (var c = 0; c < BOARD_SIZE; c++) { var win = true; for (var r = 0; r < BOARD_SIZE; r++) { if (board[r][c].symbol !== player) win = false; } if (win) { for (var r = 0; r < BOARD_SIZE; r++) { board[r][c].flash(0x00ff00, 800); } return; } } // Diagonal \ var win = true; for (var i = 0; i < BOARD_SIZE; i++) { if (board[i][i].symbol !== player) win = false; } if (win) { for (var i = 0; i < BOARD_SIZE; i++) { board[i][i].flash(0x00ff00, 800); } return; } // Diagonal / win = true; for (var i = 0; i < BOARD_SIZE; i++) { if (board[i][BOARD_SIZE - 1 - i].symbol !== player) win = false; } if (win) { for (var i = 0; i < BOARD_SIZE; i++) { board[i][BOARD_SIZE - 1 - i].flash(0x00ff00, 800); } return; } } // Check if board is full function isBoardFull() { for (var r = 0; r < BOARD_SIZE; r++) { for (var c = 0; c < BOARD_SIZE; c++) { if (board[r][c].symbol === '') return false; } } return true; } // Reset game on LK reset (handled automatically) function resetBoard() { for (var r = 0; r < BOARD_SIZE; r++) { for (var c = 0; c < BOARD_SIZE; c++) { board[r][c].clear(); } } currentPlayer = 'X'; gameActive = true; statusText.setText('Sıra: X'); } resetBoard();
===================================================================
--- original.js
+++ change.js
@@ -81,142 +81,166 @@
/****
* Game Code
****/
-// Viking Battle Game State
-var PLAYER_HEALTH = 5;
-var ENEMY_HEALTH = 5;
-var ATTACK_DAMAGE = 1;
-var VIKING_SIZE = 320;
-var VIKING_MARGIN = 120;
-var vikingPlayer, vikingEnemy;
-var playerHealth = PLAYER_HEALTH;
-var enemyHealth = ENEMY_HEALTH;
+// Tic Tac Toe Game State
+var BOARD_SIZE = 3;
+var CELL_SIZE = 320;
+var CELL_MARGIN = 24;
+var board = [];
+var currentPlayer = 'X';
var gameActive = true;
-var statusText = new Text2('Saldırı için VIKING\'ine dokun! (Düşman: Yapay Zeka)', {
+var statusText = new Text2('Sıra: X', {
size: 110,
fill: 0x333333
});
statusText.anchor.set(0.5, 0);
LK.gui.top.addChild(statusText);
-// Viking asset setup
-// Health bar asset
-// Create vikings
-vikingPlayer = new Container();
-var playerSprite = vikingPlayer.attachAsset('vikingPlayer', {
- anchorX: 0.5,
- anchorY: 0.5
-});
-// Attach sword to player Viking
-var playerSword = vikingPlayer.attachAsset('sword', {
- anchorX: 0.1,
- anchorY: 0.5,
- x: 60,
- y: 0
-});
-vikingPlayer.x = 2048 / 2 - VIKING_SIZE - VIKING_MARGIN;
-vikingPlayer.y = 2732 / 2;
-game.addChild(vikingPlayer);
-vikingEnemy = new Container();
-var enemySprite = vikingEnemy.attachAsset('vikingEnemy', {
- anchorX: 0.5,
- anchorY: 0.5
-});
-// Attach sword to enemy Viking
-var enemySword = vikingEnemy.attachAsset('sword', {
- anchorX: 0.1,
- anchorY: 0.5,
- x: 60,
- y: 0
-});
-vikingEnemy.x = 2048 / 2 + VIKING_SIZE + VIKING_MARGIN;
-vikingEnemy.y = 2732 / 2;
-game.addChild(vikingEnemy);
-// Health bars
-var playerHealthBar = new HealthBar();
-playerHealthBar.x = vikingPlayer.x;
-playerHealthBar.y = vikingPlayer.y - VIKING_SIZE / 1.2;
-game.addChild(playerHealthBar);
-var enemyHealthBar = new HealthBar();
-enemyHealthBar.x = vikingEnemy.x;
-enemyHealthBar.y = vikingEnemy.y - VIKING_SIZE / 1.2;
-game.addChild(enemyHealthBar);
-// Helper: Update status text
-function updateStatusText() {
- if (!gameActive) {
- if (playerHealth <= 0) statusText.setText('Kaybettin! Düşman (Yapay Zeka) Viking kazandı!');else if (enemyHealth <= 0) statusText.setText('Kazandın! Viking\'in zafer kazandı!');
- } else {
- statusText.setText('Saldırı için VIKING\'ine dokun! (Düşman: Yapay Zeka)');
+// Center the board
+var boardWidth = BOARD_SIZE * CELL_SIZE + (BOARD_SIZE - 1) * CELL_MARGIN;
+var boardHeight = BOARD_SIZE * CELL_SIZE + (BOARD_SIZE - 1) * CELL_MARGIN;
+var boardOriginX = (2048 - boardWidth) / 2;
+var boardOriginY = (2732 - boardHeight) / 2 + 60;
+// Create board cells
+for (var row = 0; row < BOARD_SIZE; row++) {
+ board[row] = [];
+ for (var col = 0; col < BOARD_SIZE; col++) {
+ var cell = new BoardCell();
+ cell.x = boardOriginX + col * (CELL_SIZE + CELL_MARGIN) + CELL_SIZE / 2;
+ cell.y = boardOriginY + row * (CELL_SIZE + CELL_MARGIN) + CELL_SIZE / 2;
+ cell.row = row;
+ cell.col = col;
+ cell.setSymbol('');
+ cell.isActive = true;
+ // Cell tap handler
+ cell.down = function (cell) {
+ return function (x, y, obj) {
+ if (!gameActive || !cell.isActive) return;
+ cell.setSymbol(currentPlayer);
+ cell.isActive = false;
+ if (checkWin(currentPlayer)) {
+ gameActive = false;
+ statusText.setText('Kazanan: ' + currentPlayer);
+ highlightWin(currentPlayer);
+ LK.setTimeout(function () {
+ LK.showYouWin();
+ }, 1200);
+ } else if (isBoardFull()) {
+ gameActive = false;
+ statusText.setText('Berabere!');
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 1200);
+ } else {
+ currentPlayer = currentPlayer === 'X' ? 'O' : 'X';
+ statusText.setText('Sıra: ' + currentPlayer);
+ }
+ };
+ }(cell);
+ board[row][col] = cell;
+ game.addChild(cell);
}
}
-// Helper: Reset game
-function resetBattle() {
- playerHealth = PLAYER_HEALTH;
- enemyHealth = ENEMY_HEALTH;
- gameActive = true;
- playerHealthBar.set(playerHealth, PLAYER_HEALTH);
- enemyHealthBar.set(enemyHealth, ENEMY_HEALTH);
- updateStatusText();
-}
-// Axe attack animation
-function throwAxe(fromViking, toViking, onHit) {
- var axe = new Container();
- var axeSprite = axe.attachAsset('axe', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- axe.x = fromViking.x;
- axe.y = fromViking.y;
- game.addChild(axe);
- var dx = toViking.x - fromViking.x;
- var dy = toViking.y - fromViking.y;
- var duration = 350;
- tween(axe, {
- x: toViking.x,
- y: toViking.y
- }, {
- duration: duration,
- easing: tween.easeIn,
- onFinish: function onFinish() {
- game.removeChild(axe);
- if (onHit) onHit();
+// Check for win
+function checkWin(player) {
+ // Rows
+ for (var r = 0; r < BOARD_SIZE; r++) {
+ var win = true;
+ for (var c = 0; c < BOARD_SIZE; c++) {
+ if (board[r][c].symbol !== player) win = false;
}
- });
+ if (win) return true;
+ }
+ // Columns
+ for (var c = 0; c < BOARD_SIZE; c++) {
+ var win = true;
+ for (var r = 0; r < BOARD_SIZE; r++) {
+ if (board[r][c].symbol !== player) win = false;
+ }
+ if (win) return true;
+ }
+ // Diagonal \
+ var win = true;
+ for (var i = 0; i < BOARD_SIZE; i++) {
+ if (board[i][i].symbol !== player) win = false;
+ }
+ if (win) return true;
+ // Diagonal /
+ win = true;
+ for (var i = 0; i < BOARD_SIZE; i++) {
+ if (board[i][BOARD_SIZE - 1 - i].symbol !== player) win = false;
+ }
+ if (win) return true;
+ return false;
}
-// Player attack handler
-vikingPlayer.down = function (x, y, obj) {
- if (!gameActive) return;
- // Player attacks enemy
- throwAxe(vikingPlayer, vikingEnemy, function () {
- enemyHealth -= ATTACK_DAMAGE;
- if (enemyHealth < 0) enemyHealth = 0;
- enemyHealthBar.set(enemyHealth, ENEMY_HEALTH);
- if (enemyHealth <= 0) {
- gameActive = false;
- updateStatusText();
- LK.setTimeout(function () {
- LK.showYouWin();
- }, 1200);
+// Highlight winning cells
+function highlightWin(player) {
+ // Rows
+ for (var r = 0; r < BOARD_SIZE; r++) {
+ var win = true;
+ for (var c = 0; c < BOARD_SIZE; c++) {
+ if (board[r][c].symbol !== player) win = false;
+ }
+ if (win) {
+ for (var c = 0; c < BOARD_SIZE; c++) {
+ board[r][c].flash(0x00ff00, 800);
+ }
return;
}
- // Enemy AI: counterattacks after short delay
- LK.setTimeout(function () {
- if (!gameActive) return;
- // Simple AI: always attack if alive
- throwAxe(vikingEnemy, vikingPlayer, function () {
- playerHealth -= ATTACK_DAMAGE;
- if (playerHealth < 0) playerHealth = 0;
- playerHealthBar.set(playerHealth, PLAYER_HEALTH);
- if (playerHealth <= 0) {
- gameActive = false;
- updateStatusText();
- LK.setTimeout(function () {
- LK.showGameOver();
- }, 1200);
- }
- });
- }, 500);
- });
- updateStatusText();
-};
+ }
+ // Columns
+ for (var c = 0; c < BOARD_SIZE; c++) {
+ var win = true;
+ for (var r = 0; r < BOARD_SIZE; r++) {
+ if (board[r][c].symbol !== player) win = false;
+ }
+ if (win) {
+ for (var r = 0; r < BOARD_SIZE; r++) {
+ board[r][c].flash(0x00ff00, 800);
+ }
+ return;
+ }
+ }
+ // Diagonal \
+ var win = true;
+ for (var i = 0; i < BOARD_SIZE; i++) {
+ if (board[i][i].symbol !== player) win = false;
+ }
+ if (win) {
+ for (var i = 0; i < BOARD_SIZE; i++) {
+ board[i][i].flash(0x00ff00, 800);
+ }
+ return;
+ }
+ // Diagonal /
+ win = true;
+ for (var i = 0; i < BOARD_SIZE; i++) {
+ if (board[i][BOARD_SIZE - 1 - i].symbol !== player) win = false;
+ }
+ if (win) {
+ for (var i = 0; i < BOARD_SIZE; i++) {
+ board[i][BOARD_SIZE - 1 - i].flash(0x00ff00, 800);
+ }
+ return;
+ }
+}
+// Check if board is full
+function isBoardFull() {
+ for (var r = 0; r < BOARD_SIZE; r++) {
+ for (var c = 0; c < BOARD_SIZE; c++) {
+ if (board[r][c].symbol === '') return false;
+ }
+ }
+ return true;
+}
// Reset game on LK reset (handled automatically)
-resetBattle();
\ No newline at end of file
+function resetBoard() {
+ for (var r = 0; r < BOARD_SIZE; r++) {
+ for (var c = 0; c < BOARD_SIZE; c++) {
+ board[r][c].clear();
+ }
+ }
+ currentPlayer = 'X';
+ gameActive = true;
+ statusText.setText('Sıra: X');
+}
+resetBoard();
\ No newline at end of file