powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / кривая змейка
21 сообщений из 21, страница 1 из 1
кривая змейка
    #37626050
9ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
9ik
Гость
вот писал небольшую игрушку типа "змейка", но злой WTK 2.5.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.
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.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayble;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Image;
import java.io.IOException;
private class Snake1 extends MIlet
{
	
  private Display display;
  public void destroyApp(boolean unconditional){notifyDestroyed();}
	public void pauseApp(){}
	 public void startApp()
	{
		Snake snk=new Snake();
		display=Display.getDisplay(this);
		display.setCurrent(snk);
	}

public class Snake extends Canvas
{
	private int HEAD=0;
	private int TAIL=1;
	private int BODY=2;
	private int ACLOCKWISE_TURN=3;
	private int CLOCKWISE_TURN=4;
	
	private int UP=0;
	private int LEFT=1;
	private int RIGHT=2;
	private int DOWN=3;
	private int direction;
	private Image[] images;
	private int imageSize;
	

private class SnakePart extends Object
{
	private int x;
	private int y;
	private int part;
	private int dir;
	
	public SnakePart(int _x, int _y, int _part, int _dir)
	{
		x=_x;
		y=_y;
		part=_part;
		dir=_dir;
		
		private int getPart(){return part;}
		private int getDir(){return dir;}
		private int getX(){return x;}
		private int getY(){return y;}
		private void setPartDir(int _part, int _dir)
		{
			part=_part;
		  if(_dir!=0) dir=_dir;
	  }
	}
	
	private Vector snake;
	private int width;
	private int height;
	private int xHead;
	private int yHead;
	private boolean gameOverFlag=true;
	
	public Snake()
	{
		super();
		images=new Image[20];
		try
		{
			images[0]=Image.createImage("/HeadUp.png");
			images[1]=Image.createImage("/HeadLeft.png");
			images[2]=Image.createImage("/HeadRight.png");
			images[3]=Image.createImage("/HeadDown.png");
			
			images[4]=Image.createImage("/TailUp.png");
			images[5]=Image.createImage("/TailLeft.png");
			images[6]=Image.createImage("/TailRight.png");
			images[7]=Image.createImage("/TailDown.png");
			
			images[8]=Image.createImage("/BodyUp.png");
			images[9]=Image.createImage("/BodyLeft.png");
			images[10]=images[8];
			images[11]=images[9];
			
			images[12]=Image.createImage("/TurnDownLeft.png");
			images[13]=Image.createImage("/TurnUpLeft.png");
			images[14]=Image.createImage("/TurnDownRight.png");
			images[15]=Image.createImage("/TurnUpRight.png");
			
			images[16]=images[14];
			images[17]=images[12];
			images[18]=images[15];
			images[19]=images[13];
		}
		catch (IOEception ioe) {}
		imageSize=images[0].getWidth();
		snake= new Vector();
		width=getWidth();
		height=getHeight();
		xHead=((width/2)/imageSize)*imageSize;
		yHead=((height/2)/imageSize)*imageSize;
		
		SnakePart partS=new SnakePart(xHead,yHead,HEAD,UP);
		snake.addElement(partS);
		partS=new SnakePart(xHead,yHead+imageSize,BODY,UP);
		snake.addElement(partS);
		partS=new SnakePart(xHead,yHead+2*imageSize,TAIL,UP);
		snake.addElement(partS);
		direction=UP;
		gameOverFlag=false;
	}
	
	public void paint(Graphics g)
	{
		g.setColor(0xFFFFFF);
		g.fillRect(0,0,width,height);
		g.setColor(0x000000);
		g.drawRect(1,1,width-3,height-3);
		int snakeLen=snake.size();
		if(gameOverFlag)
		{
			g.drawString("GAME OVER",width/2,height/2-10,g.HCENTER|g.TOP);
			String score=new String("YOUR SCORE: "+snakeLen);
			g.drawString(score,wigth/2,height/2+10,g.HCENTER|g.TOP);
			return;
		}
		else
		{
		 for(int i=0;i<snakeLen;i++)
		 {
		  g.drawImage(images[4*((SnakePart)snake.elementAt(i)).getPart()+((SnakePart)snake.elementAt(i)).getDir()],((SnakePart)snake.elementAt(i)).getX(),((SnakePart)snake.elementAt(i)).getY(),g.HCENTER|g.VCENTER);
		 }
	  }
  }
  
  public void keyPressed(int keyCode)
  {
  	if(!gameOverFlag)
  	{
  		switch(keyCode)
  		{
  			case KEY_NUM2: checkMove(xHead,yHead-imageSize);moveUp();break;
  			case KEY_NUM4: checkMove(xHead-imageSize,yHead);moveLeft();break;
  			case KEY_NUM6: checkMove(xHead+imageSize,yHead);moveRight();break;
  			case KEY_NUM8: checkMove(xHead,yHead+imageSize);moveDown();break;
  		}
  		repaint();
  	}
  public void checkMove(int xH,int yH)
  {
  	for(int i=3;i<snake.size()-1;i++)
  	{
  		if(xH==((SnakePart)(snake.elementAt(i))).getX() && yH==((SnakePart)(snake.elementAt(i))).getY())
  		 gameOverFlag=true;
  	}
  }
  
  private void moveLeft()
  {
  	if(direction!=RIGHT)
  	{
  		xHead-=imageSize;
  		if(xHead<4){gameOverFlag=true;return;}
  		SnakePart head=(SnakePart)(snake.firstElement());
  		if(direction==UP) head.setPartDir(ACLOCKWISE_TURN,LEFT);
  		 else
  		  {
  		  	if(direction==DOWN)head.setPartDir(CLOCKWISE_TURN,LEFT);
  		  	else
  		  	 head.setPartDir(BODY,LEFT);
  		  }
  		  SnakePart sPart=new SnakePart(xHead,yHead,HEAD,LEFT);
  		  snake.insertElementAt(sPart,0);
  		  snake.removeElement(snake.lastElement());
  		  ((SnakePart)snake.lastElement()).setPartDir(TAIL,-1);
  		  direction=LEFT;
  	}
  }
  
  private void moveRight()
  {
  	if(direction!=LEFT)
  	{
  		xHead+=imageSize;
  		if(xHead>width-3){gameOverFlag=true;return;}
  		SnakePart head=(SnakePart)(snake.firstElement());
  		if(direction==UP) head.setPartDir(CLOCKWISE_TURN,RIGHT);
  		 else
  		  {
  		  	if(direction==DOWN)head.setPartDir(ACLOCKWISE_TURN,RIGHT);
  		  	else
  		  	 head.setPartDir(BODY,RIGHT);
  		  }
  		  SnakePart sPart=new SnakePart(xHead,yHead,HEAD,LEFT);
  		  snake.insertElementAt(sPart,0);
  		  snake.removeElement(snake.lastElement());
  		  ((SnakePart)snake.lastElement()).setPartDir(TAIL,-1);
  		  direction=RIGHT;
  	}
  }
  
  private void moveUp()
  {
  	if(direction!=DOWN)
  	{
  		yHead-=imageSize;
  		if(yHead<4){gameOverFlag=true;return;}
  		SnakePart head=(SnakePart)(snake.firstElement());
  		if(direction==RIGHT) head.setPartDir(ACLOCKWISE_TURN,UP);
  		 else
  		  {
  		  	if(direction==LEFT)head.setPartDir(CLOCKWISE_TURN,UP);
  		  	else
  		  	 head.setPartDir(BODY,UP);
  		  }
  		  SnakePart sPart=new SnakePart(xHead,yHead,HEAD,LEFT);
  		  snake.insertElementAt(sPart,0);
  		  snake.removeElement(snake.lastElement());
  		  ((SnakePart)snake.lastElement()).setPartDir(TAIL,-1);
  		  direction=UP;
  	}
  }
  
  private void moveDown()
  {
  	if(direction!=UP)
  	{
  		yHead+=imageSize;
  		if(yHead<4){gameOverFlag=true;return;}
  		SnakePart head=(SnakePart)(snake.firstElement());
  		if(direction==RIGHT) head.setPartDir(CLOCKWISE_TURN,DOWN);
  		 else
  		  {
  		  	if(direction==LEFT)head.setPartDir(ACLOCKWISE_TURN,DOWN);
  		  	else
  		  	 head.setPartDir(BODY,DOWN);
  		  }
  		  SnakePart sPart=new SnakePart(xHead,yHead,HEAD,LEFT);
  		  snake.insertElementAt(sPart,0);
  		  snake.removeElement(snake.lastElement());
  		  ((SnakePart)snake.lastElement()).setPartDir(TAIL,-1);
  		  direction=DOWN;
  	}
  }
 }



вот что говорит WTK:
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:51: error: illegal start of expression
private int getPart(){return part;};
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:51: error: ';' expected
private int getPart(){return part;};
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:52: error: illegal start of expression
private int getDir(){return dir;}
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:52: error: ';' expected
private int getDir(){return dir;}
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:53: error: illegal start of expression
private int getX(){return x;}
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:53: error: ';' expected
private int getX(){return x;}
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:54: error: illegal start of expression
private int getY(){return y;}
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:54: error: ';' expected
private int getY(){return y;}
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:55: error: illegal start of expression
private void setPartDir(int _part, int _dir)
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:55: error: illegal start of expression
private void setPartDir(int _part, int _dir)
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:55: error: ';' expected
private void setPartDir(int _part, int _dir)
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:55: error: <identifier> expected
private void setPartDir(int _part, int _dir)
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:55: error: not a statement
private void setPartDir(int _part, int _dir)
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:55: error: ';' expected
private void setPartDir(int _part, int _dir)
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:69: error: invalid method declaration; return type required
public Snake()
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:154: error: illegal start of expression
public void checkMove(int xH,int yH)
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:154: error: illegal start of expression
public void checkMove(int xH,int yH)
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:154: error: ';' expected
public void checkMove(int xH,int yH)
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:154: error: <identifier> expected
public void checkMove(int xH,int yH)
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:154: error: not a statement
public void checkMove(int xH,int yH)
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:154: error: ';' expected
public void checkMove(int xH,int yH)
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:163: error: illegal start of expression
private void moveLeft()
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:163: error: illegal start of expression
private void moveLeft()
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:163: error: ';' expected
private void moveLeft()
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:185: error: illegal start of expression
private void moveRight()
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:185: error: illegal start of expression
private void moveRight()
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:185: error: ';' expected
private void moveRight()
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:207: error: illegal start of expression
private void moveUp()
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:207: error: illegal start of expression
private void moveUp()
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:207: error: ';' expected
private void moveUp()
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:229: error: illegal start of expression
private void moveDown()
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:229: error: illegal start of expression
private void moveDown()
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:229: error: ';' expected
private void moveDown()
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:250: error: reached end of file while parsing
}
^
C:\Users\Acer\j2mewtk\2.5.2\apps\Snake1\src\Snake1.java:260: error: reached end of file while parsing

^


Что за ошибка "error: ';' expected
private int getPart(){return part;};" ????
...
Рейтинг: 0 / 0
кривая змейка
    #37626099
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
9ik ,

Код: java
1.
2.
3.
4.
5.
6.
7.
public SnakePart(int _x, int _y, int _part, int _dir)
{
    x=_x;
    y=_y;
    part=_part;
    dir=_dir;
} 
...
Рейтинг: 0 / 0
кривая змейка
    #37626226
9ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
9ik
Гость
Ruslan.Isbarov,

хорошо, со скобками я немного исправил, но что за ошибка error: illegal start of expression
private int getPart(){return part;}
и


error: ';' expected
private int getPart(){return part;}
...
Рейтинг: 0 / 0
кривая змейка
    #37626243
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
9ik , ну а если еще раз как следует присмотреться, ничего странного не замечаете в приведенном ниже фрагменте кода?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public SnakePart(int _x, int _y, int _part, int _dir)
	{
		x=_x;
		y=_y;
		part=_part;
		dir=_dir;
		
		private int getPart(){return part;}
		private int getDir(){return dir;}
		private int getX(){return x;}
		private int getY(){return y;}
		private void setPartDir(int _part, int _dir)
		{
			part=_part;
		  if(_dir!=0) dir=_dir;
	  }
	}
...
Рейтинг: 0 / 0
кривая змейка
    #37626466
9ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
9ik
Гость
Ruslan.Isbarov,

да вроде нормально все...извините, если что не так, просто я только начинаю разбираться в ООП
...
Рейтинг: 0 / 0
кривая змейка
    #37626481
Miha_S7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
9ik,

расскажите, что вы хотели, чтобы этот код делал и почему написали именно так
...
Рейтинг: 0 / 0
кривая змейка
    #37626482
Miha_S7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я про тот кусок, который привёл Ruslan.Isbarov
...
Рейтинг: 0 / 0
кривая змейка
    #37626491
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
9ikда вроде нормально всеметоды getPart, getDir, ... не могут находиться в конструкторе. впрочем, и в других методах тоже )
...
Рейтинг: 0 / 0
кривая змейка
    #37626507
9ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
9ik
Гость
Miha_S79ik,

расскажите, что вы хотели, чтобы этот код делал и почему написали именно так

Здесь у меня каждая часть змеи будет представлена объектом класса SnakePart, который будет содержать тип части, координаты и направление движения. Ну и по правилам хорошего тона программирования работу с внутренними полями нового класса организовал через дополнительные методы.
...
Рейтинг: 0 / 0
кривая змейка
    #37626543
Miha_S7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
9ik,

вы, если пока не особо ориентируетесь, лучше не увлекайтесь вложенными классами. Сделайте отдельные файлы для классов. Сразу станет понятней
...
Рейтинг: 0 / 0
кривая змейка
    #37626556
9ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
9ik
Гость
Miha_S7,

и каким образом это сделать? и еще, вот что эта ошибка от меня хочет? error: illegal start of expression
public void checkMove(int xH,int yH)
...
Рейтинг: 0 / 0
кривая змейка
    #37626573
Miha_S7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
9ik,

у вас во многих местах незакрывающиеся блоки
...
Рейтинг: 0 / 0
кривая змейка
    #37626584
9ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
9ik
Гость
Miha_S7,
странно, я вроде проверял, со скобками не должно быть ошибок..
...
Рейтинг: 0 / 0
кривая змейка
    #37626615
Miha_S7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
9ik,

J2ME не имею, поэтому не компилил. Сами пробуйте
...
Рейтинг: 0 / 0
кривая змейка
    #37626666
9ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
9ik
Гость
Miha_S7,

спасибо большое. но теперь он стал почему-то ругаться на вектор error: cannot find symbol
private Vector snake;
...
Рейтинг: 0 / 0
кривая змейка
    #37626679
Miha_S7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
кривая змейка
    #37626696
9ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
9ik
Гость
Miha_S7,

к сожалению, здесь все на английском, просто здесь скорее всего описание вектора идет вне класса, расширяющего Object
...
Рейтинг: 0 / 0
кривая змейка
    #37626698
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
9ikздесь все на английскомв гугле: java пакеты
...
Рейтинг: 0 / 0
кривая змейка
    #37626884
9ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
9ik
Гость
grasoff.net,

с пакетами я пока буду разбираться постепенно, но вот почему же на меня ругается с ветором, мне не понятно
вот код:
Код: 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.
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.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import java.io.IOException;

private class Snake1 extends MIDlet {
    
    private Display display;
  
    public void destroyApp(boolean unconditional){
        notifyDestroyed();
    }
    public void pauseApp(){
    
    }
    public void startApp() {
        Snake snk=new Snake();
        display=Display.getDisplay(this);
        display.setCurrent(snk);
    }

    public class Snake extends Canvas {
        private int HEAD=0;
        private int TAIL=1;
        private int BODY=2;
        private int ACLOCKWISE_TURN=3;
        private int CLOCKWISE_TURN=4;
        
        private int UP=0;
        private int LEFT=1;
        private int RIGHT=2;
        private int DOWN=3;
        private int direction;
        private Image[] images;
        private int imageSize;
    

        private class SnakePart extends Object {
            private int x;
            private int y;
            private int part;
            private int dir;
        
            public SnakePart(int _x, int _y, int _part, int _dir) {
                x    = _x;
                y    = _y;
                part = _part;
                dir  = _dir;
            }
            
            private int getPart(){
                return part;
            }
            private int getDir(){
                return dir;
            }
            private int getX(){
                return x;
            }
            private int getY(){
                return y;
            }
            private void setPartDir(int _part, int _dir) {
                part=_part;
                if(_dir!=0) 
                    dir=_dir;
            }
        }
        
        private Vector snake;
        private int width;
        private int height;
        private int xHead;
        private int yHead;
        private boolean gameOverFlag=true;
        
        public Snake() {
            super();
            images=new Image[20];
            try
            {
                images[0]=Image.createImage("/HeadUp.png");
                images[1]=Image.createImage("/HeadLeft.png");
                images[2]=Image.createImage("/HeadRight.png");
                images[3]=Image.createImage("/HeadDown.png");
                
                images[4]=Image.createImage("/TailUp.png");
                images[5]=Image.createImage("/TailLeft.png");
                images[6]=Image.createImage("/TailRight.png");
                images[7]=Image.createImage("/TailDown.png");
                
                images[8]=Image.createImage("/BodyUp.png");
                images[9]=Image.createImage("/BodyLeft.png");
                images[10]=images[8];
                images[11]=images[9];
                
                images[12]=Image.createImage("/TurnDownLeft.png");
                images[13]=Image.createImage("/TurnUpLeft.png");
                images[14]=Image.createImage("/TurnDownRight.png");
                images[15]=Image.createImage("/TurnUpRight.png");
                
                images[16]=images[14];
                images[17]=images[12];
                images[18]=images[15];
                images[19]=images[13];
            }
            catch (IOException ioe) {
            
            }
            imageSize=images[0].getWidth();
            snake= new Vector();
            width=getWidth();
            height=getHeight();
            xHead=((width/2)/imageSize)*imageSize;
            yHead=((height/2)/imageSize)*imageSize;
            
            SnakePart partS=new SnakePart(xHead,yHead,HEAD,UP);
            snake.addElement(partS);
            partS=new SnakePart(xHead,yHead+imageSize,BODY,UP);
            snake.addElement(partS);
            partS=new SnakePart(xHead,yHead+2*imageSize,TAIL,UP);
            snake.addElement(partS);
            direction=UP;
            gameOverFlag=false;
        }
        
