Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 3

В попытках написать змейку на Java (Snake (video game)

22.10.2016, 01:10. Показов 2514. Ответов 2

Студворк — интернет-сервис помощи студентам
Тестовый вариант, в теории змейка из двух клеток должна "пробегать" вправо. Но на деле же такого не происходит ("хвост" змейки просто пропадает, и на этом всё заканчивается).
Знаю вопрос скорее всего имеет простейший ответ, который найти я, к сожалению, сам на смог, ибо банально просто не могу понять в чём заключается эта самая проблема. Буду крайне признателен если объясните в чём моя ошибка.

Состоит лишь из двух классов (основной, с отрисовкой графики, и небольшой с кодом самой змейки).

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
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
 
public class Window extends JPanel implements ActionListener{
    
    private static final long serialVersionUID = 1L;
    public static final int SPECT = 16;
    public static final int WIDTH = 25;
    public static final int HEIGHT = 25;
    
    Snake snake = new Snake(10, 10, 9, 10);
    
    Timer timer = new Timer( 1000, this);
    
    public Window(){
        timer.start();
    }
 
    public void paint(Graphics graph){ //Метод отрисовывает "поле" и саму змейку.
        graph.setColor(color(184, 184, 184));
        graph.fillRect(0, 0, WIDTH*SPECT, HEIGHT*SPECT);
        
        graph.setColor(color(255, 255, 255));
        for(int x = 0; x < WIDTH*SPECT; x += SPECT){
            graph.drawLine(x, 0, x, HEIGHT*SPECT);
        }
        graph.setColor(color(255, 255, 255));
        for(int y = 0; y < HEIGHT*SPECT; y += SPECT){
            graph.drawLine(0, y, WIDTH*SPECT, y);
        }
        
        graph.setColor(color(0, 0, 0));
        for(int i = 0; i < snake.length; i++){
            graph.fillRoundRect(snake.posX[i]*SPECT + 1, snake.posY[i]*SPECT + 1, SPECT - 1, SPECT - 1, 15, 15);
        }
    }
    
    public Color color(int red, int green, int blue){
        return new Color(red, green, blue);
    }
    
    public static void main(String args[]){
        JFrame window = new JFrame();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setResizable(false);
        window.setSize(WIDTH*SPECT - 41, HEIGHT*SPECT - 35);
        window.setLocationRelativeTo(null);
        window.setVisible(true);
        window.add(new Window());
        
    }
 
    @Override
    public void actionPerformed(ActionEvent e) {
        repaint();
        snake.move();
    }
 
}
Змейка.
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
public class Snake {
 
    public int length = 2;
    public int direction = 0;
    
    public int posX[] = new int[20];
    public int posY[] = new int[20];
    
    public Snake(int x,int y, int x1, int y1){
        posX[0] = x;
        posY[0] = y;
        posX[1] = x1;
        posY[1] = y1;
    }
    
    public void move(){
        for(int i = length; i > 0; i--){
            posX[i] = posX[i-1];
            posY[i] = posY[i-1];
        }
        
    switch(direction){
    case 0: posX[0]++;
    case 1: posY[0]++;
    case 2: posX[0]--;
    case 3: posY[0]--;
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.10.2016, 01:10
Ответы с готовыми решениями:

SNAKE! game over
Здравствуйте, разрабатываю змейку через OpenGL на с++ и в принципе игра работает , но хотелось бы как то сделать что бы если змейка...

Snake game с ООП
привет, пишу змейку на шарпе. погуглив нашел массу примеров на консоле и на функциях. мне нужно сотворить сие дело с использованием...

Пишу змейку на Java
Прошу строго не судить :) C_R0zgvkdtg

2
20 / 23 / 24
Регистрация: 20.10.2016
Сообщений: 45
22.10.2016, 10:06
Почитай получше о том как работает switch.
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
public class Snake {
 
    public int length = 2;
    public int direction = 0;
    
    public int posX[] = new int[20];
    public int posY[] = new int[20];
    
    public Snake(int x,int y, int x1, int y1){
        posX[0] = x;
        posY[0] = y;
        posX[1] = x1;
        posY[1] = y1;
    }
    
    public void move(){
        
        for(int i = length; i > 0; i--){
            posX[i] = posX[i-1];
            posY[i] = posY[i-1];
        }
    
       switch(direction){
        case 0: posX[0]++; break;
        case 1: posY[0]++; break;
        case 2: posX[0]--; break;
        case 3: posY[0]--; break;
        }
    }
}
0
0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 3
22.10.2016, 14:15  [ТС]
... просто слов нет. Какая идиотская ошибка... Даже не ловко как-то Большое спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2016, 14:15
Помогаю со студенческими работами здесь

Написать консольную змейку
Привет ! Хочу написать подобие змейки - только там за мной крипы будут гоняться (но не суть). Не совсем понимаю, как сделать так, чтобы...

Java-Game
Всем доброго времени суток!Хотел у вас спросить: я разрабатываю игру и мне интересно,как переменную количества очков заставить отобразиться...

Пытаюсь написать змейку на ATmega32 на си вывод на 8x8 dot matrix display
Я понимаю в чём ошибка но не могу придумать алгоритм получше.... можно ли как-нибудь избежать вызов этой процедуры или выйти из неё и...

C++ vs. Java = Строим сервер MMO Game
Здравствуйте! Давно вот брожу изучаю проекты эмуляторов под популярные MMORPG (WoW, LA2, Aion). Собственно возникает вопрос: Какой ЯП...

Game server side: Java vs JavaScript
Всем привет. Некоторое время назад начал изучать Java, написал для себя десяток приложений, вполне удовлетворен. Дальше захотелось...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru