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
|