User prompt
oyunu yeniden başlat butonunu kaldır
User prompt
oyunu yeniden başlat butonu ekle
User prompt
Gemilerin yerleşim gösterimini iyileştir
User prompt
yerleşim alanı a4 kareli kağıt gibi olsun beyaz üstü mavi çizgili
User prompt
oyun alanını biraz yakınlaştır ve ortala
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'length')' in or related to this line: 'for (var i = 0; i < playerFleetDisplay.length; i++) {' Line Number: 667
User prompt
herkesin filosunu tahtanın yanında anlık göster. komple battığında onu yandaki listede de göster
User prompt
her yerleştirmeye basıldığında tahtayı sıfırla izler bırakma
User prompt
otomatik yerleşim sınırsız yapabileyim
User prompt
otomatik yerleşim yapacak buton ekle
User prompt
füze sesleri ekle
User prompt
rakibin yerleşimini oyuncuya gizle
User prompt
gerçek gemi modelleri kullan
User prompt
1. *Oyun Alanı*: - Birbirine bakan 10x10 karelerden oluşan bir ızgara - Yatay eksen *harfler A-J, dikey eksen **sayılar 1-10* ile etiketlenmiştir (örneğin: A1, B5, J10). 2. *Gemileri Yerleştirme*: - Oyuncular gemilerini ızgaraya *gizlice* yerleştirir. Klasik gemiler ve boyutları: - *1 Amiral (4 kare)* - *2 Kruvazör (3 kare)* - *3 Muhrip (2 kare)* - *4 Denizaltı (1 kare)* - Gemiler *yatay veya dikey* olarak yerleştirilir, çapraz veya üst üste olamazlar. 3. *Oyun Akışı*: - Oyuncular sırayla bir *koordinat* (örneğin: "C7") seçip ateş ederler. - Rakip, o karede bir gemi olup olmadığını seçecektir. - *"Iska"* - *Verilen hasar* - *Batırılan* seçenekler 4. *Kazanma Koşulu*: - Tüm gemileri batıran ilk oyuncu kazanır! yapay zekaya karşı oyna Seçilen koordinata bir atış yapıldığında, ıskalar o koordinatta suya düşen patlamamış bir füze olarak görünecektir. Hasar verilirse, o koordinatta bir patlama olacaktır. Tamamen batarsa havai fişekler olacak. Top ateşi sesleri de olacak ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Battleship Commander
Initial prompt
amiral battı oyunu
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var GameGrid = Container.expand(function (isPlayerGrid) { var self = Container.call(this); self.isPlayerGrid = isPlayerGrid; self.cells = []; self.ships = []; var gridSize = 8; var cellSize = 60; // Initialize grid cells for (var row = 0; row < gridSize; row++) { self.cells[row] = []; for (var col = 0; col < gridSize; col++) { var cell = new GridCell(row, col, isPlayerGrid); cell.x = col * cellSize; cell.y = row * cellSize; self.cells[row][col] = cell; self.addChild(cell); } } // Draw grid lines for (var i = 0; i <= gridSize; i++) { // Vertical lines var vLine = self.attachAsset('gridLine', { width: 2, height: gridSize * cellSize, x: i * cellSize, y: 0 }); // Horizontal lines var hLine = self.attachAsset('gridLine', { width: gridSize * cellSize, height: 2, x: 0, y: i * cellSize }); } self.placeShip = function (startRow, startCol, length, isHorizontal) { var shipCells = []; // Check if placement is valid for (var i = 0; i < length; i++) { var row = isHorizontal ? startRow : startRow + i; var col = isHorizontal ? startCol + i : startCol; if (row >= gridSize || col >= gridSize || self.cells[row][col].hasShip) { return false; } shipCells.push({ row: row, col: col }); } // Place ship var ship = { cells: shipCells, hits: 0, sunk: false }; for (var j = 0; j < shipCells.length; j++) { var cellPos = shipCells[j]; self.cells[cellPos.row][cellPos.col].placeShip(); } self.ships.push(ship); return true; }; self.checkHit = function (row, col) { var cell = self.cells[row][col]; if (cell.hasShip) { cell.markHit(); // Find which ship was hit for (var i = 0; i < self.ships.length; i++) { var ship = self.ships[i]; for (var j = 0; j < ship.cells.length; j++) { if (ship.cells[j].row === row && ship.cells[j].col === col) { ship.hits++; if (ship.hits === ship.cells.length && !ship.sunk) { ship.sunk = true; LK.getSound('sunk').play(); return 'sunk'; } return 'hit'; } } } } else { cell.markMiss(); return 'miss'; } }; self.allShipsSunk = function () { for (var i = 0; i < self.ships.length; i++) { if (!self.ships[i].sunk) { return false; } } return true; }; return self; }); var GridCell = Container.expand(function (row, col, isPlayerGrid) { var self = Container.call(this); self.row = row; self.col = col; self.isPlayerGrid = isPlayerGrid; self.hasShip = false; self.isHit = false; self.isMiss = false; var cellSize = 60; var waterTile = self.attachAsset('water', { width: cellSize, height: cellSize, x: 0, y: 0 }); var shipGraphic = null; var hitMarker = null; var missMarker = null; self.placeShip = function () { if (!shipGraphic) { shipGraphic = self.attachAsset('ship', { width: cellSize - 4, height: cellSize - 4, x: 2, y: 2 }); } self.hasShip = true; }; self.removeShip = function () { if (shipGraphic) { shipGraphic.destroy(); shipGraphic = null; } self.hasShip = false; }; self.markHit = function () { if (!self.isHit) { hitMarker = self.attachAsset('hit', { anchorX: 0.5, anchorY: 0.5, x: cellSize / 2, y: cellSize / 2 }); self.isHit = true; LK.getSound('hit').play(); } }; self.markMiss = function () { if (!self.isMiss) { missMarker = self.attachAsset('miss', { anchorX: 0.5, anchorY: 0.5, x: cellSize / 2, y: cellSize / 2 }); self.isMiss = true; LK.getSound('miss').play(); } }; self.down = function (x, y, obj) { if (gamePhase === 'placement' && self.isPlayerGrid) { handleShipPlacement(self.row, self.col); } else if (gamePhase === 'battle' && !self.isPlayerGrid && !self.isHit && !self.isMiss) { handlePlayerShot(self.row, self.col); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x001122 }); /**** * Game Code ****/ // Game state var gamePhase = 'placement'; // 'placement', 'battle', 'gameOver' var currentShipIndex = 0; var isHorizontal = true; var playerTurn = true; var aiTargets = []; var aiLastHit = null; var aiHuntMode = false; // Ship sizes to place var shipSizes = [5, 4, 3, 3, 2]; // Create grids var playerGrid = new GameGrid(true); var enemyGrid = new GameGrid(false); // Position grids playerGrid.x = 200; playerGrid.y = 1000; enemyGrid.x = 200; enemyGrid.y = 200; game.addChild(playerGrid); game.addChild(enemyGrid); // UI Elements var statusText = new Text2('Place your ships. Tap to place ship of length ' + shipSizes[0], { size: 40, fill: 0xFFFFFF }); statusText.anchor.set(0.5, 0); LK.gui.top.addChild(statusText); var turnText = new Text2('', { size: 35, fill: 0xFFFF00 }); turnText.anchor.set(0.5, 0); turnText.y = 80; LK.gui.top.addChild(turnText); // Labels for grids var enemyLabel = new Text2('Enemy Waters', { size: 45, fill: 0xFF6666 }); enemyLabel.anchor.set(0.5, 0.5); enemyLabel.x = enemyGrid.x + 240; enemyLabel.y = enemyGrid.y - 50; game.addChild(enemyLabel); var playerLabel = new Text2('Your Fleet', { size: 45, fill: 0x66FF66 }); playerLabel.anchor.set(0.5, 0.5); playerLabel.x = playerGrid.x + 240; playerLabel.y = playerGrid.y - 50; game.addChild(playerLabel); // Rotation button for ship placement var rotateButton = new Text2('Rotate Ship', { size: 40, fill: 0xFFFF00 }); rotateButton.anchor.set(0.5, 0.5); rotateButton.x = 1024; rotateButton.y = 1200; game.addChild(rotateButton); rotateButton.down = function (x, y, obj) { if (gamePhase === 'placement') { isHorizontal = !isHorizontal; updateStatusText(); } }; function updateStatusText() { if (gamePhase === 'placement') { if (currentShipIndex < shipSizes.length) { var orientation = isHorizontal ? 'horizontal' : 'vertical'; statusText.setText('Place ship of length ' + shipSizes[currentShipIndex] + ' (' + orientation + ')'); } } else if (gamePhase === 'battle') { if (playerTurn) { statusText.setText('Your turn - Fire at enemy grid!'); turnText.setText('YOUR TURN'); } else { statusText.setText('Enemy is thinking...'); turnText.setText('ENEMY TURN'); } } } function handleShipPlacement(row, col) { if (currentShipIndex >= shipSizes.length) return; var shipLength = shipSizes[currentShipIndex]; if (playerGrid.placeShip(row, col, shipLength, isHorizontal)) { currentShipIndex++; if (currentShipIndex >= shipSizes.length) { // All ships placed, start AI placement placeAIShips(); gamePhase = 'battle'; rotateButton.visible = false; updateStatusText(); } else { updateStatusText(); } } } function placeAIShips() { var aiShipSizes = [5, 4, 3, 3, 2]; for (var i = 0; i < aiShipSizes.length; i++) { var placed = false; var attempts = 0; while (!placed && attempts < 100) { var row = Math.floor(Math.random() * 8); var col = Math.floor(Math.random() * 8); var horizontal = Math.random() < 0.5; if (enemyGrid.placeShip(row, col, aiShipSizes[i], horizontal)) { placed = true; } attempts++; } } } function handlePlayerShot(row, col) { if (!playerTurn) return; LK.getSound('shoot').play(); var result = enemyGrid.checkHit(row, col); if (result === 'hit' || result === 'sunk') { LK.setScore(LK.getScore() + (result === 'sunk' ? 100 : 50)); if (enemyGrid.allShipsSunk()) { gamePhase = 'gameOver'; statusText.setText('Victory! All enemy ships destroyed!'); turnText.setText('YOU WIN!'); LK.showYouWin(); return; } } playerTurn = false; updateStatusText(); // AI turn after delay LK.setTimeout(function () { aiTurn(); }, 1000); } function aiTurn() { var row, col; var attempts = 0; if (aiHuntMode && aiLastHit) { // Try adjacent cells to last hit var adjacents = [{ row: aiLastHit.row - 1, col: aiLastHit.col }, { row: aiLastHit.row + 1, col: aiLastHit.col }, { row: aiLastHit.row, col: aiLastHit.col - 1 }, { row: aiLastHit.row, col: aiLastHit.col + 1 }]; var validTargets = []; for (var i = 0; i < adjacents.length; i++) { var target = adjacents[i]; if (target.row >= 0 && target.row < 8 && target.col >= 0 && target.col < 8) { var cell = playerGrid.cells[target.row][target.col]; if (!cell.isHit && !cell.isMiss) { validTargets.push(target); } } } if (validTargets.length > 0) { var chosen = validTargets[Math.floor(Math.random() * validTargets.length)]; row = chosen.row; col = chosen.col; } else { aiHuntMode = false; aiLastHit = null; } } if (!aiHuntMode || aiLastHit && attempts === 0) { // Random targeting do { row = Math.floor(Math.random() * 8); col = Math.floor(Math.random() * 8); attempts++; } while ((playerGrid.cells[row][col].isHit || playerGrid.cells[row][col].isMiss) && attempts < 100); } var result = playerGrid.checkHit(row, col); if (result === 'hit' || result === 'sunk') { aiLastHit = { row: row, col: col }; aiHuntMode = true; if (result === 'sunk') { aiHuntMode = false; aiLastHit = null; } if (playerGrid.allShipsSunk()) { gamePhase = 'gameOver'; statusText.setText('Defeat! Your fleet has been destroyed!'); turnText.setText('YOU LOSE!'); LK.showGameOver(); return; } } playerTurn = true; updateStatusText(); } // Initial setup updateStatusText(); game.update = function () { // Game loop updates };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,391 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var GameGrid = Container.expand(function (isPlayerGrid) {
+ var self = Container.call(this);
+ self.isPlayerGrid = isPlayerGrid;
+ self.cells = [];
+ self.ships = [];
+ var gridSize = 8;
+ var cellSize = 60;
+ // Initialize grid cells
+ for (var row = 0; row < gridSize; row++) {
+ self.cells[row] = [];
+ for (var col = 0; col < gridSize; col++) {
+ var cell = new GridCell(row, col, isPlayerGrid);
+ cell.x = col * cellSize;
+ cell.y = row * cellSize;
+ self.cells[row][col] = cell;
+ self.addChild(cell);
+ }
+ }
+ // Draw grid lines
+ for (var i = 0; i <= gridSize; i++) {
+ // Vertical lines
+ var vLine = self.attachAsset('gridLine', {
+ width: 2,
+ height: gridSize * cellSize,
+ x: i * cellSize,
+ y: 0
+ });
+ // Horizontal lines
+ var hLine = self.attachAsset('gridLine', {
+ width: gridSize * cellSize,
+ height: 2,
+ x: 0,
+ y: i * cellSize
+ });
+ }
+ self.placeShip = function (startRow, startCol, length, isHorizontal) {
+ var shipCells = [];
+ // Check if placement is valid
+ for (var i = 0; i < length; i++) {
+ var row = isHorizontal ? startRow : startRow + i;
+ var col = isHorizontal ? startCol + i : startCol;
+ if (row >= gridSize || col >= gridSize || self.cells[row][col].hasShip) {
+ return false;
+ }
+ shipCells.push({
+ row: row,
+ col: col
+ });
+ }
+ // Place ship
+ var ship = {
+ cells: shipCells,
+ hits: 0,
+ sunk: false
+ };
+ for (var j = 0; j < shipCells.length; j++) {
+ var cellPos = shipCells[j];
+ self.cells[cellPos.row][cellPos.col].placeShip();
+ }
+ self.ships.push(ship);
+ return true;
+ };
+ self.checkHit = function (row, col) {
+ var cell = self.cells[row][col];
+ if (cell.hasShip) {
+ cell.markHit();
+ // Find which ship was hit
+ for (var i = 0; i < self.ships.length; i++) {
+ var ship = self.ships[i];
+ for (var j = 0; j < ship.cells.length; j++) {
+ if (ship.cells[j].row === row && ship.cells[j].col === col) {
+ ship.hits++;
+ if (ship.hits === ship.cells.length && !ship.sunk) {
+ ship.sunk = true;
+ LK.getSound('sunk').play();
+ return 'sunk';
+ }
+ return 'hit';
+ }
+ }
+ }
+ } else {
+ cell.markMiss();
+ return 'miss';
+ }
+ };
+ self.allShipsSunk = function () {
+ for (var i = 0; i < self.ships.length; i++) {
+ if (!self.ships[i].sunk) {
+ return false;
+ }
+ }
+ return true;
+ };
+ return self;
+});
+var GridCell = Container.expand(function (row, col, isPlayerGrid) {
+ var self = Container.call(this);
+ self.row = row;
+ self.col = col;
+ self.isPlayerGrid = isPlayerGrid;
+ self.hasShip = false;
+ self.isHit = false;
+ self.isMiss = false;
+ var cellSize = 60;
+ var waterTile = self.attachAsset('water', {
+ width: cellSize,
+ height: cellSize,
+ x: 0,
+ y: 0
+ });
+ var shipGraphic = null;
+ var hitMarker = null;
+ var missMarker = null;
+ self.placeShip = function () {
+ if (!shipGraphic) {
+ shipGraphic = self.attachAsset('ship', {
+ width: cellSize - 4,
+ height: cellSize - 4,
+ x: 2,
+ y: 2
+ });
+ }
+ self.hasShip = true;
+ };
+ self.removeShip = function () {
+ if (shipGraphic) {
+ shipGraphic.destroy();
+ shipGraphic = null;
+ }
+ self.hasShip = false;
+ };
+ self.markHit = function () {
+ if (!self.isHit) {
+ hitMarker = self.attachAsset('hit', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: cellSize / 2,
+ y: cellSize / 2
+ });
+ self.isHit = true;
+ LK.getSound('hit').play();
+ }
+ };
+ self.markMiss = function () {
+ if (!self.isMiss) {
+ missMarker = self.attachAsset('miss', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: cellSize / 2,
+ y: cellSize / 2
+ });
+ self.isMiss = true;
+ LK.getSound('miss').play();
+ }
+ };
+ self.down = function (x, y, obj) {
+ if (gamePhase === 'placement' && self.isPlayerGrid) {
+ handleShipPlacement(self.row, self.col);
+ } else if (gamePhase === 'battle' && !self.isPlayerGrid && !self.isHit && !self.isMiss) {
+ handlePlayerShot(self.row, self.col);
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x001122
+});
+
+/****
+* Game Code
+****/
+// Game state
+var gamePhase = 'placement'; // 'placement', 'battle', 'gameOver'
+var currentShipIndex = 0;
+var isHorizontal = true;
+var playerTurn = true;
+var aiTargets = [];
+var aiLastHit = null;
+var aiHuntMode = false;
+// Ship sizes to place
+var shipSizes = [5, 4, 3, 3, 2];
+// Create grids
+var playerGrid = new GameGrid(true);
+var enemyGrid = new GameGrid(false);
+// Position grids
+playerGrid.x = 200;
+playerGrid.y = 1000;
+enemyGrid.x = 200;
+enemyGrid.y = 200;
+game.addChild(playerGrid);
+game.addChild(enemyGrid);
+// UI Elements
+var statusText = new Text2('Place your ships. Tap to place ship of length ' + shipSizes[0], {
+ size: 40,
+ fill: 0xFFFFFF
+});
+statusText.anchor.set(0.5, 0);
+LK.gui.top.addChild(statusText);
+var turnText = new Text2('', {
+ size: 35,
+ fill: 0xFFFF00
+});
+turnText.anchor.set(0.5, 0);
+turnText.y = 80;
+LK.gui.top.addChild(turnText);
+// Labels for grids
+var enemyLabel = new Text2('Enemy Waters', {
+ size: 45,
+ fill: 0xFF6666
+});
+enemyLabel.anchor.set(0.5, 0.5);
+enemyLabel.x = enemyGrid.x + 240;
+enemyLabel.y = enemyGrid.y - 50;
+game.addChild(enemyLabel);
+var playerLabel = new Text2('Your Fleet', {
+ size: 45,
+ fill: 0x66FF66
+});
+playerLabel.anchor.set(0.5, 0.5);
+playerLabel.x = playerGrid.x + 240;
+playerLabel.y = playerGrid.y - 50;
+game.addChild(playerLabel);
+// Rotation button for ship placement
+var rotateButton = new Text2('Rotate Ship', {
+ size: 40,
+ fill: 0xFFFF00
+});
+rotateButton.anchor.set(0.5, 0.5);
+rotateButton.x = 1024;
+rotateButton.y = 1200;
+game.addChild(rotateButton);
+rotateButton.down = function (x, y, obj) {
+ if (gamePhase === 'placement') {
+ isHorizontal = !isHorizontal;
+ updateStatusText();
+ }
+};
+function updateStatusText() {
+ if (gamePhase === 'placement') {
+ if (currentShipIndex < shipSizes.length) {
+ var orientation = isHorizontal ? 'horizontal' : 'vertical';
+ statusText.setText('Place ship of length ' + shipSizes[currentShipIndex] + ' (' + orientation + ')');
+ }
+ } else if (gamePhase === 'battle') {
+ if (playerTurn) {
+ statusText.setText('Your turn - Fire at enemy grid!');
+ turnText.setText('YOUR TURN');
+ } else {
+ statusText.setText('Enemy is thinking...');
+ turnText.setText('ENEMY TURN');
+ }
+ }
+}
+function handleShipPlacement(row, col) {
+ if (currentShipIndex >= shipSizes.length) return;
+ var shipLength = shipSizes[currentShipIndex];
+ if (playerGrid.placeShip(row, col, shipLength, isHorizontal)) {
+ currentShipIndex++;
+ if (currentShipIndex >= shipSizes.length) {
+ // All ships placed, start AI placement
+ placeAIShips();
+ gamePhase = 'battle';
+ rotateButton.visible = false;
+ updateStatusText();
+ } else {
+ updateStatusText();
+ }
+ }
+}
+function placeAIShips() {
+ var aiShipSizes = [5, 4, 3, 3, 2];
+ for (var i = 0; i < aiShipSizes.length; i++) {
+ var placed = false;
+ var attempts = 0;
+ while (!placed && attempts < 100) {
+ var row = Math.floor(Math.random() * 8);
+ var col = Math.floor(Math.random() * 8);
+ var horizontal = Math.random() < 0.5;
+ if (enemyGrid.placeShip(row, col, aiShipSizes[i], horizontal)) {
+ placed = true;
+ }
+ attempts++;
+ }
+ }
+}
+function handlePlayerShot(row, col) {
+ if (!playerTurn) return;
+ LK.getSound('shoot').play();
+ var result = enemyGrid.checkHit(row, col);
+ if (result === 'hit' || result === 'sunk') {
+ LK.setScore(LK.getScore() + (result === 'sunk' ? 100 : 50));
+ if (enemyGrid.allShipsSunk()) {
+ gamePhase = 'gameOver';
+ statusText.setText('Victory! All enemy ships destroyed!');
+ turnText.setText('YOU WIN!');
+ LK.showYouWin();
+ return;
+ }
+ }
+ playerTurn = false;
+ updateStatusText();
+ // AI turn after delay
+ LK.setTimeout(function () {
+ aiTurn();
+ }, 1000);
+}
+function aiTurn() {
+ var row, col;
+ var attempts = 0;
+ if (aiHuntMode && aiLastHit) {
+ // Try adjacent cells to last hit
+ var adjacents = [{
+ row: aiLastHit.row - 1,
+ col: aiLastHit.col
+ }, {
+ row: aiLastHit.row + 1,
+ col: aiLastHit.col
+ }, {
+ row: aiLastHit.row,
+ col: aiLastHit.col - 1
+ }, {
+ row: aiLastHit.row,
+ col: aiLastHit.col + 1
+ }];
+ var validTargets = [];
+ for (var i = 0; i < adjacents.length; i++) {
+ var target = adjacents[i];
+ if (target.row >= 0 && target.row < 8 && target.col >= 0 && target.col < 8) {
+ var cell = playerGrid.cells[target.row][target.col];
+ if (!cell.isHit && !cell.isMiss) {
+ validTargets.push(target);
+ }
+ }
+ }
+ if (validTargets.length > 0) {
+ var chosen = validTargets[Math.floor(Math.random() * validTargets.length)];
+ row = chosen.row;
+ col = chosen.col;
+ } else {
+ aiHuntMode = false;
+ aiLastHit = null;
+ }
+ }
+ if (!aiHuntMode || aiLastHit && attempts === 0) {
+ // Random targeting
+ do {
+ row = Math.floor(Math.random() * 8);
+ col = Math.floor(Math.random() * 8);
+ attempts++;
+ } while ((playerGrid.cells[row][col].isHit || playerGrid.cells[row][col].isMiss) && attempts < 100);
+ }
+ var result = playerGrid.checkHit(row, col);
+ if (result === 'hit' || result === 'sunk') {
+ aiLastHit = {
+ row: row,
+ col: col
+ };
+ aiHuntMode = true;
+ if (result === 'sunk') {
+ aiHuntMode = false;
+ aiLastHit = null;
+ }
+ if (playerGrid.allShipsSunk()) {
+ gamePhase = 'gameOver';
+ statusText.setText('Defeat! Your fleet has been destroyed!');
+ turnText.setText('YOU LOSE!');
+ LK.showGameOver();
+ return;
+ }
+ }
+ playerTurn = true;
+ updateStatusText();
+}
+// Initial setup
+updateStatusText();
+game.update = function () {
+ // Game loop updates
+};
\ No newline at end of file
sketch tarzında carrier gemisi. In-Game asset. 2d. High contrast. No shadows
sketch tarzında cruıser savas gemısı. In-Game asset. 2d. High contrast. No shadows
skecth tarzında destroyer savas gemisi. In-Game asset. 2d. High contrast. No shadows
suya düşen füze. In-Game asset. 2d. High contrast. No shadows
suya düşen nesne sonrası oluşan dalgacıklar. In-Game asset. 2d. High contrast. No shadows
patlama sonrası kıvılcımlar. In-Game asset. 2d. High contrast. No shadows
aşağı yönde giden füze. In-Game asset. 2d. High contrast. No shadows
denizaltı gemisi torpidosundan ateşleme. In-Game asset. 2d. High contrast. No shadows