Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- package battleship;
- public class BattleShip implements IBattleShip {
- // размер поля
- static final int F_SIZE = 10;
- // поле игрока (данные игрока)
- int[][] p = new int[F_SIZE][F_SIZE];
- // поле компьютера (данные компьютера)
- int[][] c = new int[F_SIZE][F_SIZE];
- // -1 - нет игры
- // 0 - игра запущена
- // 1 - игрок выиграл
- // 2 - выиграл компьютер
- int gameStatus = -1;
- // логическая переменная - кто ходит в данный момент
- boolean computerStep;
- public static void main(String[] args) {
- // TODO code application logic here
- new Okno();
- }
- @Override
- public void start() {
- //
- System.out.println("BattleShip.START!!!");
- gameStatus = 0;
- computerStep = false;
- // очистить массивы c, p - заполнить их значением 0
- ArrayUtil.fillArr(p, 0);
- ArrayUtil.fillArr(c, 0);
- //
- System.out.println("PRINT PLAYER:");
- ArrayUtil.printArr(p);
- //установка кораблей игрока и компьютера
- //1.1)
- makePlayerShips();
- //1.2)
- makeComputerShips();
- // вывод состояния игровых полей
- System.out.println("Состояние игрового поля игрока:");
- ArrayUtil.printArr(p);
- System.out.println("Состояние игрового поля компьютера:");
- ArrayUtil.printArr(c);
- }
- // создание и расстановка кораблей игрока
- public void makePlayerShips() {
- makeShips(p);
- }
- // создание и расстановка кораблей компьютера
- public void makeComputerShips() {
- makeShips(c);
- }
- // устанавливаем корабли для массива
- static void makeShips(int[][] arr) {
- // создаем 1 4-х палубный корабль
- makeShip(arr, 4);
- // создаем 2 3-х палубных корабль
- for (int i = 0; i < 2; i++) {
- makeShip(arr, 3);
- }
- // создаем 3 2-х палубных корабль
- for (int i = 0; i < 3; i++) {
- makeShip(arr, 2);
- }
- // создаем 4 1-х палубных корабль
- for (int i = 0; i < 4; i++) {
- makeShip(arr, 1);
- }
- }
- // устанавливаем корабли для массива
- // numPalub - количество палуб у корабля
- static void makeShip(int[][] arr, int numPalub) {
- //
- System.out.println("makeShip:" + numPalub);
- if (numPalub == 1) {
- // получаем два случайных числа - координаты ячейки игрового поля
- int i, j;
- // получить 2 случ числа(i,j) и вывести на экран (0<=i<=9,0<=j<=9)
- do {
- i = getRandomCell();
- j = getRandomCell();
- System.out.println("makeShip.i=" + i);
- System.out.println("makeShip.j=" + j);
- }while(arr[i][j] != 0);
- // заполняем массив соотв значением (numPalub)
- arr[i][j] = numPalub;
- } else {
- }
- }
- // метод позволяет случайным образом получить индекс ячейки в интервале от 0 9
- public static int getRandomCell() {
- double val = Math.random() * 10.0;
- return (int) val;
- }
- // util methods
- static void setOkr(int[][] mas, int i, int j, int val) {
- if (testMasPoz(i, j) && (mas[i][j] == 0)) {
- setMasValue(mas, i, j, val);
- }
- }
- //
- static boolean testMasPoz(int i, int j) {
- return (i >= 0) && (i <= 9) && (j >= 0) && (j <= 9);
- }
- //
- static void setMasValue(int[][] mas, int i, int j, int val) {
- if (testMasPoz(i, j)) {
- mas[i][j] = val;
- }
- }
- //окружаем ячейку значением val
- static void okrBegin(int[][] mas, int i, int j, int val) {
- setOkr(mas, i - 1, j - 1, val);
- setOkr(mas, i - 1, j, val);
- setOkr(mas, i - 1, j + 1, val);
- setOkr(mas, i, j + 1, val);
- setOkr(mas, i + 1, j + 1, val);
- setOkr(mas, i + 1, j, val);
- setOkr(mas, i + 1, j - 1, val);
- setOkr(mas, i, j - 1, val);
- }
- @Override
- public void shot(int i, int j) {
- }
- @Override
- public boolean gameStarted() {
- return gameStatus == 0;
- }
- @Override
- public boolean computerStep() {
- return computerStep;
- }
- @Override
- public boolean playerWin() {
- return gameStatus == 1;
- }
- @Override
- public boolean computerWin() {
- return gameStatus == 2;
- }
- @Override
- public int[][] player() {
- return p;
- }
- @Override
- public int[][] computer() {
- return c;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement