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

📄 goat_canvas.java

📁 GAME EXAMPLE OF J2ME FOR SHARE
💻 JAVA
字号:
import java.util.Random;
import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

public class Goat_Canvas
    extends GameCanvas
    implements Runnable, CommandListener {

  boolean running;

  Image img;

  Image img0, img1;

  Sprite sp;

  int fs[][] = {
      {
      0, 1, 2, 3, 4}
      , {
      5, 6, 7, 8, 9}
  };

  TiledLayer tlg;

  TiledLayer tlw;

  int fw[] = {
      1, 2, 3};

  int mySequenceIndex = 0;

  int myAnimatedTileIndex;

  int win_width = getWidth();

  int win_height = getHeight();

  int img_Goat_size = 15;

  int img_grass_size = 16;

  int img_water_size = 16;

  int dir = 0;

  int collide = -1;

  Graphics g = getGraphics();

  Goat_MIDlet gm;

  public Goat_Canvas(Goat_MIDlet gm) {
    super(true);
    this.gm = gm;
    Command exitCommand = new Command("exit", Command.EXIT, 0);
    addCommand(exitCommand);
    setCommandListener(this);

    try {
      img = Image.createImage("/goat.png");
      img0 = Image.createImage("/grass.png");
      img1 = Image.createImage("/water.png");
    }
    catch (IOException e) {
      System.out.println(e.getMessage());
    }

    int backcols = win_width / img_grass_size + 1;

    int backrows = win_height / img_grass_size + 1;

    tlg = new TiledLayer(backcols, backrows, img0, img_grass_size,
                         img_grass_size);
    Random r = new Random();
    for (int i = 0; i < backcols * backrows; i++) {
      int n = (r.nextInt() >>> 1) % 5 + 1;
      tlg.setCell(i % backcols, i / backcols, n);
    }

    tlw = new TiledLayer(backcols, backrows, img1, img_water_size,
                         img_water_size);
    myAnimatedTileIndex = tlw.createAnimatedTile(1);
    for (int i = 0; i < backcols * (backrows / 2); i++) {
      tlw.setCell(i % backcols, i / backcols, myAnimatedTileIndex);
    }

    sp = new Sprite(img, img_Goat_size, img_Goat_size);
    sp.setFrameSequence(fs[0]);
    sp.setFrame(0);
    int x = (win_width - img_Goat_size) / 2;
    int y = win_height - img_Goat_size;
    sp.setPosition(x, y);

    start();

  }

  public void start() {
    running = true;
    Thread t = new Thread(this);
    t.start();
  }

  public void run() {
    long st = 0, et = 0, diff = 0;

    int rate = 250;

    while (running) {
      st = System.currentTimeMillis();
      render(g);
      et = System.currentTimeMillis();

      diff = et - st;
      if (diff < rate) {
        try {
          Thread.sleep(rate - diff);
        }
        catch (InterruptedException ex) {
          stop();
        }
      }

    }
  }

  private void render(Graphics g) {

    g.setColor(0x000000);
    g.fillRect(0, 0, win_width, win_height);
    tlg.paint(g);
    mySequenceIndex++;
    mySequenceIndex %= 3;
    tlw.setAnimatedTile(myAnimatedTileIndex, fw[mySequenceIndex]);
    tlw.paint(g);

    switch (isCollision()) {
      case -1:
        switch (dir) {
          case 0:
            sp.move(0, -3);
            sp.nextFrame();
            break;
          case 1:
            sp.move(0, 3);
            sp.nextFrame();
            break;
        }
        break;
      case 0:
        dir = 1;
        sp.setFrameSequence(fs[1]);
        sp.move(0, 3);
        sp.nextFrame();
        break;
      case 1:
        dir = 0;
        sp.setFrameSequence(fs[0]);
        sp.move(0, -3);
        sp.nextFrame();
        break;
    }
    sp.paint(g);

    flushGraphics();
  }

  public int isCollision() {
    if (sp.getY() < win_height / 2) {
      collide = 0;
    }
    else if (sp.getY() > win_height - sp.getHeight()) {
      collide = 1;
    }
    else {
      collide = -1;
    }
    return collide;
  }

  public void stop() {
    running = false;
  }

  public void commandAction(Command c, Displayable s) {
    if (c.getCommandType() == Command.EXIT) {
      gm.quitApp();
    }
  }

}

⌨️ 快捷键说明

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