С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/56: Рейтинг темы: голосов - 56, средняя оценка - 4.63
 Аватар для Ангедония
4 / 4 / 1
Регистрация: 21.11.2009
Сообщений: 75

Змейка

02.11.2011, 18:15. Показов 11522. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый.очень нужна помощь.есть код игры змейка.надо просто собрать в проект,мне аж самой стыдно,что я не знаю как..
можно в архиве мне скинуть.
MainClass (Click to Hide)
Код:
Java
1
2
3
4
5
6
7
8
9
10
public class MainClass
{
    static Game game;
    
    public static void main(String[] args)
    {
        game = new Game();
        game.run();
    }
}
Snake (Click to Hide)
Код:
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
import java.awt.*;
 
public class Snake extends Component // Змейка
{
    private static final long serialVersionUID = 1L;
 
    List part; // Части(клетки), из которых состоит змейка
    Direction direction; // Направление
    boolean alive; // Жива
    boolean ate; // Сьела яблоко
    RedApple apple;
    
    Snake() // Конструктор
    {
        direction = new Direction();
        direction.state = Direction.RIGHT;// Начальное направление змейки -
                                            // влево
        Point point;
        part = new List();
        point = new Point(3, 6);
        part.add(point);
        point = new Point(4, 6);
        part.add(point);
        point = new Point(5, 6);
        part.add(point);
        point = new Point(6, 6);
        part.add(point);
        point = new Point(7, 6);
        part.add(point);
        alive = true; // Змейка жива
        ate = false; // Пока ничего не съела
    }
 
    public void turnLeft() // Повернуть налево
    {
        direction.changeToLeft();
    }
 
    public void turnRight() // Повернуть направо
    {
        direction.changeToRight();
    }
 
    public void turnUp() // Повернуть вверх
    {
        direction.changeToUp();
    }
 
    public void turnDown() // Повернуть вниз
    {
        direction.changeToDown();
    }
 
    public void step() // Сделать шаг
    {
        if (!ate()) // Если змейка ничего не съела
        {
            part.deleteFirst(); // Стирает хвост
        } // Иначе не стирает, таким образом длина змейки увеличивается на 1
 
        Point point = (Point) part.Last(); // Голова змейки
        Point New;// = new Point(0, 0); // Новая голова
        if (point != null) // Если змейка есть (голова)
        {
            New = new Point(point.x, point.y); // Создать клетку с координатами
                                                // головы
 
            System.out.println("direction = " + direction.state);
 
            switch (direction.state) // Выбрать направление
            {
            case Direction.RIGHT:
                New.x += 1; // Если направо ->
//                System.out.println("right");
                break;
            case Direction.DOWN:
                New.y += 1; // Если вниз \/
//                System.out.println("down");
                break;
            case Direction.LEFT:
                New.x -= 1; // Если влево <-
//                System.out.println("left");
                break;
            case Direction.UP:
                New.y -= 1; // Если вверх /\
//                System.out.println("up");
                break;
            default:
//                System.out.println("-------------");
            }
//            System.out.println("шаг");
            part.add(New); // Новая голова (после шага)
            alive = isAlive(); // Проверить, жива ли змейка
            repaint();
            MainClass.game.repaint();
//            System.out.println(point.x+"+"+point.y);
        }
    }
 
    boolean ate() // Проверяет, сьела ли змея яблоко
    {
            return ate;
    }
 
    boolean isAlive() // Проверяет, жива ли змейка. Т е Не вышла ли она за
                        // границы поля и не съела ли себя
    {
        return alive;
    }
 
    public void paint(Graphics g) // Рисует змейку
    {
        part.toFirst();
        Point point = (Point) part.current();
        point.paint(g, Color.DARK_GRAY);
 
        while (part.hasNext()) {
            part.next();
            point = (Point) part.current();
            point.paint(g, Color.DARK_GRAY);
            g.fillRect(point.x * Point.size, point.y * Point.size, Point.size,
                    Point.size);
        }
    }
 
}
RedApple (Click to Hide)
Код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.util.Random;
 
public class RedApple extends Component{
    public Point location;
    boolean eatable;
    Snake snake;
    RedApple(){
        Random rnd = new Random();
        location = new Point (rnd.nextInt(55)+2, rnd.nextInt(51)+6);
        eatable = false;
    }
    RedApple(int x, int y){
        this.location = new Point(x,y);         
    }
    
       public void paint(Graphics g)  {
           location.paint(g, Color.RED);
//           System.out.println(location.x+"-"+location.y);
       }      
}
Game (Click to Hide)
Код:
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
import java.awt.*;
import java.util.Random;
 
public class Game extends Frame implements Runnable {
    private static final long serialVersionUID = 1L;
 
    Snake snake;
    RedApple apple;
    Border border;
 
    Game() {
        super("SNAKE");
        pack();
        resize(600, 600);
        addMenus();
        snake = new Snake();
        apple = new RedApple();
        border = new Border();
        show();
    }
 
    public void run() {
        while ((snake.alive)) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            snake.step();
            changeLocation();
            death();
            repaint();
            snake.repaint();
        }
    }
 
    void addMenus() {
        MenuBar bar = new MenuBar();
        Menu game = new Menu("Game");
        Menu help = new Menu("Help");
        game.add(new MenuItem("New"));
        game.add(new MenuItem("Quit"));
        help.add(new MenuItem("About"));
        help.add(new MenuItem("Help"));
        bar.add(game);
        bar.add(help);
        setMenuBar(bar);
    }
 
    public void paint(Graphics g) {
        snake.paint(g);
        apple.paint(g);
        border.paint(g);
    }
 
    public void changeLocation() {
        Point point = (Point) snake.part.Last();
        System.out.println(apple.location.x + "-" + apple.location.y);
        System.out.println(point.x + "+" + point.y);
        if ((point.x == apple.location.x) && (point.y == apple.location.y)) {
            Random rnd = new Random();
            apple = new RedApple(rnd.nextInt(55)+2, rnd.nextInt(51)+6);
            snake.ate = true;
        } else {
            snake.ate = false;
        }
    }
    
    public void death(){
        Point point = (Point) snake.part.Last();
        if ((point.x==1)||(point.x==58)||(point.y==5)||(point.y==58)){
            snake.alive=false;
        }
    }
 
    public boolean handleEvent(Event event) {
        if (event.id == Event.WINDOW_DESTROY) {
            System.exit(0);
            return true;
        } else {
            if ((event.id == Event.ACTION_EVENT)
                    && (event.target instanceof MenuItem)) {
                if ("Quit".equals(event.arg)) {
                    System.exit(0);
                    return true;
                }
                return true;
            }
        }
 
        if (event.id == Event.KEY_ACTION) {
            if (event.key == Event.DOWN) {
                snake.turnDown();
                return true;
            }
            if (event.key == Event.UP) {
                snake.turnUp();
                return true;
            }
            if (event.key == Event.LEFT) {
                snake.turnLeft();
                return true;
            }
            if (event.key == Event.RIGHT) {
                snake.turnRight();
                return true;
            }
            if (event.key == Event.ESCAPE) {
                System.exit(0);
                return true;
            }
        }
 
        return false;
    }
}
Point (Click to Hide)
Код:
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
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
 
public class Point extends Rectangle   // Point - клетка
{
   private static final long serialVersionUID = 1L;
  
   public int x;               // Координаты клетки
   public int y;               //
   final static int size = 10;      // Размер клетки в пикселах
  
   Point(int x, int y)            // Конструктор
   {
      this.x = x;
      this.y = y;
   }
  
   public void paint(Graphics g, Color color)   // Рисует клетку
   {
      g.setColor(color);
      g.fillRect(x*size,y*size,size,size);
   }
}
Direction (Click to Hide)
Код:
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
public class Direction                    // Направление
{
    public final static int RIGHT = 0;    //
    public final static int DOWN = 1;    //
    public final static int LEFT = 2;    //
    public final static int UP = 3;        //
    
    public int state;                    // Текущее направление
    
    public Direction()                    // Конструктор, создает произвольное направление
    {
        
    }
    
    public void changeToRight()            // Меняет текущее направление на RIGHT
    {
        if (state != LEFT)
            state = RIGHT;
    }
    
    public void changeToDown()            // Меняет текущее направление на DOWN
    {
        if (state != UP)
            state = DOWN;
    }
    
    public void changeToLeft()            // Меняет текущее направление на LEFT
    {
        if (state != RIGHT)
            state = LEFT;
    }
    
    public void changeToUp()            // Меняет текущее направление на UP
    {
        if (state != DOWN)
            state = UP;
    }
}
List (Click to Hide)
Код:
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
public class List            // Список
{
   private ListNode First;      // Первый элемент
   private ListNode Last;      // Последний элемент
   private ListNode Current;   // Текущий элемент
   private int Size;         // Кол-во элементов в списке
  
   public List()                  // Конструктор
   {
      First   = null;                  // Начальная инициализация
      Last   = null;                  //
      Current   = null;                  //
      Size   = 0;                  //
   }
  
   public class ListNode            // Элемент списка
   {
      ListNode Next;                  // Следующий
      ListNode Prev;                  // Предыдущий
      Object Data;                  // Данные хранимые в этом элементе
      
      public ListNode()               // Конструктор элемента списка
      {
         Next = null;               // Начальная инициализация
         Prev = null;               //
         Data = null;               //
      }
   }
  
   public Object Last()            // Возвращает значение последнего элемента (голова)
   {
      if (Size != 0)                  // Если список не пуст
         return Last.Data;
      else                        // Если список пуст
         return null;
   }
  
   public void deleteFirst()            // Удаляет первый элемент списка (хвост)
   {
      if (First != null)               // Если первый есть (т е если список не пуст)
      {
         First = First.Next;            // Новый первый
         if (First != null)            // Если новый первый не null
            First.Prev = null;         //
         Size--;
      }
   }
  
   public void add(Object data)      // Добавляет в конец списка новый элемент
   {
      if (Size != 0)                  // Если список не пуст
      {
         ListNode node = new ListNode();   // Новый элемент
         node.Data = data;        //заносим объект в текущий элемент
     Current=node;    
     Last.Next=node;        // текщим становится новый элемент
         node.Prev = Last;                //бывший последним элемент считается предыдущим относительно нового узлa            
         Last = node;
                       //
         Size++;                      // Плюс один элемент
      }
      else                        // Если список пуст
      {
         ListNode New = new ListNode();   // Создаем новый элемент
         New.Data = data;            // В него кладем наш квадрат
         Current = New;               // Добавляем элемент в список
         First = New;               //
         Last = New;                  //
         Size ++;
      }
   }
  
   public void next()               // Переход к след-му элементу списка
   {
      if (Current != null)            // Если список не пуст
      {
         if (hasNext())               // Если есть след-й элемент
         {
            Current = Current.Next;      // Переход к след-му
         }
         else                     // Если след-го нет
         {
            System.out.println("----------конец списка------(next)------");
         }
      }
      else                        // Если список пуст
      {
         System.out.println("-------------список пуст-------(next)--------");
      }
   }
  
   public boolean hasNext()         // Проверяет есть ли след-й
                              // Предполагается, что список непустой
   {
      if (Current.Next != null)         // Если есть след-й
      {
         return true;
      }
      else                        // Если нет след-го
      {
         return false;
      }
   }
  
   public void prev()               // Переход к предыдущему элементу списка
   {
      if (Current != null)            // Если список не пуст
      {
         if (Current.Prev != null)      // Если есть пред-й элемент
         {
            Current = Current.Prev;      // Переход к пред-му
         }
         else                     // Если пред-го нет
         {
            System.out.println("-------------начало списка--------(prev)-----------");
         }
      }
      else                        // Если список пуст
      {
         System.out.println("-------------список пуст---------(prev)---------");
      }
   }
  
   public Object current()            // Возвращает значение текущего элемента
   {
      if (Current != null)            // Если список не пуст
      {
         return Current.Data;         // Возвращает квадрат, хранящийся в текущем элементе
      }
      else                        // Если список пуст
      {
         System.out.println("-------------список пуст-------(current)--------");
         return null;               // Возвращает null
      }
   }
  
   public void toFirst()            // Перейти к первому элементу
   {
      if (Size != 0)                  // Если список не пуст
      {
         Current = First;            // Переход к первому
      }
      else                        // Если список пуст
      {
         System.out.println("-----------------список пуст-------(toFirst)--------");
      }
   }
  
   public void toLast()            // Перейти к последнему элементу
   {
      if (Current != null)            // Если список не пуст
      {
         Current = Last;               // Переход к последнему
      }
      else                        // Если список пуст
      {
         System.out.println("-------------список пуст-------(toLast)-----");
      }
   }
  
   public int size()               // Возвращает размер списка
   {
      return Size;
   }
  
}
Border (Click to Hide)
Код:
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
import java.awt.Color;
import java.awt.Graphics;
 
public class Border {
    Point lineOne;
    Point lineTwo;
 
    Border() {
        lineOne = new Point(1, 5);
        lineTwo = new Point(58, 58);
    }
 
    public void paint(Graphics g) {
        for (int i = 1; i < 59; i++) {
            lineOne = new Point (i,5);
            lineOne.paint(g, Color.lightGray);
            lineTwo = new Point (i,58);
            lineTwo.paint(g, Color.lightGray);
        }
        for (int i = 5; i < 59; i++) {
            lineOne = new Point (1,i);
            lineOne.paint(g, Color.lightGray);
            lineTwo = new Point (58,i);
            lineTwo.paint(g, Color.lightGray);
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.11.2011, 18:15
Ответы с готовыми решениями:

Змейка
Здравствуйте! Я пишу змейку, и игра уже практически готова за исключением одного момента: вот код, отвечающий за прорисовку(swing), он...

Игра змейка
Код игры змейки пришлите пожалуйста. Или другой какой-нибудь простой.

Змейка на джаве
Изучаю туториал по змейке. Не понимаю, откуда эти цифры /* * The number of times to update the game per second. */ private...

2
1 / 1 / 0
Регистрация: 15.07.2010
Сообщений: 3
02.11.2011, 20:31
На какой ящик отправить?
1
 Аватар для Ангедония
4 / 4 / 1
Регистрация: 21.11.2009
Сообщений: 75
03.11.2011, 07:15  [ТС]
furazilin@yandex.ru
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.11.2011, 07:15
Помогаю со студенческими работами здесь

Сетевая змейка
Имеется изначальная змейка и сервер. Пытался соединить,но имеются проблемы со входными потоками...Нужна помощь в исправлении ошибки

Змейка, добавить меню
Уже сдал задание, но решил ради интереса сделать меню(Нужно будет в курсовом проекте). Компилируется без ошибок, но после нажатия кнопки...

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

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

Если организовать цикл While - в результате белый экран (игра "змейка")
Пробую создать игру Змейка, уже пару часов у меня проблема - при отрисовке без цикла все нормально, змейка выводиться, при использовании...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru