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

📄 tukcanvas.java

📁 骑三轮车拉客的小游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import com.nokia.mid.ui.FullCanvas;
import java.io.PrintStream;
import java.util.Random;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class TukCanvas extends FullCanvas
  implements Repeater, Runnable
{
  public final int KEY_OPTION = -6;
  public final int KEY_CANCEL = -7;
  private Point cPos = new Point(0, 0);
  private Point cMapPos = new Point(0, 0);
  private Map map;
  private Image imgCar;
  private Image imgCarFront;
  private Image imgCarBack;
  private Image imgCarLeft;
  private Image imgCarRight;
  private Image imgFace1;
  private Repeat repeat;
  private Car myCar;
  private TukMIDP midlet;
  Image imgBuffer;
  Graphics buffer;
  int gTYPE = 20;
  int pixel = 20;
  int viewMapPixel = 3;
  int width;
  int height;
  int mapX;
  int mapY;
  int startX;
  int startY;
  int mesgMode;
  String mesg = "";
  int fuel = 150;
  int speed = 650;
  int count;
  int lifeCount = 3;
  int gabBuffer = 10;
  int manNo;
  int score;
  int fromEdge = 3;
  Man[] mans;
  Point pickPos;
  String destination = "";
  Random random = new Random();
  Thread thread;
  int carDirection = 6;
  boolean isEnable = true;
  boolean isGameOver;
  boolean isExplain;
  boolean isShowTime;
  boolean isShowMsg;
  boolean isHalt;
  boolean isFull;
  boolean isMenuShow;
  boolean isViewMapMode;
  boolean isExitMenu;
  int gameLevel = 7;
  boolean runMode = true;
  TukCanvas.TimeCounter totalTime;
  TukCanvas.TimeCounter eachTime;

  public TukCanvas(TukMIDP midlet, int manNo, int speed)
  {
    this.totalTime = new TukCanvas.TimeCounter(this);
    this.eachTime = new TukCanvas.TimeCounter(this);

    this.map = new Map(this.pixel);
    this.width = getWidth();
    this.height = getHeight();
    this.manNo = manNo;
    this.midlet = midlet;
    this.speed = speed;
    this.mans = new Man[manNo];
    this.mapX = this.map.sizeX;
    this.mapY = this.map.sizeY;
  }

  public void paint(Graphics g) {
    if (!(this.isViewMapMode))
    {
      if (this.imgBuffer == null)
        this.imgBuffer = Image.createImage(this.width + this.gabBuffer * this.pixel, this.height + this.gabBuffer * this.pixel);
      if (this.buffer == null)
        this.buffer = this.imgBuffer.getGraphics();

      if (this.isEnable)
      {
        drawMap();
        drawCar();
        this.buffer.setFont(Font.getFont(64, 0, 0));
        if (this.isShowMsg) {
          this.buffer.setColor(0, 0, 200);
          this.buffer.fillRoundRect(30, this.height - 20, this.width - 60, 20, 5, 5);
          this.buffer.setColor(255, 255, 255);
          this.buffer.drawString(this.mesg, 50, this.height - 15, this.gTYPE);
        }
        this.buffer.setColor(255, 0, 0);
        this.buffer.drawString(this.destination, 70, 5, this.gTYPE);

        this.buffer.setColor(255, 255, 255);
        this.buffer.fillRect(5, 5, 50, 3);
        this.buffer.setColor(255, 0, 0);
        this.buffer.fillRect(5, 5, this.fuel / 3, 3);

        this.buffer.setFont(Font.getFont(64, 1, 0));
        this.buffer.setColor(255, 0, 0);
        this.buffer.drawString("$ : ".concat(String.valueOf(String.valueOf(this.score))), 5, 10, this.gTYPE);
        this.buffer.drawString(String.valueOf(String.valueOf(new StringBuffer("n : ").append(this.count).append("/").append(this.manNo))), 5, 25, this.gTYPE);
        this.buffer.drawString("x ".concat(String.valueOf(String.valueOf(this.lifeCount))), 5, this.height - 15, this.gTYPE);
        if (this.isExplain)
          drawExplainScreen();
      } else {
        drawGameMessage();
      }

      if (this.isMenuShow)
        drawMenu();
    }
    else {
      drawViewMap();
    }

    g.drawImage(this.imgBuffer, 0, 0, this.gTYPE);
  }

  public void initGame()
  {
    this.isEnable = true;
    this.isGameOver = false;
    this.isExplain = false;
    this.isShowTime = false;
    this.isShowMsg = false;
    this.isHalt = false;
    this.isFull = false;
    this.isMenuShow = false;
    this.isViewMapMode = false;
    this.isExitMenu = false;

    this.count = 0;
    this.score = 0;
    this.destination = "";
    this.fuel = 150;
    this.lifeCount = 3;

    if (this.buffer != null)
      this.buffer.setFont(Font.getDefaultFont());
    this.mesg = "";

    this.imgCar = this.imgCarRight;

    if (this.myCar == null)
      this.myCar = new Car("car", this.imgCar, 127, new Point(0, 0));
    else
      this.myCar.setPosition(new Point(0, 0));

    this.cPos.x = (this.cPos.y = 0);
    loadMan();
    Thread t1 = new Thread(new TukCanvas.CarRunner(this));
    Thread t2 = new Thread(this.totalTime);
    t1.start();
    t2.start();

    repaint(); }

  public void run() {
    loadImage();
    initGame();
  }

  void drawCar() {
    Point carPos = this.myCar.getPosition();
    this.buffer.drawImage(this.imgCar, (carPos.x - this.cPos.x) * this.pixel, (carPos.y - this.cPos.y) * this.pixel, this.gTYPE); }

  void drawGameMessage() {
    this.buffer.setColor(150, 150, 150);
    this.buffer.fillRoundRect(10, 30, this.width - 20, this.height - 60, 10, 10);
    this.buffer.setColor(255, 255, 255);
    this.buffer.drawRoundRect(10, 30, this.width - 20, this.height - 60, 10, 10);

    if (this.isGameOver) {
      this.buffer.setFont(Font.getFont(64, 1, 16));
      this.buffer.drawString("GAME OVER", 45, 55, this.gTYPE);
      this.buffer.setFont(Font.getFont(64, 1, 0));
      this.buffer.drawString("Your score : ".concat(String.valueOf(String.valueOf(this.score))), 30, 85, this.gTYPE);
    } else {
      switch (this.mesgMode)
      {
      case 0:
        this.buffer.setFont(Font.getFont(64, 1, 16));
        this.buffer.drawString(" YOU WIN", 45, 55, this.gTYPE);
        this.buffer.setFont(Font.getFont(64, 1, 0));
        this.buffer.drawString("Your score : ".concat(String.valueOf(String.valueOf(this.score))), 30, 85, this.gTYPE);
        this.buffer.drawString("Time  ".concat(String.valueOf(String.valueOf(this.totalTime.getTime()))), 30, 115, this.gTYPE);

        break;
      case 1:
        this.buffer.setFont(Font.getFont(64, 1, 0));
        this.buffer.drawString("Empty Fuel", 45, 75, this.gTYPE); }
    }
  }

  void drawExplainScreen() {
    this.buffer.setColor(0, 0, 200);
    this.buffer.setFont(Font.getFont(64, 0, 0));
    this.buffer.fillRect(0, this.height - 48, this.width, 48);
    this.buffer.fillRoundRect(0, this.height - 50, this.width, 5, 5, 5);
    this.buffer.drawImage(this.imgFace1, 0, this.height - this.imgFace1.getHeight(), this.gTYPE);
    this.buffer.setColor(150, 150, 150);
    this.buffer.fillRoundRect(55, this.height - 42, this.width - 60, 35, 5, 5);
    this.buffer.setColor(0, 0, 0);

    if (!(this.isFull)) {
      this.buffer.drawString("I want to go to ..", 65, this.height - 37, this.gTYPE);
      this.buffer.setColor(255, 0, 0);
      this.buffer.drawString(String.valueOf(String.valueOf(new StringBuffer("\"").append(this.destination).append("\""))), 62, this.height - 20, this.gTYPE);
    } else {
      this.buffer.drawString("\"Thank you.\"", 70, this.height - 30, this.gTYPE);
    }
    if (this.isShowTime) {
      this.buffer.setColor(150, 150, 150);
      this.buffer.fillRoundRect(10, 100, this.width - 20, this.height - 150, 10, 10);
      this.buffer.setColor(255, 255, 255);
      this.buffer.drawRoundRect(10, 100, this.width - 20, this.height - 150, 10, 10);
      this.buffer.setFont(Font.getFont(64, 1, 0));
      this.buffer.drawString("Time  ".concat(String.valueOf(String.valueOf(this.eachTime.getTime()))), 30, 125, this.gTYPE);
    }
  }

  void newLife()
  {
    this.isEnable = false;
    this.isHalt = true;
    this.mesgMode = 1;
    repaint();
    try {
      Thread.sleep(3000L); } catch (Exception localException) {
    }
    this.isEnable = true;
    this.isHalt = false;
    this.isExplain = false;
    this.destination = "";
    this.isFull = false;
    this.fuel = 150;
    this.myCar.pos.x = 0;
    this.myCar.pos.y = 0;
    this.cPos.x = 0;
    this.cPos.y = 0;
    this.lifeCount -= 1;
    if (this.lifeCount < 1)
      finishGame(true);
  }

  void drawMenu() {
    int blockHieght = 35;
    int margin = 2;
    int noBlock = 3;
    this.buffer.setColor(255, 255, 255);
    this.buffer.fillRect(0, this.height - 80, this.width, 80);
    this.buffer.setColor(0, 0, 0);
    this.buffer.setFont(Font.getFont(64, 1, 16));
    this.buffer.drawString("Yes", 5, this.height - 20, this.gTYPE);
    this.buffer.drawString("No", this.width - 25, this.height - 20, this.gTYPE);
    this.buffer.setFont(Font.getDefaultFont());

    this.buffer.setColor(100, 100, 100);
    this.buffer.fillRect(3, this.height - 78, this.width - 6, 50);
    this.buffer.fillRect(5, this.height - 76, this.width - 6, 50);
    this.buffer.setColor(255, 255, 255);
    this.buffer.fillRect(1, this.height - 80, this.width - 6, 50);
    this.buffer.setColor(0, 0, 0);
    this.buffer.drawRect(1, this.height - 80, this.width - 6, 50);

    if (this.isExitMenu)
      this.buffer.drawString("Quit game ? ", 10, this.height - 70, this.gTYPE);
    else
      this.buffer.drawString("Play again ? ", 10, this.height - 70, this.gTYPE);
  }

  private void drawMap() {
    byte code = 0;
    int x = 0; int y = 0;
    for (int i = -(this.gabBuffer / 2); i < this.width / this.pixel + this.gabBuffer / 2; ++i)
      for (int j = -(this.gabBuffer / 2); j < this.height / this.pixel + this.gabBuffer / 2; ++j) {
        x = i + this.cPos.x;
        y = j + this.cPos.y;
        if (x >= this.mapX) break; if (y >= this.mapY)
          break;
        if (x < 0) x = 0;
        if (y < 0) y = 0;
        code = this.map.getCode(x, y);
        if ((code != 0) && (code != 2)) {
          Image img = this.map.getObject(code).getImage();
          if (img == null)
            System.out.println("Image is null ".concat(String.valueOf(String.valueOf(code))));
          this.buffer.drawImage(img, i * this.pixel, j * this.pixel, this.gTYPE);
        }
      }
  }

  private void drawViewMap()
  {
    boolean isDest = false;
    boolean isEmpty = true;
    byte code = 0;
    int x = 0; int y = 0; int w = 0; int h = 0;
    int indexX = 0; int indexY = 0;
    this.buffer.setColor(255, 255, 255);
    this.buffer.fillRect(0, 0, this.width, this.height);
    Point tempPos = this.myCar.getPosition();
    int mWidth = this.width / this.viewMapPixel;
    int mHeight = this.height / this.viewMapPixel;
    for (int i = 0; i < mWidth; ++i)
      for (int j = 0; j < mHeight; ++j) {
        x = i * this.viewMapPixel;
        y = j * this.viewMapPixel;
        w = this.viewMapPixel;
        h = this.viewMapPixel;

        int mapPosX = this.cMapPos.x + i;
        int mapPosY = this.cMapPos.y + j;
        if (mapPosX > this.map.sizeX)
          break;
        if (mapPosY > this.map.sizeY)
          break;

        code = this.map.getCode(mapPosX, mapPosY);

        if ((code < 3) || (code >= 51)) {
          if (code == 0) {
            this.buffer.setColor(0, 100, 255);
            this.buffer.fillRect(x, y, w, h);
          } else {
            this.buffer.setColor(0, 255, 0);
            this.buffer.fillRect(x, y, w, h);
          }
        } else if (code < 21) {
          if (code == 20) {
            this.buffer.setColor(255, 0, 0);
            this.buffer.fillRect(x, y, w, h);
          }
          else
          {
            this.buffer.setColor(100, 100, 100);
            this.buffer.fillRect(x, y, w, h);
          }
        } else if (code <= 41) {
          this.buffer.setColor(0, 100, 255);
          this.buffer.fillRect(x, y, w, h);
          this.buffer.setColor(0, 0, 0);
          this.buffer.drawRect(x, y, w, h);
          isDest = this.destination.equals(this.map.getObject(code).getName());

          if (isDest) {
            indexX = mapPosX;
            indexY = mapPosY;
            isEmpty = false;
          }

        }

        if ((tempPos.x == mapPosX) && (tempPos.y == mapPosY))
        {
          this.buffer.setColor(255, 255, 255);
          this.buffer.fillRect(x, y, w, h);
          this.buffer.setColor(0, 0, 0);
          this.buffer.drawRect(x, y, w, h);
        }
      }


    if (!(isEmpty)) {
      this.buffer.setColor(255, 0, 0);
      this.buffer.drawLine((indexX - this.cMapPos.x) * this.viewMapPixel, (indexY - this.cMapPos.y) * this.viewMapPixel, this.viewMapPixel * (indexX + 2 - this.cMapPos.x), this.viewMapPixel * (indexY + 2 - this.cMapPos.y));

      this.buffer.drawLine((indexX - this.cMapPos.x) * this.viewMapPixel, (indexY + 2 - this.cMapPos.y) * this.viewMapPixel, this.viewMapPixel * (indexX + 2 - this.cMapPos.x), this.viewMapPixel * (indexY - this.cMapPos.y));

      this.buffer.drawLine((indexX - this.cMapPos.x) * this.viewMapPixel, (indexY - this.cMapPos.y) * this.viewMapPixel + 1, this.viewMapPixel * (indexX + 2 - this.cMapPos.x), this.viewMapPixel * (indexY + 2 - this.cMapPos.y) + 1);

      this.buffer.drawLine((indexX - this.cMapPos.x) * this.viewMapPixel, (indexY + 2 - this.cMapPos.y) * this.viewMapPixel + 1, this.viewMapPixel * (indexX + 2 - this.cMapPos.x), this.viewMapPixel * (indexY - this.cMapPos.y) + 1);
    }
  }

  private void loadMan()
  {
    for (int i = 0; i < this.manNo; ++i) {
      if (this.mans[i] != null)
        this.map.setCode(this.mans[i].pos.x, this.mans[i].pos.y, this.mans[i].roadCode);

      int x = 0;
      int y = 0;
      byte code = this.map.getCode(x, y);
      while ((code < 3) || (code > 13) || (x == 0) || (y == 0))
      {
        x = Math.abs(this.random.nextInt() % this.mapX);
        y = Math.abs(this.random.nextInt() % this.mapY);
        code = this.map.getCode(x, y);
      }

      this.mans[i] = new Man(this.map.getObject(20).getImage(), 20, new Point(x, y), this.map.getRandomPlace(), this.map.getCode(x, y));

      this.map.setCode(x, y, 20);
    }
  }

  private void loadImage()
  {
    try
    {
      this.imgCarFront = Image.createImage("/carfront.png");
      this.imgCarBack = Image.createImage("/carback.png");
      this.imgCarLeft = Image.createImage("/carleft.png");
      this.imgCarRight = Image.createImage("/carright.png");
      this.imgFace1 = Image.createImage("/manFace1.png");
    }
    catch (Exception ex) {
      System.out.println("Cound not load car image".concat(String.valueOf(String.valueOf(ex))));
    }
  }

  public void goLeft()
  {
    this.carDirection = 2;
    byte b = 0;
    if (this.imgCar.equals(this.imgCarFront))
      b = this.map.getCode(this.myCar.pos.x - 1, this.myCar.pos.y + 1);
    else
      b = this.map.getCode(this.myCar.pos.x - 1, this.myCar.pos.y);

    if ((b < 3) || (b > 20)) {
      return;
    }

    if (!(this.isFull)) {
      this.fuel -= 1;
      if (this.fuel < 0)
        newLife();
    }
    if (this.imgCar.equals(this.imgCarFront)) {
      this.myCar.pos.y += 1;
      this.myCar.pos.x -= 1;
    } else if (this.imgCar.equals(this.imgCarBack)) {
      this.myCar.pos.x -= 1;
    }
    if (this.imgCar.equals(this.imgCarLeft))
      this.myCar.pos.x -= 1;
    this.imgCar = this.imgCarLeft;
    if (this.myCar.pos.x < 0)
      this.myCar.pos.x = 0;
    if (this.myCar.pos.x - this.cPos.x < this.fromEdge) {
      this.cPos.x -= 1;
      if (this.cPos.x < 0)
        this.cPos.x = 0;
    }

    repaint(); }

  public void goRight() {
    this.carDirection = 5;
    byte b = 0;
    if (this.imgCar.equals(this.imgCarFront))

⌨️ 快捷键说明

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