Как создать игру змейка на Java?

Пользователь

от jedidiah.brown , в категории: Java , 2 года назад

Как создать игру змейка на Java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от shayna.buckridge , 2 года назад

@jedidiah.brown 

Чтобы создать игру змейка на Java, вам потребуется следующее:

  1. Установите среду разработки Java, например, Eclipse.
  2. Создайте новый проект Java в Eclipse.
  3. Создайте класс для змейки. Змейка должна состоять из сегментов, каждый из которых описывается координатами (x, y) и направлением движения (вверх, вниз, вправо, влево). Создайте методы для перемещения змейки, изменения направления и добавления новых сегментов.
  4. Создайте класс для еды. Еда должна иметь координаты (x, y) и метод для перемещения ее в случайное место на игровом поле.
  5. Создайте класс игрового поля, который будет отвечать за размеры поля, отрисовку змейки и еды, а также обработку столкновений змейки с самой собой и стенами.
  6. Создайте класс игры, который б

Пользователь

от marlen , год назад

@jedidiah.brown 

Чтобы создать игру змейку на Java, вам понадобятся следующие шаги:

  1. Создайте новый проект в вашей IDE (например, IntelliJ IDEA или Eclipse).
  2. Создайте класс SnakeGame, который будет содержать основную логику игры.
  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
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SnakeGame extends JPanel implements ActionListener {
    // Константы для окна игры и сетки змейки
    private static final int WIDTH = 300;
    private static final int HEIGHT = 300;
    private static final int DOT_SIZE = 10;
    private static final int ALL_DOTS = 900;
    private static final int RAND_POS = 29;

    // Массивы для хранения координат x и y змейки
    private final int[] x = new int[ALL_DOTS];
    private final int[] y = new int[ALL_DOTS];

    private int dots; // Длина змейки
    private int appleX; // Координаты яблока
    private int appleY;

    private Timer timer; // Таймер для обновления экрана
    private boolean inGame = true; // Переменная для проверки, идет ли игра

    // Конструктор
    public SnakeGame() {
        initGame();

        addKeyListener(new KeyboardAdapter());
        setFocusable(true);

        setBackground(Color.black);
        setPreferredSize(new Dimension(WIDTH, HEIGHT));

        timer = new Timer(250, this);
        timer.start();
    }

    // Инициализация начальных значений
    private void initGame() {
        dots = 3; // Задаем начальную длину змейки

        // Задаем начальные координаты для каждого сегмента змейки
        for (int i = 0; i < dots; i++) {
            x[i] = 50 - i * 10;
            y[i] = 50;
        }

        // Генерируем случайные координаты для яблока
        locateApple();
    }

    // Генерация случайных координат для яблока
    private void locateApple() {
        int r = (int) (Math.random() * RAND_POS);
        appleX = r * DOT_SIZE;

        r = (int) (Math.random() * RAND_POS);
        appleY = r * DOT_SIZE;
    }

    // Отрисовка игры
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        if (inGame) {
            // Рисуем яблоко
            g.setColor(Color.red);
            g.fillOval(appleX, appleY, DOT_SIZE, DOT_SIZE);

            // Рисуем змейку
            for (int i = 0; i < dots; i++) {
                if (i == 0) {
                    g.setColor(Color.green);
                } else {
                    g.setColor(Color.white);
                }
                g.fillRect(x[i], y[i], DOT_SIZE, DOT_SIZE);
            }
        } else {
            gameOver(g);
        }
    }

    // Игра закончена
    private void gameOver(Graphics g) {
        String msg = "Game Over";
        Font font = new Font("Helvetica", Font.BOLD, 14);
        FontMetrics metrics = getFontMetrics(font);

        g.setColor(Color.white);
        g.setFont(font);
        g.drawString(msg, (WIDTH - metrics.stringWidth(msg)) / 2, HEIGHT / 2);
    }

    // Обработка событий клавиатуры
    private class KeyboardAdapter extends KeyAdapter {
        @Override
        public void keyPressed(KeyEvent e) {
            int key = e.getKeyCode();

            if ((key == KeyEvent.VK_LEFT) && (!direction.equals("RIGHT"))) {
                direction = "LEFT";
            }

            if ((key == KeyEvent.VK_RIGHT) && (!direction.equals("LEFT"))) {
                direction = "RIGHT";
            }

            if ((key == KeyEvent.VK_UP) && (!direction.equals("DOWN"))) {
                direction = "UP";
            }

            if ((key == KeyEvent.VK_DOWN) && (!direction.equals("UP"))) {
                direction = "DOWN";
            }
        }
    }

    // Обновление экрана
    @Override
    public void actionPerformed(ActionEvent e) {
        if (inGame) {
            move();
            checkApple();
            checkCollision();
        }

        repaint();
    }

    // Перемещение змейки
    private void move() {
        for (int i = dots; i > 0; i--) {
            x[i] = x[i - 1];
            y[i] = y[i - 1];
        }

        if (direction.equals("LEFT")) {
            x[0] -= DOT_SIZE;
        }

        if (direction.equals("RIGHT")) {
            x[0] += DOT_SIZE;
        }

        if (direction.equals("UP")) {
            y[0] -= DOT_SIZE;
        }

        if (direction.equals("DOWN")) {
            y[0] += DOT_SIZE;
        }
    }

    // Проверка, съела ли змейка яблоко
    private void checkApple() {
        if ((x[0] == appleX) && (y[0] == appleY)) {
            dots++;
            locateApple();
        }
    }

    // Проверка столкновения с границами или самой змейкой
    private void checkCollision() {
        for (int i = dots; i > 0; i--) {
            if ((i > 4) && (x[0] == x[i]) && (y[0] == y[i])) {
                inGame = false;
            }
        }

        if (y[0] >= HEIGHT) {
            inGame = false;
        }

        if (y[0] < 0) {
            inGame = false;
        }

        if (x[0] >= WIDTH) {
            inGame = false;
        }

        if (x[0] < 0) {
            inGame = false;
        }

        if (!inGame) {
            timer.stop();
        }
    }
}


  1. Создайте класс Main, который будет содержать метод main и будет являться точкой входа в программу.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import javax.swing.JFrame;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Snake Game");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.add(new SnakeGame());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}


  1. Запустите программу. Теперь у вас должно открыться окно игры "Змейка".


Управление змейкой осуществляется с помощью стрелок на клавиатуре.


Обратите внимание, что код предоставлен в основном для демонстрации, и ещё много работы можно проделать, чтобы сделать игру полноценной.