Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема запуска приложения на Nokia S40 6th 
:(
    Опции темы
enion
Дата 13.11.2011, 05:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 13.11.2011

Репутация: нет
Всего: нет



Код

import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Display;
import java.io.IOException;;
import java.util.Random;
import java.util.Vector;

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 != -1) dir = _dir;
    }
}


Код

import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Display;
import java.io.IOException;;
import java.util.Random;
import java.util.Vector;

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


Код

import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Display;
import java.io.IOException;;
import java.util.Random;
import java.util.Vector;

class Snake extends Canvas {
    
    private final int HEAD = 0;
    private final int TAIL = 1;
    private final int BODY = 2;
    private final int ACLOCKWISE_TURN = 3;
    private final int CLOCKWISE_TURN = 4;
    private final int UP = 0;
    private final int LEFT = 1;
    private final int RIGHT = 2;
    private final int DOWN = 3;
    private int direction;
    private Image[] images;
    private Image heart;
    private int imageSize;
    private Vector snake;
    private int width;
    private int height;
    private int xHeart;
    private int yHeart;
    private int xHead;
    private int yHead;
    private boolean eatFlag;
    private boolean gameOverFlag;
    
    public Snake() {
        super();
        images = new Image[20];
        try {
            heart = Image.createImage("/heart.png");
            /* Golova */
            images[0] = Image.createImage("/HeadUp.png");
            images[1] = Image.createImage("/HeadLeft.png");
            images[2] = Image.createImage("/HeadRight.png");
            images[3] = Image.createImage("/HeadDown.png");
            /* Hvost */
            images[4] = Image.createImage("/TailUp.png");
            images[5] = Image.createImage("/TailLeft.png");
            images[6] = Image.createImage("/TailRight.png");
            images[7] = Image.createImage("/TailDown.png");
            /* Telo */
            images[8] = Image.createImage("/BodyUp.png");
            images[9] = Image.createImage("/BodyLeft.png");
            images[10] = images[9];
            images[11] = images[8];
            /* Sgib tela protiv chasovoj strelki */
            images[12] = Image.createImage("/TurnDownLeft.png");
            images[13] = Image.createImage("/TurnUpLeft.png");
            images[14] = Image.createImage("/TurnDownRight.png");
            images[15] = Image.createImage("/TurnUpRight.png");
            /* Sgib za chasovoj strelkoj */
            images[16] = images[14];
            images[17] = images[12];
            images[18] = images[15];
            images[19] = images[13];
        } 
        catch( IOException ioe ) {
            System.out.println(ioe.getMessage());
            }
        
        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+imageSize*2,TAIL,UP);
        snake.addElement(partS);
        direction = UP;
        gameOverFlag = false;
        newHeart();
    }
    
    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);
        g.drawImage(heart, xHeart, yHeart, g.HCENTER|g.VCENTER);
        int snakeLen = snake.size();
        if(gameOverFlag) {
            g.drawString("GAME OVER", width/2, height/2, g.HCENTER|g.TOP);
            String score = new String("Your Score: " + (snakeLen-3));
            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;
        }
        if( xH == xHeart && yH == yHeart )
            eatFlag = true;
        else
            eatFlag = false;
    }
    
    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);
            if( eatFlag )
                newHeart();
            else {
                snake.removeElement(snake.lastElement());
                ((SnakePart)snake.lastElement()).setPartDir(TAIL, -1);
            }
            //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, RIGHT);
            snake.insertElementAt(sPart, 0);
            if( eatFlag )
                newHeart();
            else {
                snake.removeElement(snake.lastElement());
                ((SnakePart)snake.lastElement()).setPartDir(TAIL, -1);
            }
            //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 == 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);
            if( eatFlag )
                newHeart();
            else {
                snake.removeElement(snake.lastElement());
                ((SnakePart)snake.lastElement()).setPartDir(TAIL, -1);
            }
            //snake.removeElement(snake.lastElement());
            //((SnakePart)snake.lastElement()).setPartDir(TAIL, -1);
            direction = UP;
        }
    }

    private void moveDown() {
        if(direction != UP) {
            yHead+= imageSize;
            if(yHead > height-3) {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, DOWN);
            }
            SnakePart sPart = new SnakePart(xHead, yHead, HEAD, DOWN);
            snake.insertElementAt(sPart, 0);
            if( eatFlag )
                newHeart();
            else {
                snake.removeElement(snake.lastElement());
                ((SnakePart)snake.lastElement()).setPartDir(TAIL, -1);
            }
            //snake.removeElement(snake.lastElement());
            //((SnakePart)snake.lastElement()).setPartDir(TAIL, -1);
            direction = DOWN;
        }
    }
    
    private void newHeart() {
        int xPartMaxNum = (width-5)/imageSize;
        int yPartMaxNum = (height-5)/imageSize;
        int len = snake.size();
        Random ran = new Random();
        boolean setFlag = false;
        while( !setFlag ) {
            setFlag = true;
            xHeart = imageSize*( Math.abs(ran.nextInt()) % xPartMaxNum + 1 );
            yHeart = imageSize*( Math.abs(ran.nextInt()) % yPartMaxNum + 1 );
            for(int i=0; i<len; i++)
                if( xHeart == ((SnakePart)(snake.elementAt(i))).getX() &&
                        yHeart == ((SnakePart)(snake.elementAt(i))).getY() )
                        setFlag = false;
        }
    }
}


При запуске этого кода на телефоне выдает ошибку:
NullPointerException
Телефон Nokia 6303. Кстати на эмуляторе тоже не хочет работать (S40 6th Edition). Работает только на стандартных эмуляторах WTK, значит код правильный, почему тогда на телефоне не хочет работать. На J2ME опыта мало... объясните может я чего то не пойму. 
PM MAIL   Вверх
enion
Дата 13.11.2011, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 13.11.2011

Репутация: нет
Всего: нет



Все разобрался...имя картинки в строке heart = Image.createImage("/heart.png");  с маленькой, а в папке res с большой, =)) Непойму только почему тогда стандартные эмуляторы работали, может не чувствительные к регистру...ну это неважно. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0589 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.