C++
Пример простой программы «Морской бой» на C++:
#include <iostream> #include <vector> #include <cstdlib> #include <ctime> using namespace std; const int BOARD_SIZE = 5; // Структура, представляющая одну клетку на игровом поле struct Cell { bool isShip; bool isHit; }; // Класс, представляющий игровое поле class Board { private: vector<vector<Cell>> grid; public: Board() { // Инициализация игрового поля grid.resize(BOARD_SIZE, vector<Cell>(BOARD_SIZE, {false, false})); } // Размещение корабля на игровом поле void placeShip(int row, int col) { grid[row][col].isShip = true; } // Проверка, был ли выстрел успешным bool shoot(int row, int col) { if (grid[row][col].isShip && !grid[row][col].isHit) { grid[row][col].isHit = true; return true; // Успешный выстрел } else { return false; // Неудачный выстрел } } // Проверка, были ли все корабли потоплены bool allShipsSunk() const { for (int i = 0; i < BOARD_SIZE; ++i) { for (int j = 0; j < BOARD_SIZE; ++j) { if (grid[i][j].isShip && !grid[i][j].isHit) { return false; } } } return true; } }; int main() { srand(time(0)); // Инициализация генератора случайных чисел Board playerBoard; Board computerBoard; // Расставляем корабли на игровом поле компьютера for (int i = 0; i < 3; ++i) { int row = rand() % BOARD_SIZE; int col = rand() % BOARD_SIZE; computerBoard.placeShip(row, col); } int shots = 0; // Игровой цикл while (!playerBoard.allShipsSunk() && !computerBoard.allShipsSunk()) { int row, col; cout << "Введите координаты выстрела (строка и столбец от 0 до " << BOARD_SIZE - 1 << "): "; cin >> row >> col; // Проверяем выстрел игрока if (computerBoard.shoot(row, col)) { cout << "Попадание!" << endl; } else { cout << "Промах!" << endl; } // Выстрел компьютера int compRow = rand() % BOARD_SIZE; int compCol = rand() % BOARD_SIZE; // Проверяем выстрел компьютера if (playerBoard.shoot(compRow, compCol)) { cout << "Компьютер попал!" << endl; } else { cout << "Компьютер промахнулся!" << endl; } shots++; } // Выводим результат игры if (playerBoard.allShipsSunk()) { cout << "Вы проиграли! Количество выстрелов: " << shots << endl; } else { cout << "Вы выиграли! Количество выстрелов: " << shots << endl; } return 0; }
Это основной каркас программы «Морской бой». Вы можете его дополнить интерфейсом, графическим представлением поля, улучшенной стратегией компьютера и т.д.
C#
using System; namespace BattleshipGame { class Program { const int BOARD_SIZE = 5; static void Main(string[] args) { Random rand = new Random(); bool[,] playerBoard = new bool[BOARD_SIZE, BOARD_SIZE]; bool[,] computerBoard = new bool[BOARD_SIZE, BOARD_SIZE]; // Расставляем корабли на игровом поле компьютера for (int i = 0; i < 3; ++i) { int row = rand.Next(BOARD_SIZE); int col = rand.Next(BOARD_SIZE); computerBoard[row, col] = true; } int shots = 0; // Игровой цикл while (!AllShipsSunk(playerBoard) && !AllShipsSunk(computerBoard)) { int row, col; Console.Write("Введите координаты выстрела (строка и столбец от 0 до " + (BOARD_SIZE - 1) + "): "); string[] input = Console.ReadLine().Split(); row = int.Parse(input[0]); col = int.Parse(input[1]); // Проверяем выстрел игрока if (computerBoard[row, col]) { Console.WriteLine("Попадание!"); } else { Console.WriteLine("Промах!"); } // Выстрел компьютера int compRow = rand.Next(BOARD_SIZE); int compCol = rand.Next(BOARD_SIZE); // Проверяем выстрел компьютера if (playerBoard[compRow, compCol]) { Console.WriteLine("Компьютер попал!"); } else { Console.WriteLine("Компьютер промахнулся!"); } shots++; } // Выводим результат игры if (AllShipsSunk(playerBoard)) { Console.WriteLine("Вы проиграли! Количество выстрелов: " + shots); } else { Console.WriteLine("Вы выиграли! Количество выстрелов: " + shots); } } static bool AllShipsSunk(bool[,] board) { for (int i = 0; i < BOARD_SIZE; ++i) { for (int j = 0; j < BOARD_SIZE; ++j) { if (board[i, j]) { return false; } } } return true; } } }
Python
import random BOARD_SIZE = 5 def create_board(): return [[False] * BOARD_SIZE for _ in range(BOARD_SIZE)] def place_ships(board): for _ in range(3): row = random.randint(0, BOARD_SIZE - 1) col = random.randint(0, BOARD_SIZE - 1) board[row][col] = True def all_ships_sunk(board): for row in board: for cell in row: if cell: return False return True def main(): player_board = create_board() computer_board = create_board() place_ships(computer_board) shots = 0 while not all_ships_sunk(player_board) and not all_ships_sunk(computer_board): print("Ваш ход!") row = int(input("Введите номер строки (0-4): ")) col = int(input("Введите номер столбца (0-4): ")) if computer_board[row][col]: print("Попадание!") else: print("Промах!") comp_row = random.randint(0, BOARD_SIZE - 1) comp_col = random.randint(0, BOARD_SIZE - 1) if player_board[comp_row][comp_col]: print("Компьютер попал!") else: print("Компьютер промахнулся!") shots += 1 if all_ships_sunk(player_board): print("Вы проиграли! Количество выстрелов:", shots) else: print("Вы выиграли! Количество выстрелов:", shots) if __name__ == "__main__": main()
Java
import java.util.Scanner; import java.util.Random; public class BattleshipGame { private static final int BOARD_SIZE = 5; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Random random = new Random(); boolean[][] playerBoard = new boolean[BOARD_SIZE][BOARD_SIZE]; boolean[][] computerBoard = new boolean[BOARD_SIZE][BOARD_SIZE]; placeShips(computerBoard, random); int shots = 0; while (!allShipsSunk(playerBoard) && !allShipsSunk(computerBoard)) { System.out.println("Ваш ход!"); System.out.print("Введите номер строки (0-4): "); int row = scanner.nextInt(); System.out.print("Введите номер столбца (0-4): "); int col = scanner.nextInt(); if (computerBoard[row][col]) { System.out.println("Попадание!"); } else { System.out.println("Промах!"); } int compRow = random.nextInt(BOARD_SIZE); int compCol = random.nextInt(BOARD_SIZE); if (playerBoard[compRow][compCol]) { System.out.println("Компьютер попал!"); } else { System.out.println("Компьютер промахнулся!"); } shots++; } if (allShipsSunk(playerBoard)) { System.out.println("Вы проиграли! Количество выстрелов: " + shots); } else { System.out.println("Вы выиграли! Количество выстрелов: " + shots); } scanner.close(); } private static void placeShips(boolean[][] board, Random random) { for (int i = 0; i < 3; i++) { int row = random.nextInt(BOARD_SIZE); int col = random.nextInt(BOARD_SIZE); board[row][col] = true; } } private static boolean allShipsSunk(boolean[][] board) { for (boolean[] row : board) { for (boolean cell : row) { if (cell) { return false; } } } return true; } }
Pascal
program BattleshipGame; const BOARD_SIZE = 5; type Board = array[1..BOARD_SIZE, 1..BOARD_SIZE] of Boolean; procedure InitializeBoard(var board: Board); var i, j: Integer; begin for i := 1 to BOARD_SIZE do for j := 1 to BOARD_SIZE do board[i, j] := False; end; procedure PlaceShips(var board: Board); var i, row, col: Integer; begin Randomize; for i := 1 to 3 do begin row := Random(BOARD_SIZE) + 1; col := Random(BOARD_SIZE) + 1; board[row, col] := True; end; end; function AllShipsSunk(const board: Board): Boolean; var i, j: Integer; begin for i := 1 to BOARD_SIZE do for j := 1 to BOARD_SIZE do if board[i, j] then begin AllShipsSunk := False; Exit; end; AllShipsSunk := True; end; procedure Main; var playerBoard, computerBoard: Board; row, col, compRow, compCol, shots: Integer; begin InitializeBoard(playerBoard); InitializeBoard(computerBoard); PlaceShips(computerBoard); shots := 0; while not AllShipsSunk(playerBoard) and not AllShipsSunk(computerBoard) do begin WriteLn('Ваш ход!'); Write('Введите номер строки (0-4): '); ReadLn(row); Write('Введите номер столбца (0-4): '); ReadLn(col); if computerBoard[row + 1, col + 1] then WriteLn('Попадание!') else WriteLn('Промах!'); compRow := Random(BOARD_SIZE) + 1; compCol := Random(BOARD_SIZE) + 1; if playerBoard[compRow, compCol] then WriteLn('Компьютер попал!') else WriteLn('Компьютер промахнулся!'); Inc(shots); end; if AllShipsSunk(playerBoard) then WriteLn('Вы проиграли! Количество выстрелов: ', shots) else WriteLn('Вы выиграли! Количество выстрелов: ', shots); end; begin Main; end.
JavaScript
const BOARD_SIZE = 5; function initializeBoard() { const board = []; for (let i = 0; i < BOARD_SIZE; i++) { board.push(new Array(BOARD_SIZE).fill(false)); } return board; } function placeShips(board) { for (let i = 0; i < 3; i++) { const row = Math.floor(Math.random() * BOARD_SIZE); const col = Math.floor(Math.random() * BOARD_SIZE); board[row][col] = true; } } function allShipsSunk(board) { for (let row of board) { for (let cell of row) { if (cell) { return false; } } } return true; } function main() { const playerBoard = initializeBoard(); const computerBoard = initializeBoard(); placeShips(computerBoard); let shots = 0; while (!allShipsSunk(playerBoard) && !allShipsSunk(computerBoard)) { console.log("Ваш ход!"); const row = parseInt(prompt("Введите номер строки (0-" + (BOARD_SIZE - 1) + "):")); const col = parseInt(prompt("Введите номер столбца (0-" + (BOARD_SIZE - 1) + "):")); if (computerBoard[row][col]) { console.log("Попадание!"); } else { console.log("Промах!"); } const compRow = Math.floor(Math.random() * BOARD_SIZE); const compCol = Math.floor(Math.random() * BOARD_SIZE); if (playerBoard[compRow][compCol]) { console.log("Компьютер попал!"); } else { console.log("Компьютер промахнулся!"); } shots++; } if (allShipsSunk(playerBoard)) { console.log("Вы проиграли! Количество выстрелов: " + shots); } else { console.log("Вы выиграли! Количество выстрелов: " + shots); } } main();
PHP
<?php const BOARD_SIZE = 5; function initializeBoard() { $board = []; for ($i = 0; $i < BOARD_SIZE; $i++) { $board[] = array_fill(0, BOARD_SIZE, false); } return $board; } function placeShips(&$board) { for ($i = 0; $i < 3; $i++) { $row = rand(0, BOARD_SIZE - 1); $col = rand(0, BOARD_SIZE - 1); $board[$row][$col] = true; } } function allShipsSunk($board) { foreach ($board as $row) { foreach ($row as $cell) { if ($cell) { return false; } } } return true; } function main() { $playerBoard = initializeBoard(); $computerBoard = initializeBoard(); placeShips($computerBoard); $shots = 0; while (!allShipsSunk($playerBoard) && !allShipsSunk($computerBoard)) { echo "Ваш ход!\n"; $row = (int) readline("Введите номер строки (0-" . (BOARD_SIZE - 1) . "): "); $col = (int) readline("Введите номер столбца (0-" . (BOARD_SIZE - 1) . "): "); if ($computerBoard[$row][$col]) { echo "Попадание!\n"; } else { echo "Промах!\n"; } $compRow = rand(0, BOARD_SIZE - 1); $compCol = rand(0, BOARD_SIZE - 1); if ($playerBoard[$compRow][$compCol]) { echo "Компьютер попал!\n"; } else { echo "Компьютер промахнулся!\n"; } $shots++; } if (allShipsSunk($playerBoard)) { echo "Вы проиграли! Количество выстрелов: $shots\n"; } else { echo "Вы выиграли! Количество выстрелов: $shots\n"; } } main(); ?>
Давайте поможем друг другу! Если вы нашли ошибку или хотите предложить лучшее решение, пожалуйста, напишите об этом в комментариях.