Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
isalex678
1

Почти готовый морской бой (нужна критика кода)

06.10.2011, 16:04. Показов 3027. Ответов 4
Метки нет (Все метки)

Морской бой
1. код разделён на два пакета logic и swing
2. правильно ли я манипулирую данными: получаю, передаю, изменяю. ?
3. не работает пока ИИ (класс Robot) и завершение игры

Почти готовый морской бой (нужна критика кода)


архив одним фалом: SeaBattle.zip

жду критики во всех отношениях
правильно организовал MVC. итп...

=== ЛОГИКА ===
ElementStates.java
Java
1
2
3
4
5
package ru.semikov.sea.logic;
 
public enum ElementStates {
    enEmpty, enWater, enBorder, enWell, enInjured, enKilled, enMissed
}

Element.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package ru.semikov.sea.logic;
 
public class Element {
    public ElementStates state;
    public Ship ship;
    public boolean shuted;
    public int x, y;
    
    
    public Element(int x, int y) {
        this.state=ElementStates.enWater;
        this.shuted = false;
        this.x = x;
        this.y = y;
    }
}

ShipStates.java
Java
1
2
3
4
5
package ru.semikov.sea.logic;
 
public enum ShipStates {
    enWell, enInjured, enKilled
}

Ship.java
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
package ru.semikov.sea.logic;
 
import java.util.ArrayList;
import java.util.Random;
 
 
public class Ship {
    public int x, y;
    private int dx, dy;
    public int size;
    public int health;
    public ShipStates state;
    public FieldShip field;
    public ArrayList<Element> elements;
    
    /**
     * создание коробля
     * @param size - количество палуб
     */
    public Ship(FieldShip field, int size) {
        this.size = size;
        this.health = size;
        this.field = field;
        this.state = ShipStates.enWell;
        
        do {
            this.GetPlace();
        } while (!this.CheckPlace());
 
        this.elements = new ArrayList<Element>();
        this.SetShip();
    }
 
    /**
     * Генерирует случайное положение корабля и его направление
     */
    private void GetPlace() {
        Random rand = new Random();
        this.x = rand.nextInt(10);
        this.y = rand.nextInt(10);
        this.dx = 0;
        this.dy = 0;
        if (rand.nextInt(2) == 1) {
            this.dx = 1;
        } else {
            this.dy = 1;
        }
    }
    
    /**
     * Функция обхода корабля и его окружения
     * 
     * @return
     */
    private boolean ByPass(TrigerShip tp) {
        int i, m, n;
        
        // корабль
        for(i = 0; i < size; i++) {
            m = y+i*dy;
            n = x+i*dx;
            if (tp.Ship(m,n) == false) {
                return false;
            }
        }
        // площадка сверху и снизу корабля
        for(i=0; i < size; i++) {
            m = y+i*dy-dx;
            n = x+i*dx-dy;
            if (tp.Border(m, n) == false) {
                return false;
            }
            m = y+i*dy+dx;
            n = x+i*dx+dy;
            if (tp.Border(m, n) == false) {
                return false;
            }
        }
        // площадка слева и справа корабля
        for(i = -1; i < 2; i++) {
            m = y+i*dx-dy;
            n = x+i*dy-dx;
            if (tp.Border(m, n) == false) {
                return false;
            }
            m = y+i*dx+(dy*size);
            n = x+i*dy+(dx*size);
            if (tp.Border(m, n) == false) {
                return false;
            }
        }
        return true;
    }
 
    /**
     * Проверка корректности нахождения корабля на поле
     * @return
     */
    private boolean CheckPlace() {
        return ByPass(new TrigerShipCheck(this));
    }
 
    /**
     * Установка на поле корабля и его окружения 
     */
    private void SetShip() {
        ByPass(new TrigerShipSet(this));
    }
}

TrigerShip.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
package ru.semikov.sea.logic;
 
public abstract class TrigerShip {
    public FieldShip field;
    
    public TrigerShip(Ship ship) {
        this.field = ship.field;
    }
    
    abstract public boolean Ship(int m, int n);
    abstract public boolean Border(int m, int n);
}

TrigerShipCheck.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package ru.semikov.sea.logic;
 
public class TrigerShipCheck extends TrigerShip {
 
    public TrigerShipCheck(Ship ship) {
        super(ship);
    }
 
    @Override
    public boolean Ship(int m, int n) {
        ElementStates state = field.GetElement(m, n);
        return (state == ElementStates.enWater);
    }
 
    @Override
    public boolean Border(int m, int n) {
        ElementStates state = field.GetElement(m, n);
        return (state == ElementStates.enBorder) || 
                (state == ElementStates.enWater) || 
                    (state == ElementStates.enEmpty);
    }
}

TrigerShipSet.java
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
package ru.semikov.sea.logic;
 
public class TrigerShipSet extends TrigerShip {
    
    private Ship ship;
    
    public TrigerShipSet(Ship ship) {
        super(ship);
        this.ship = ship;
    }
    
    @Override
    public boolean Ship(int m, int n) {
        field.SetElement(m, n, ElementStates.enWell);
        ship.elements.add(field.elements[m][n]);
        field.elements[m][n].ship = ship;
        return true;
    }
    
    @Override
    public boolean Border(int m, int n) {
        field.SetElement(m, n, ElementStates.enBorder);
        return true;
    }
}

FieldShip.java
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
package ru.semikov.sea.logic;
 
import java.util.ArrayList;
 
public class FieldShip {
    public Element[][] elements;
    public ArrayList<Ship> ships;
 
    /**
     * создание поля с кораблями
     */
    public FieldShip() {
        // заполняем поле элементами воды
        elements = new Element[10][10]; 
        for(int j=0; j<10; j++) {
            for(int i=0; i<10; i++) {
                elements[i][j]=new Element(i, j);
            }
        }
        this.PutShip();
    }
 
    /**
     * Заполняем поле водой и расставляем корабли
     */
    public void PutShip() {
 
        // заполняем поле водой
        for(int j=0; j<10; j++) {
            for(int i=0; i<10; i++) {
                Element element = elements[i][j];
                element.state = ElementStates.enWater;
                element.shuted = false;
            }
        }
        
        // заполняем поле короблями
        ships = new ArrayList<Ship>(); 
        for(int i=4; i>0; i--) {
            for(int j=(5-i); j>0; j--) {
                Ship ship=new Ship(this,i);
                ships.add(ship);
            }
        }
        
        // удаляем окружение коробля
        for(int j=0; j<10; j++) {
            for(int i=0; i<10; i++) {
                Element element = elements[i][j];
                if (element.state == ElementStates.enBorder) {
                    element.state = ElementStates.enWater;
                }
            }
        }
        
    }
    
    /**
     * Сделать выстрел
     * @param x
     * @param y
     * @return
     * Возвращает результат выстрела
     */
    public boolean doShot(int x, int y) {
        boolean shot = false;
        
        ElementStates state = this.GetElement(x, y);
        elements[x][y].shuted = true;
        if (state == ElementStates.enWell) {
            shot = true;
            Ship ship = elements[x][y].ship; 
            if (ship.health != 0) {
                ship.health--;
                if (ship.health == 0) {
                    ship.state = ShipStates.enKilled;
                    for(Element e : ship.elements) {
                        e.state = ElementStates.enKilled;
                    }
                } else {
                    ship.state = ShipStates.enInjured;
                    elements[x][y].state = ElementStates.enInjured;
                }
            }
        } else {
            if ( (state == ElementStates.enBorder) || 
                        (state == ElementStates.enWater)) {
                this.SetElement(x, y, ElementStates.enMissed);
            }
        }
        return shot;
    }
    
    /**
     * Проверка координат в пределах поля 
     * @param x
     * @param y
     * @return - boolean
     */
    public boolean isBound(int x, int y) {
        return !( (x<0) || (x>9) || (y<0) || (y>9) );
    }
    
    /**
     * Получить по координатам тип элемента 
     * 
     * @param x
     * @param y
     * @return
     */
    public ElementStates GetElement(int x, int y) {
        if (isBound(x,y)) {
            return elements[x][y].state;
        } else {
            return ElementStates.enEmpty;
        }
    }
    
    /**
     * Установить по координатам тип элемента
     * @param x
     * @param y
     * @param state
     */
    public boolean SetElement(int x, int y, ElementStates state) {
        if (isBound(x,y)) {
            elements[x][y].state = state;
        }
        return true;
    }
    
    /**
     * отрисовка поля
     */
    public void Draw() {
        for(int j=0; j<10; j++) {
            for(int i=0; i<10; i++) {
                System.out.print(elements[i][j].toString());
            }
            System.out.println();
        }
    }
    
}

Robot.java
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
package ru.semikov.sea.logic;
 
import java.util.ArrayList;
import java.util.Random;
 
/**
 * Исскуственный интелект  
 */
public class Robot {
 
    public FieldShip field;
    public int x, y;
    Random rand;
    
    /**
     * Создание робота для выполнения хода
     * создаётся для определённого поля  
     */
    public Robot(FieldShip field) {
        this.field = field;
        this.rand = new Random();
    }
    
    
    /**
     * Попытка сделать выстрел
     * @return
     */
    public boolean tryShot() {
        ArrayList<Element> list = new ArrayList<Element>();
        
        for (int j = 0; j < 10; j++) {
            for (int i = 0; i < 10; i++) {
                Element e = field.elements[i][j];
                if (!e.shuted) { 
                    list.add(e);
                }
            }
        }
        Element e = list.get(rand.nextInt(list.size()));
        return field.doShot(e.x, e.y);
    }
    
    /**
     * сделать ход
     */
    public boolean move() {
        boolean finded = false;
        // ищём раненный элемент корабля
        first: for (int j = 0; j < 10; j++) {
            for (int i = 0; i < 10; i++) {
                Element element = field.elements[i][j];
                if (element.state == ElementStates.enInjured) {
                    // нашли раненный элемент корабля
                    finded = true;
                    x = i;
                    y = j;
                    break first;
                }
            }
        }
/*      
        if (finded) {
            //TODO добавить здесь анализатор
            System.out.printf("finded> %s,%s\n", x, y);
            
            ArrayList<Element> list = new ArrayList<Element>();
            
            // пробуем стрелять вокруг раненого корабля
            // выбрал случайную позицию
            for(int j = 0; j < 2; j++) {
                int a = x;
                int b = y + j*2-1;
                if ( (b < 0) || (b>9) ) {
                    continue;
                }
                if (!field.elements[a][b].shuted) {
                    list.add(field.elements[a][b]);
                    System.out.printf("> %s,%s\n", a, b);
                }
            }
            for(int i = 0; i < 2; i++) {
                int a = x + i*2-1;
                int b = y;
                if ( (a < 0) || (a>9) ) {
                    continue;
                }
                if (!field.elements[a][b].shuted) {
                    list.add(field.elements[a][b]);
                    System.out.printf("> %s,%s\n", a, b);
                }
            }
            Element e = list.get(rand.nextInt(list.size()));
            return field.doShot(e.x, e.y);
        }
*/
        return tryShot();
    }
    
    /**
     * Получить координуту X
     * @return
     */
    public int getX() {
        return this.x;
    }
 
    /**
     * Получить координуту Y
     * @return
     */
    public int getY() {
        return this.y;
    }
    
}


=== ОТОБРАЖЕНИЕ ===
ISubscriber.java
Java
1
2
3
4
5
package ru.semikov.sea.swing;
 
public interface ISubscriber {
    public void update();
}

FrameGameLauncher.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package ru.semikov.sea.swing;
 
import javax.swing.UIManager;
 
public class FrameGameLauncher {
    
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
        } catch (Throwable e) {
            e.printStackTrace();
        }
        GameModel model = new GameModel();
        GameView view = new GameView(model);
        view.setVisible(true);      
    }
 
}

GameModel.java
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
package ru.semikov.sea.swing;
 
import java.util.ArrayList;
import java.util.Iterator;
 
import ru.semikov.sea.logic.FieldShip;
import ru.semikov.sea.logic.Robot;
 
/**
 * Представление главного окна
 */
public class GameModel {
    private ArrayList<ISubscriber> listeners = new ArrayList<ISubscriber>();
    public FieldShip playerFiledA;
    public FieldShip playerFiledB;
    public Robot robot;
    public int currentPlayer;
 
    /**
     * создание модели основной формы
     */
    public GameModel() {
        this.currentPlayer = 0;
        playerFiledA = new FieldShip();
        playerFiledB = new FieldShip();
        robot = new Robot(playerFiledA);
    }
 
    /**
     * Расставление кораблей заново 
     */
    public void newGame() {
        playerFiledA.PutShip();
        playerFiledB.PutShip();
        updateSubscribers();
    }
 
    /**
     * Выстрел по текущему игроку
     */
    public void doShotByOpponent(int x, int y) {
        // если ходит локальный игрок
        if (currentPlayer == 0) {
            // если промахнулись
            if (playerFiledB.doShot(x, y) == false) {
                currentPlayer = 1;
            }
        }
        
        // если ходит противник
        if (currentPlayer ==1) {
            while (robot.move());
            currentPlayer = 0;
        }
        updateSubscribers();
    }
    
    /**
     * регистрация элементов, которые будут обновлять при перерисовки данных на форме
     */
    public void register(ISubscriber o) {
        listeners.add(o);
        o.update();
    }
    
    /**
     * разрегистрация элеметов отображения
     */
    public void unRegister(ISubscriber o) {
        listeners.remove(o);
    }
    
    /**
     * перерисовка данных в представлении
     */
    public void updateSubscribers() {
        Iterator<ISubscriber> i = listeners.iterator();
        while(i.hasNext()) {
            ISubscriber o = (ISubscriber)i.next();
            o.update();
        }
    }
 
}

GameView.java
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
package ru.semikov.sea.swing;
 
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
 
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
 
public class GameView extends JFrame {
    private static final long serialVersionUID = 1L;
 
    private GameModel model;
    private GameController controller;
    
    private JMenuItem mntmNewGame;
    private JMenuItem mntmExit;
    private JMenuItem mntmAbout;
    private PanelFieldA panelPlayerA;
    private PanelFieldB panelPlayerB;
    private ScoreField panelScore;
    
    /**
     * Создание представления главной формы
     * @param model - модель главной формы
     */
    public GameView(GameModel model) {
        this.model = model;
        buildUI();
        this.model.register(panelPlayerA);
        this.model.register(panelPlayerB);
        this.model.register(panelScore);
        this.controller=new GameController(this, model);
        attachController();
    }
 
    /**
     * обновляем данные на форме
     */
    public void update() {
        panelPlayerA.repaint();
        panelPlayerB.repaint();
        panelScore.repaint();
        System.out.println("view update");
    }
 
    /**
     * добавление слушателей формы и направляем их на контроллер 
     */
    public void attachController() {
        mntmAbout.addActionListener(controller);
        mntmNewGame.addActionListener(controller);
        mntmExit.addActionListener(controller);
        panelPlayerB.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent arg0) {
                controller.mousePressed(arg0);
            }
        });
    }
 
    /**
     * построение интерфейса пользователя
     */
    private void buildUI() {
        this.setTitle("SeaBattle");
        this.setResizable(false);
        this.setBounds(400, 300, 483, 228);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.getContentPane().setLayout(null);
        
        panelPlayerA = new PanelFieldA(model);
        panelPlayerA.setBounds(20, 31, 151, 151);
        this.getContentPane().add(panelPlayerA);
        
        panelPlayerB = new PanelFieldB(model);
        panelPlayerB.setBounds(190, 31, 151, 151);
        this.getContentPane().add(panelPlayerB);
        
        panelScore = new ScoreField(model);
        
        panelScore.setBounds(370, 31, 90, 151);
        panelScore.setBackground(new Color(225, 225, 255));
        this.getContentPane().add(panelScore);
        
        JMenuBar menuBar = new JMenuBar();
        menuBar.setBounds(0, 0, 477, 21);
        this.getContentPane().add(menuBar);
        
        JMenu mnGame = new JMenu("Game");
        menuBar.add(mnGame);
        
        mntmNewGame = new JMenuItem("New game");
        mnGame.add(mntmNewGame);
        
        JMenuItem mntmProperties = new JMenuItem("Properties");
        mnGame.add(mntmProperties);
 
        mntmExit = new JMenuItem("Exit");
        mnGame.add(mntmExit);
        
        JMenu mnHelp = new JMenu("Help");
        menuBar.add(mnHelp);
        
        mntmAbout = new JMenuItem("About");
        mnHelp.add(mntmAbout);
    }
 
 
}

PanelField.java
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
package ru.semikov.sea.swing;
 
import java.awt.Graphics;
import javax.swing.JPanel;
 
abstract public class PanelField extends JPanel implements ISubscriber {
    private static final long serialVersionUID = 1L;
    public GameModel model;
 
    public PanelField(GameModel model) {
        this.model = model;
    }
 
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        // рисуем решётку
        for(int i = 0; i < 11; i++) {
            g.drawLine(i*15, 0, i*15,150);
            g.drawLine(0,i*15, 150, i*15);
        }
        
        // рисуем элементы
        for(int j = 0; j < 10; j++) {
            for(int i = 0; i < 10; i++) {
                paintElement(g, i, j);
            }
        }
    }
 
    /**
     * рисование элементов кораблей
     */
    protected void paintElement(Graphics g, int i, int j) {
    }
 
    @Override
    public void update() {
        this.repaint();
    }
    
}

PanelFieldA.java
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
package ru.semikov.sea.swing;
 
import java.awt.Color;
import java.awt.Graphics;
import ru.semikov.sea.logic.*;
 
