⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 escapeecanvas.java

📁 这个是逃亡者游戏。这个是由J2ME开发。游戏很好玩!很不错!
💻 JAVA
字号:
import java.util.Random;
import java.util.Vector;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.media.*;
import java.io.*;


class escapeeCanvas    extends GameCanvas    implements Runnable
{
    // shared direction constants
    static final int BULLETS_NUM = 50;
    static final int UP = 0;
    static final int LEFT = 1;
    static final int DOWN = 2;
    static final int RIGHT = 3;

    private TiledLayer background;
    private Escapee escapee;
    private Bullets bullets;
    private Sprite explosion;
    private int CanvasWidth = getWidth();
    private int CanvasHeight = getHeight();
    private Image image;
    private static final int MILLIS_PER_TICK = 50;
    private final escapeeMIDlet midlet;
    private boolean isGameOver = false;
    private boolean isCollidesWith = false;
    private int explosionCnt = 4;

    private final Graphics g;
    private long gameDuration = 0;
    private long startTime;
    private volatile Thread animationThread = null;
    


    escapeeCanvas(escapeeMIDlet midlet)
    {
        super(true);   // suppress key events for game keys
        this.midlet = midlet;
        setFullScreenMode(false);
        g = getGraphics();
        load();
        init();
    }


    public void keyPressed(int keyCode)
    {
        // The constructor suppresses key events for game keys, so we'll
        // only get key events for non-game keys. The number keys, * & #
        // have positive keyCodes, so negative keyCodes mean non-game
        // special keys like soft-keys. We'll use key-presses on special
        // keys to take us to the menu.
        if (keyCode < 0)
        {
            stop();
            midlet.GameCanvasMenu();
        }
    }


    private void load()
    {
      image = midlet.createImage("/back_water.png");
      int backColumns = CanvasWidth/image.getWidth()+1;
      int backRows = CanvasHeight/image.getHeight()+1;
      background = new TiledLayer(backColumns,backRows,image,image.getWidth(),image.getHeight());
      int x,y;
      for (int i = 0; i < backColumns*backRows; i++) 
      {
      x=i%backColumns;
      y=i/backColumns;
      background.setCell(x,y,1);
      }

     image = midlet.createImage("/Escapee.png");
     escapee = new Escapee(image,image.getWidth()/3,image.getHeight());

     escapee.setCanvasSize(CanvasWidth,CanvasHeight);
     
     image = midlet.createImage("/bullet.png");
     bullets = new Bullets(image,image.getWidth(),image.getHeight());
     bullets.setBulletsNum(BULLETS_NUM);
     bullets.setCanvasSize(CanvasWidth,CanvasHeight);
     
     image = midlet.createImage("/explosion.png");
     explosion = new Sprite(image,image.getWidth()/4,image.getHeight());
     
     image = midlet.createImage("/gameover.png");

    }
    public void init(){

     escapee.setPosition(CanvasWidth/2,CanvasHeight/2);
     bullets.initBullets();
     explosion.setVisible(false);
     explosion.setFrame(0);
     explosionCnt = 4;     
     isCollidesWith = false;
     isGameOver = false;
     gameDuration = 0;
     escapee.setAlive(true);
    }
    

    public synchronized void start()
    {
        animationThread = new Thread(this);
        animationThread.start();

        startTime = System.currentTimeMillis() - gameDuration;
    }


    public synchronized void stop()
    {
        gameDuration = System.currentTimeMillis() - startTime;
        animationThread = null;
    }


    public void run()
    {
        Thread currentThread = Thread.currentThread();

        try
        {
            // This ends when animationThread is set to null, or when
            // it is subsequently set to a new thread; either way, the
            // current thread should terminate
            while (currentThread == animationThread)
            {
                long startTime = System.currentTimeMillis();
                // Don't advance game or draw if canvas is covered by
                // a system screen.
                if (isShown())
                {
                    input();
                    tick();
                    draw();
                    
                }
                long timeTaken = System.currentTimeMillis() - startTime;
                if (timeTaken < MILLIS_PER_TICK)
                {
                    synchronized (this)
                    {
                        wait(MILLIS_PER_TICK - timeTaken);
                    }
                }
                else
                {
                    currentThread.yield();
                }
            }
        }
        catch (InterruptedException e)
        {
            // won't be thrown
        }
    }


    private void tick()
    {
        // If player presses two or more direction buttons, we ignore them
        // all. But pressing fire is independent. The code below also ignores
        // direction buttons if GAME_A..GAME_D are pressed.

        escapee.tick();
        if(!isCollidesWith)bullets.tick();
        if(isCollidesWith&&(explosionCnt!=0)){
        	
            explosion.setFrame((explosionCnt-1));
           
            explosionCnt--;
            if(explosionCnt == 0)isGameOver = true;
            

        }
         
        if(bullets.collidesWith(escapee)){
        
        isCollidesWith = true;
        escapee.setAlive(false);
        SoundEffects.getInstance().startBlastSound();
        explosion.setPosition(escapee.getRefPixelX()-explosion.getWidth()/2,
                              escapee.getRefPixelY()-explosion.getHeight()/2);
        explosion.setVisible(true);
        
        
        }
        if(isGameOver){
        long time = (System.currentTimeMillis() - startTime);
        midlet.GameCanvasGameOver(time,BULLETS_NUM);
        }
    }
    private void input() {
        // If player presses two or more direction buttons, we ignore them
        // all. But pressing fire is independent. The code below also ignores
        // direction buttons if GAME_A..GAME_D are pressed.
    int keyStates = getKeyStates();
    if(escapee.isAlive()){
    if ((keyStates & LEFT_PRESSED) != 0) escapee.move(LEFT);
    else if ((keyStates & RIGHT_PRESSED) != 0) escapee.move(RIGHT);
    else if ((keyStates & UP_PRESSED) != 0) escapee.move(UP);
    else if ((keyStates & DOWN_PRESSED) != 0) escapee.move(DOWN);
    }
    }

  


    void vibrate(int millis)
    {
        midlet.vibrate(millis);
    }

    
    // draw game
    private void draw()
    {
    	background.paint(g);
    	escapee.paint(g);
    	bullets.draw(g);
    	explosion.paint(g);
    	if(isCollidesWith&&!isGameOver)g.drawImage(image, 
    	                                           CanvasWidth/2,
    	                                           CanvasHeight/2,
    	                                           g.VCENTER|g.HCENTER);
    	 
    	flushGraphics();

    }
    



}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -