Программа «Морской бой»

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();

?>
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Давайте поможем друг другу! Если вы нашли ошибку или хотите предложить лучшее решение, пожалуйста, напишите об этом в комментариях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *