
Опытный
 
Профиль
Группа: Участник
Сообщений: 333
Регистрация: 21.11.2007
Репутация: 1 Всего: 1
|
Всем доброе время суток! Читаю книгу Буткевича, примеры приведены но код не всегда подробен, например какие классы импортировать и остальное по мелочам. И на одном примере ступор. Простая змейка, просто передвижение. но приложение не запускается. Надеюсь поможете разобраться! Вот код: | Код | package snake;
import javax.microedition.midlet.*; import javax.microedition.lcdui.Display;
public class Enter extends MIDlet { private Display display; public void startApp() { Snake snake = new Snake(); display = Display.getDisplay(this); display.setCurrent(snake); }
public void pauseApp() { }
public void destroyApp(boolean unconditional) { } }
package snake;
import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Image; import javax.microedition.lcdui.Graphics; import java.io.*; import java.util.Vector;
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 Vector snake; private int width; private int height; private int xHead; private int yHead; private Image[] images; private int imageSize; private boolean gameOverFlag; 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+2*imageSize, TAIL, UP); snake.addElement(partS); direction = UP; gameOverFlag = false; }
public void paint (Graphics g) { g.setColor(0xFFFFFFF); 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 CODE: "+snakeLen); g.drawString(score, width/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; } }
public 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;
} }
public void moveUp() { if(direction != DOWN) { yHead-=imageSize; if(yHead<4) {gameOverFlag = true; return;} SnakePart head = (SnakePart)(snake.firstElement()); if(direction == LEFT) { head.setPartDir(CLOCKWISE_TURN,UP); } else { if(direction == RIGHT) { head.setPartDir(ACLOCKWISE_TURN,UP); } else { head.setPartDir(BODY,UP); } } SnakePart sPart = new SnakePart(xHead,yHead,HEAD,UP); snake.insertElementAt(sPart,0); snake.removeElement(snake.lastElement()); ((SnakePart)snake.lastElement()).setPartDir(TAIL, -1); direction = UP;
} }
public void moveDown() { if(direction != UP) { yHead+=imageSize; if(yHead>4) {gameOverFlag = true; return;} SnakePart head = (SnakePart)(snake.firstElement()); if(direction == LEFT) { head.setPartDir(ACLOCKWISE_TURN,DOWN); } else { if(direction == RIGHT) { head.setPartDir(CLOCKWISE_TURN,DOWN); } else { head.setPartDir(BODY,UP); } } SnakePart sPart = new SnakePart(xHead,yHead,HEAD,DOWN); snake.insertElementAt(sPart,0); snake.removeElement(snake.lastElement()); ((SnakePart)snake.lastElement()).setPartDir(TAIL, -1); direction = DOWN;
} }
public void moveRight() { if(direction != LEFT) { xHead+=imageSize; if(xHead>4) {gameOverFlag = true; return;} SnakePart head = (SnakePart)(snake.firstElement()); if(direction == UP) { head.setPartDir(ACLOCKWISE_TURN,RIGHT); } else { if(direction == DOWN) { head.setPartDir(CLOCKWISE_TURN,RIGHT); } else { head.setPartDir(BODY,UP); } } SnakePart sPart = new SnakePart(xHead,yHead,HEAD,RIGHT); snake.insertElementAt(sPart,0); snake.removeElement(snake.lastElement()); ((SnakePart)snake.lastElement()).setPartDir(TAIL, -1); direction = RIGHT;
} } }
package snake;
public 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; } public int getPart() {return part;} public int getDir() {return dir;} public int getX() {return x;} public int getY() {return y;} public void setPartDir(int _part, int _dir ) { part = _part; if(_dir != 0) dir = _dir;
} }
|
Это сообщение отредактировал(а) Цербер - 21.7.2009, 14:37
|