public class PanelFieldA extends PanelField {
    private static final long serialVersionUID = 553977695177508456L;
 
    public PanelFieldA(GameModel model) {
        super(model);
    }
 
    private Color getColorByStateElement(ElementStates state) {
        switch (state) {
        case enBorder:
            return new Color(215, 215, 255);
        case enWater:
            return new Color(225, 225, 255);
        case enWell:
            return Color.green;
        case enInjured:
            return Color.red;
        case enKilled:
            return Color.gray;
        case enMissed:
            return Color.black;
        }
        return Color.blue;
    }
    
    
    @Override
    protected void paintElement(Graphics g, int i, int j) {
        ElementStates state = model.playerFiledA.GetElement(i, j);
        g.setColor(getColorByStateElement(state));
        if (state == ElementStates.enMissed) {
            g.fillRect(i*15+6, j*15+6, 4, 4);
        } else {
            g.fillRect(i*15+1, j*15+1, 14, 14);
        }
    }
    
}

PanelFieldB.java
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
package ru.semikov.sea.swing;
 
 
import java.awt.Color;
import java.awt.Graphics;
import ru.semikov.sea.logic.*;
 
public class PanelFieldB extends PanelField {
    private static final long serialVersionUID = -1770790832677981438L;
 
    public PanelFieldB(GameModel model) {
        super(model);
    }
 
    private Color getColorByStateElement(ElementStates state) {
        switch (state) {
        case enBorder:
            return new Color(225, 225, 255);
        case enWater:
            return new Color(225, 225, 255);
        case enWell:
            return new Color(225, 225, 255);
        case enInjured:
            return Color.red;
        case enKilled:
            return Color.gray;
        case enMissed:
            return Color.black;
        }
        
        return Color.blue;
        
    }
    
    @Override
    protected void paintElement(Graphics g, int i, int j) {
        ElementStates state = model.playerFiledB.GetElement(i, j);
        g.setColor(getColorByStateElement(state));
        
        if (state == ElementStates.enMissed) {
            g.fillRect(i*15+6, j*15+6, 4, 4);
        } else {
            g.fillRect(i*15+1, j*15+1, 14, 14);
        }
    }
 
}

ScoreField.java
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
package ru.semikov.sea.swing;
 
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
import ru.semikov.sea.logic.*;
 
public class ScoreField extends JPanel implements ISubscriber {
    private static final long serialVersionUID = 1L;
    private GameModel model;
    private int ships;
 
    public ScoreField(GameModel model) {
        this.model = model;
    }
    
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
 
        int[] m = new int[4];
        for(int i = 0; i < 0; i++) {
            m[i] = 0;
        }
        
        ships = 0;
        for(Ship ship : model.playerFiledB.ships) {
            if (ship.state != ShipStates.enKilled) {
                m[ship.size-1] ++;
                ships++;
            }
        }
        
        for(int i = 0; i < 4; i++) {
            for(int j = 0; j < (i+1); j++) {
                g.setColor(Color.gray);
                g.fillRect(j*15+10, i*15+5, 13, 13);
            }
            g.setColor(Color.black);
            g.drawString(String.valueOf(m[i]), 75, i*15+16);
        }
        
        String st = "Alive: ".concat(String.valueOf(ships));
        g.drawString(st, 25, 100);
    }
 
    @Override
    public void update() {
        this.repaint();
    }
 
}



извините за полный код.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2011, 16:04
Ответы с готовыми решениями:

Нужна написать Морской бой на джаве
Нужно написать игру Морской бой.Код должен быть прост, с комментариями. Все требования написаны на...

Морской бой
Здравствуйте. Я новичок в програмировании, в целях изучения решил создать примитивный &quot;Морской...

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

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

4
isalex678
09.11.2011, 23:05 2
выложил полную версию на github

https://github.com/shishka/SeaBattle

кому интересно может подправить / исправить меня.
0 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 1
22.11.2015, 00:41 3
Прошу прощения за возможно глупый вопрос,но я новичок в Java. Но какими программами можно открыть этот проект?
0
1 / 1 / 3
Регистрация: 19.02.2015
Сообщений: 66
22.11.2015, 02:38 4
CyberDima, eclipse , IntelliJ IDEA ....
0
941 / 685 / 229
Регистрация: 28.04.2013
Сообщений: 1,924
22.11.2015, 12:09 5
CyberDima, Git, GitHub, bitbucket - краткие инструкции для чайника
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2015, 12:09

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.