        public void paint(Graphics g) {
            g.setColor(0xFFFFFF);
            g.fillRect(0,0,width,height);
            g.setColor(0x000000);
            g.drawRect(1,1,width-3,height-3);
            int snakeLen=snake.size();
            if(gameOverFlag) {
                g.drawString("GAME OVER",width/2,height/2-10,g.HCENTER|g.TOP);
                String score=new String("YOUR SCORE: "+snakeLen);
                g.drawString(score,wigth/2,height/2+10,g.HCENTER|g.TOP);
                return;
            } else {
                for(int i=0;i<snakeLen;i++) {
                    g.drawImage(images[4*((SnakePart)snake.elementAt(i)).getPart()+((SnakePart)snake.elementAt(i)).getDir()],((SnakePart)snake.elementAt(i)).getX(),((SnakePart)snake.elementAt(i)).getY(),g.HCENTER|g.VCENTER);
                }
            }
        }
      
        public void keyPressed(int keyCode) {
            if(!gameOverFlag) {
                switch(keyCode) {
                    case KEY_NUM2: checkMove(xHead,yHead-imageSize);moveUp();break;
                    case KEY_NUM4: checkMove(xHead-imageSize,yHead);moveLeft();break;
                    case KEY_NUM6: checkMove(xHead+imageSize,yHead);moveRight();break;
                    case KEY_NUM8: checkMove(xHead,yHead+imageSize);moveDown();break;
                }
                repaint();
            }
        }
        public void checkMove(int xH,int yH) {
            for(int i=3;i<snake.size()-1;i++) {
                if(xH==((SnakePart)(snake.elementAt(i))).getX() && yH==((SnakePart)(snake.elementAt(i))).getY())
                    gameOverFlag=true;
            }
        }
      
        private void moveLeft() {
            if(direction!=RIGHT) {
                xHead-=imageSize;
                if(xHead<4){
                    gameOverFlag=true;return;
                }
                SnakePart head=(SnakePart)(snake.firstElement());
                if(direction==UP) 
                    head.setPartDir(ACLOCKWISE_TURN,LEFT);
                else {
                    if(direction==DOWN)
                        head.setPartDir(CLOCKWISE_TURN,LEFT);
                    else
                        head.setPartDir(BODY,LEFT);
                }
                SnakePart sPart=new SnakePart(xHead,yHead,HEAD,LEFT);
                snake.insertElementAt(sPart,0);
                snake.removeElement(snake.lastElement());
                ((SnakePart)snake.lastElement()).setPartDir(TAIL,-1);
                direction=LEFT;
            }
        }
      
        private void moveRight() {
            if(direction!=LEFT) {
                xHead+=imageSize;
                if(xHead>width-3){
                    gameOverFlag=true;return;
                }
                SnakePart head=(SnakePart)(snake.firstElement());
                if(direction==UP)
                    head.setPartDir(CLOCKWISE_TURN,RIGHT);
                else {
                    if(direction==DOWN)
                        head.setPartDir(ACLOCKWISE_TURN,RIGHT);
                    else
                        head.setPartDir(BODY,RIGHT);
                }
                SnakePart sPart=new SnakePart(xHead,yHead,HEAD,LEFT);
                snake.insertElementAt(sPart,0);
                snake.removeElement(snake.lastElement());
                ((SnakePart)snake.lastElement()).setPartDir(TAIL,-1);
                direction=RIGHT;
            }
        }
      
        private void moveUp() {
            if(direction!=DOWN) {
                yHead-=imageSize;
                if(yHead<4){
                    gameOverFlag=true;return;
                }
                SnakePart head=(SnakePart)(snake.firstElement());
                if(direction==RIGHT)
                    head.setPartDir(ACLOCKWISE_TURN,UP);
                else {
                    if(direction==LEFT)
                        head.setPartDir(CLOCKWISE_TURN,UP);
                    else
                        head.setPartDir(BODY,UP);
                }
                SnakePart sPart=new SnakePart(xHead,yHead,HEAD,LEFT);
                snake.insertElementAt(sPart,0);
                snake.removeElement(snake.lastElement());
                ((SnakePart)snake.lastElement()).setPartDir(TAIL,-1);
                direction=UP;
            }
        }
      
        private void moveDown() {
            if(direction!=UP) {
                yHead+=imageSize;
                if(yHead<4){
                    gameOverFlag=true;return;
                }
                SnakePart head=(SnakePart)(snake.firstElement());
                if(direction==RIGHT)
                    head.setPartDir(CLOCKWISE_TURN,DOWN);
                else {
                    if(direction==LEFT)
                        head.setPartDir(ACLOCKWISE_TURN,DOWN);
                    else
                        head.setPartDir(BODY,DOWN);
                }
                SnakePart sPart=new SnakePart(xHead,yHead,HEAD,LEFT);
                snake.insertElementAt(sPart,0);
                snake.removeElement(snake.lastElement());
                ((SnakePart)snake.lastElement()).setPartDir(TAIL,-1);
                direction=DOWN;
            }
        }
     }
}
...
Рейтинг: 0 / 0
кривая змейка
    #37626893
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что он у вас не импортирован, по дефолту импортится только java.lang пакет
...
Рейтинг: 0 / 0
кривая змейка
    #37626976
9ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
9ik
Гость
забыл ник,

чего импортиться?
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / кривая змейка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]