Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
5 / 5 / 1
Регистрация: 27.05.2015
Сообщений: 230
1

Морской бой

15.11.2016, 14:42. Показов 877. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Это программа про Морской бой. class Game главный класс. Не нравится компилятору 10 строчка или что?
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class Game {
 
    public static void main(String[] agrs) {
        PlayerManagerInterface playerManager = new ComputerPlayerManager();
 
        while (true) {
            Player currentPlayer = playerManager.getCurrentPlayer();
            Board enemyBoard = currentPlayer.getEnemyBoard();
            enemyBoard.printBoard();
 
            Shot shot = doValidShot(currentPlayer, enemyBoard);
 
            Board goalShot = playerManager.getNotCurrentPlayer().getMyBoard();
            String resultSymbol = goalShot.resultShot(shot);
 
            if (!resultSymbol.equals("")) {
                System.out.println(resultSymbol);
 
                if (enemyBoard.pobeda()) {
                    System.out.println("Victory for Player with "+currentPlayer.getSymbol()+"!");
                    enemyBoard.printBoard();
                    break;
                }
            }
            else playerManager.switchCurrentPlayer();
        }
    }
 
    private static Shot doValidShot(Player currentPlayer,
                                    Board enemyBoard) {
        Shot shot = currentPlayer.doShot();
        while(!enemyBoard.shotValid(shot)) {
            System.out.println("Error shot, repeat!");
            shot = currentPlayer.doShot();
        }
        return shot;
    }
 
}

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class PlayerManager implements PlayerManagerInterface {
 
    private Player player1;
    private Player player2;
    private Player currentPlayer;
 
 
    public PlayerManager() {
        player1 = new Player(Board.ship1);
        player2 = new Player(Board.ship2);
        currentPlayer = player1;
    }
 
    public Player getCurrentPlayer() {
        return currentPlayer;
    }
 
    public Player getNotCurrentPlayer() {
        if(currentPlayer == player1) {
            return player2;
        }
        return player1;
    }
 
    public void switchCurrentPlayer() {
        if(currentPlayer == player1) {
            currentPlayer = player2;
        }
        else currentPlayer = player1;
    }
 
}

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.util.Scanner;
 
 
public class Player {
    private String symbol;
    private Board myBoard;
    private Board enemyBoard;
 
    public Player(String symbol) {
        this.symbol = symbol;
        this.myBoard = new Board();
        this.enemyBoard = new Board();
 
        myBoard.placeShips(symbol);
        enemyBoard.placeShips();
    }
 
    public String getSymbol() {
        return symbol;
    }
 
    public Board getMyBoard() {
        return myBoard;
    }
 
    public Board getEnemyBoard() {
        return enemyBoard;
    }
 
    public Shot doShot() {
        Scanner in = new Scanner(System.in);
 
        int nextX, nextY;
 
        System.out.println("Ведите координаты x, y Вашего выстрела:");
 
        while (true) {
               System.out.print("x=");
               nextX = in.nextInt();
               if ((nextX >= 0) && (nextX <10)) break;
         }
 
        while (true) {
               System.out.print("y=");
               nextY = in.nextInt();
               if ((nextY >= 0) && (nextY <10)) break;
         }
        System.out.println();
 
        return new Shot(nextX, nextY, this);
    }
}

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
public class Ship {
    private int firstX, firstY, numberDeck;
    private String direction, state;
 
    public Ship(int numberDeck) {
        this.firstX = 0;
        this.firstY = 0;
        this.direction = "";
        this.numberDeck = numberDeck;
        this.state = "living";
    }
 
    public Ship(int firstX, int firstY, int numberDeck, String direction) {
        this.firstX = firstX;
        this.firstY = firstY;
        this.direction = direction;
        this.numberDeck = numberDeck;
        this.state = "living";
    }
 
    public String getDirection() {
        return direction;
    }
 
    public String getState() {
        return state;
    }
 
    public int getNumberDeck() {
        return numberDeck;
    }
 
     public String changeState(Shot nextShot, Board shotBoard) {
        String resultShot = "";
        int killedDeck = 0;
 
        int shotX = nextShot.getX();
        int shotY = nextShot.getY();
 
        for(int i = 0; i <numberDeck; i++ ) {
            if (direction.equals(">"))
                if((shotX == firstX) && (shotY == (firstY + i)))
                    shotBoard.applyShot(shotX, shotY, shotBoard.killed);
 
            if (direction.equals("v"))
                if((shotX == firstY) && (shotY == (firstX + i)))
                    shotBoard.applyShot(shotX, shotY, shotBoard.killed);
        }
 
        for(int i = 0; i <numberDeck; i++ ) {
            if (direction.equals(">")) {
                if(shotBoard.stateDeck(firstX, firstY + i).equals(shotBoard.killed))
                   killedDeck = killedDeck +1;
            }
 
            if (direction.equals("v")) {
                if(shotBoard.stateDeck(firstX + 1, firstY).equals(shotBoard.killed))
                   killedDeck = killedDeck +1;
            }
 
            if (killedDeck == numberDeck) {
                state = "killed";
                resultShot = state;
            } else if(killedDeck > 0) {
                   state = "injured";
                   resultShot = state;
              }
        }
        return resultShot;
     }
}

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Shot {
    private int x, y;
    private String symbol;
    private Player player;
 
    public Shot(int x, int y, Player player) {
        this.x = x;
        this.y = y;
        this.player = player;
        this.symbol = player.getSymbol();
    }
 
    public int getX() {
        return x;
    }
 
    public int getY() {
        return y;
    }
 
    public String getSymbol() {
        return symbol;
    }
}

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
import java.util.*;
 
 
public class Board {
    public static final String empty = ".";
    public static final String killed = "X";
    public static final String slip = "#";
    public static final String ship1 = "O";
    public static final String ship2 = "U";
    private int field_length = 10;
    private String[][] fields;
    private List<Ship> shipArray;
 
 
    public Board() {
        fields = new String[field_length][field_length];
        shipArray = new LinkedList <Ship> ();
        clearFields();
    }
 
    private void clearFields() {
        for (int i = 0; i < field_length; i++) {
            for (int j = 0; j < field_length; j++) {
                fields[i][j] = empty;
            }
        }
    }
 
    public void printBoard() {
        for (int i = 0; i < field_length; i++) {
            for (int j = 0; j < field_length; j++) {
                System.out.print(fields[i][j]+' ');
            }
            System.out.println();
        }
    }
 
    public void placeShips(String symbol) {
        Scanner in = new Scanner(System.in);
 
        int shipX, shipY, shipNumberDeck;
        String shipDirection = "";
 
        for (int i = 0; i < 10;) {
            DecStrategy decStrategy = shipNumberDeckMap.get(i);
            shipNumberDeck = decStrategy.getDecNumber();
            System.out.println("Вводите корабль из " + decStrategy + "-х клеток:");
 
            if (i < 6) System.out.println("Вводите координаты x и y начальной клетки корабля и направление > или v остальных клеток:");
            else System.out.println("Вводите координаты x и y клетки корабля:");
 
            shipX = enterValidXCoordinate(in);
            shipY = enterValidYCoordinate(in, shipX);
            System.out.println();
 
            shipDirection = enterDirection(in, shipDirection, i);
 
            if (shipValidPlace(shipX, shipY, shipDirection, shipNumberDeck)) {
                i = createShip(symbol, shipX, shipY, shipNumberDeck, shipDirection, i);
            }
        }
    }
 
    private int createShip(String symbol, int shipX, int shipY, int shipNumberDeck, String shipDirection, int i) {
        Ship ship = new Ship(shipX, shipY, shipNumberDeck, shipDirection);
 
        shipArray.add(ship);
 
        shipDraw(shipX, shipY, shipDirection, shipNumberDeck, symbol);
 
        printBoard();
 
        i++;
        return i;
    }
 
    private String enterDirection(Scanner in, String shipDirection, int i) {
        if (i < 6) {
            while (true) {
                System.out.print("направление=");
                shipDirection = in.nextLine();
                if (shipDirection.equals(">") || shipDirection.equals("v")) break;
            }
        }
        return shipDirection;
    }
 
    private int enterValidYCoordinate(Scanner in, int shipX) {
        int shipY;
        while (true) {
            System.out.print("y=");
            shipY = in.nextInt();
            if ((shipX >= 0) && (shipX <10)) break;
        }
        return shipY;
    }
 
    private int enterValidXCoordinate(Scanner in) {
        int shipX;
        while (true) {
            System.out.print("x=");
            shipX = in.nextInt();
 
            if ((shipX >= 0) && (shipX <10)) break;
        }
        return shipX;
    }
 
 
    private static interface DecStrategy {
        int getDecNumber();
    }
 
    private static class Dec3Strategy implements DecStrategy {
        @Override
        public int getDecNumber() {
            return 3;
        }
    }
 
    private static class Dec2Strategy implements DecStrategy {
        @Override
        public int getDecNumber() {
            return 2;
        }
    }
    private static class Dec1Strategy implements DecStrategy {
        @Override
        public int getDecNumber() {
            return 1;
        }
    }
 
    private static Map<Integer, DecStrategy> shipNumberDeckMap;
    static {
        shipNumberDeckMap = new HashMap<Integer, DecStrategy>();
 
        shipNumberDeckMap.put(1, new Dec3Strategy());
        shipNumberDeckMap.put(2, new Dec3Strategy());
        shipNumberDeckMap.put(3, new Dec2Strategy());
    }
 
    public void placeShips() {
        int shipNumberDeck;
 
        for (int i = 0; i < 10;) {
            DecStrategy decStrategy = shipNumberDeckMap.get(i);
            shipNumberDeck = decStrategy.getDecNumber();
 
            Ship ship = new Ship(shipNumberDeck);
 
            shipArray.add(ship);
 
            i++;
        }
    }
 
    private boolean shipValidPlace(int shipX, int shipY, String shipDirection, int shipNumberDeck) {
        if (!fields[shipX][shipY].equals(".")) return false;
        else {
            for (int i = 1; i < shipNumberDeck; i++) {
                if (shipDirection.equals(">")) shipX = shipX +1;
                else if (shipDirection.equals("v")) shipY = shipY +1;
 
                if (shipX > 9) return false;
                else if (shipY>9) return false;
                else if (!fields[shipX][shipY].equals(".")) return false;
            }
        }
        return true;
    }
 
    private void shipDraw(int shipX, int shipY, String shipDirection, int shipNumberDeck, String symbol) {
        fields[shipX][shipY] = symbol;
 
        for (int i = 1; i < shipNumberDeck; i++) {
            if (shipDirection.equals(">")) shipX = shipX +1;
            else if (shipDirection.equals("v")) shipY = shipY +1;
 
            fields[shipX][shipY] = symbol;
        }
    }
 
    public boolean pobeda() {
        for(Ship ship : shipArray) {
            String shipState = ship.getState();
 
            if (!shipState.equals("killed")) return false;
        }
        return true;
    }
 
    public boolean shotValid(Shot nextShot) {
        int shotX, shotY;
 
        shotX = nextShot.getX();
        shotY = nextShot.getY();
 
        if (fields[shotX][shotY].equals(killed) || fields[shotX][shotY].equals(slip)) return false;
        return true;
    }
 
    public String resultShot(Shot nextShot) {
        String stateShot = "";
 
        for(Ship ship : shipArray) {
            stateShot = ship.changeState(nextShot, this);
            if (!stateShot.equals("")) return stateShot;
        }
        return stateShot;
    }
 
    public void applyShot(int shotX, int shotY, String resultSymbol) {
        fields[shotX][shotY] = resultSymbol;
    }
 
    public String stateDeck(int shotX, int shotY) {
        return fields[shotX][shotY];
    }
}

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ComputerPlayerManager implements PlayerManagerInterface{
    @Override
    public Player getCurrentPlayer() {
        return null;  //To change body of implemented methods use File | Settings | File Templates.
    }
 
    @Override
    public Player getNotCurrentPlayer() {
        return null;  //To change body of implemented methods use File | Settings | File Templates.
    }
 
    @Override
    public void switchCurrentPlayer() {
        //To change body of implemented methods use File | Settings | File Templates.
    }
}

Кликните здесь для просмотра всего текста
JSON
1
2
3
4
5
6
7
8
9
public interface PlayerManagerInterface {
 
    Player getCurrentPlayer();
 
    Player getNotCurrentPlayer();
 
    void switchCurrentPlayer();
 
}

Скрин ошибки
Миниатюры
Морской бой  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2016, 14:42
Ответы с готовыми решениями:

Морской бой
Всем привет! Могли бы Вы мне помочь, суть вопроса в следующем: Нужно частично реализовать игру...

Морской бой
Здравствуйте! Могли бы подсказать, пожалуйста! Пишу морской бой и возникла проблема, проверки...

Морской бой
Привет всем, Читаю книгу Сьерра и Бейтса, уже на 150-ой где то странице они вбамбурили консольную...

Игра морской бой
Почему у меня не получается создать поле с рандомно расположенными кораблями? Задумка была такова,...

1
59 / 59 / 20
Регистрация: 21.03.2013
Сообщений: 186
15.11.2016, 15:18 2
Ошибка в 10 строке класса Game. NullPointerException.
В 10 строке вы в какой-то метод передаете вместо объекта null. Импорты вы не включили в исходник, поэтому какая из строчек десятая - сами посчитайте. И посмотрите в дебаггере, что туда передается и почему этот объект равен null.
1
15.11.2016, 15:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2016, 15:18
Помогаю со студенческими работами здесь

Морской бой UTF8 смещение
Всем добра, пишу морской бой, хочу побаловаться с консолью пустые клетки вывожу квадратами, но вот...

Примитивнейшая игра морской бой
public class SimpleDotComGame { public static void main(String args) throws IOException { ...

Игра через сервер в морской бой
Игра по сети в «Морской бой». Игроки играют в игру, передавая координаты через сервер.

Разработка/Морской бой/Сравнение данных в многомерных массивах
Добрый день. Во время создания морского боя (игрок против игрока) столкнулся с тем, что не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru