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

Змейка

02.11.2011, 18:15. Показов 11553. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru