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

📄 car.java~91~

📁 一个J2Me的赛车游戏
💻 JAVA~91~
字号:
import javax.microedition.m3g.*;

public class Car {
  public static float RotY = 75;
  public static float carspeed = 0;
  public static float lastcarspeed = 0;
  public static float maxspeed = 4f;
  public static float radius = 6;
  public static int currentfield = 0;
  public static float[] PreCarPosition;
  public static double camSine;
  public static double camCosine;
  public static float turnangle = 4;
  public static float acspeed = 0.01f;
  public static float mass = 0.1f;

  public boolean hitbyother;
  public float Hspeed;
  public float HrotY;
  public Car() {
  }

  public void Checkfield(Group pod, boolean autoturn) {
    float[] car = new float[3];
    pod.getTranslation(car);
    float[] left = new float[3];
    float[] right = new float[3];

    float dot;

    for (int n = 0; n < 8; n = n + 2) {

      left[0] = Global.roadpoints[currentfield][n];
      left[1] = 0.0f;
      left[2] = Global.roadpoints[currentfield][n + 1];
      if (n == 6) {
        right[0] = Global.roadpoints[currentfield][0];
        right[1] = 0.0f;
        right[2] = Global.roadpoints[currentfield][1];
      }
      else {
        right[0] = Global.roadpoints[currentfield][n + 2];
        right[1] = 0.0f;
        right[2] = Global.roadpoints[currentfield][n + 3];
      }

      dot = Collision.Check(left, right, car);

      if (dot < 0) {
        //if (dot < -10000) {
        switch (Global.roadinfo[currentfield]) {
          case 1:
            if (n == 0) {
              if (Global.roaddir[currentfield]) {
                currentfield = currentfield + 1;
              }
              else {
                currentfield = currentfield - 1;
              }
              headandend();
              //  carspeed = -carspeed;
            }
            if (n == 2) {
              collide(pod);
              return;
            }
            if (n == 4) {
              if (Global.roaddir[currentfield]) {
                currentfield = currentfield - 1;
              }
              else {
                currentfield = currentfield + 1;

              }
              headandend();
            }
            if (n == 6) {
              collide(pod);
              return;

            }
            break;
          case 2:
            if (n == 0) {
              collide(pod);
              return;

            }
            if (n == 2) {
              if (Global.roaddir[currentfield]) {
                currentfield = currentfield + 1;
              }
              else {
                currentfield = currentfield - 1;
              }
              headandend();
            }
            if (n == 4) {
              collide(pod);
              return;

            }
            if (n == 6) {
              if (Global.roaddir[currentfield]) {
                currentfield = currentfield - 1;
              }
              else {
                currentfield = currentfield + 1;

              }
              headandend();
            }
            break;
          case 3:
            if (n == 0) {
              collide(pod);
              return;

            }
            if (n == 2) {
              if (Global.roaddir[currentfield]) {
                currentfield = currentfield + 1;
              }
              else {
                currentfield = currentfield - 1;
              }
              headandend();
            }
            if (n == 4) {
              if (Global.roaddir[currentfield]) {
                currentfield = currentfield - 1;
              }
              else {
                currentfield = currentfield + 1;

              }
              headandend();
            }
            if (n == 6) {
              collide(pod);
              return;

            }
            break;
          case 4:
            if (n == 0) {
              collide(pod);
              return;

            }
            if (n == 2) {
              collide(pod);
              return;

            }
            if (n == 4) {
              if (Global.roaddir[currentfield]) {
                currentfield = currentfield + 1;
              }
              else {
                currentfield = currentfield - 1;
              }
              headandend();
            }
            if (n == 6) {

              if (Global.roaddir[currentfield]) {
                currentfield = currentfield - 1;
              }
              else {
                currentfield = currentfield + 1;

              }
              headandend();
            }
            break;
          case 5:
            if (n == 0) {
              if (Global.roaddir[currentfield]) {
                currentfield = currentfield - 1;
              }
              else {
                currentfield = currentfield + 1;
              }
              headandend();
            }
            if (n == 2) {

              if (Global.roaddir[currentfield]) {
                currentfield = currentfield + 1;
              }
              else {
                currentfield = currentfield - 1;
              }
              headandend();
            }
            if (n == 4) {
              collide(pod);
              return;

            }
            if (n == 6) {

              collide(pod);
              return;

            }
            break;

          case 6:
            if (n == 0) {
              if (Global.roaddir[currentfield]) {
                currentfield = currentfield + 1;
              }
              else {
                currentfield = currentfield - 1;
              }
              headandend();
            }
            if (n == 2) {

              collide(pod);
              return;

            }
            if (n == 4) {
              collide(pod);
              return;

            }
            if (n == 6) {

              if (Global.roaddir[currentfield]) {
                currentfield = currentfield - 1;
              }
              else {
                currentfield = currentfield + 1;

              }
              headandend();
            }
            break;

          default:
            break;
        }
      }
    }

    PreCarPosition = car;
    if (autoturn) {
      float pointFx = (car[0] + ( -1f * (float) camSine));
      float pointFz = (car[2] + ( -1f * (float) camCosine));
      int nextfield = currentfield + 1;
      if (nextfield == 54) {
        nextfield = 0;
      }
      float nextMidx = (Global.roadpoints[nextfield][0] +
                        Global.roadpoints[nextfield][2] +
                        Global.roadpoints[nextfield][4] +
                        Global.roadpoints[nextfield][6]) / 4;
      float nextMidz = (Global.roadpoints[nextfield][1] +
                        Global.roadpoints[nextfield][3] +
                        Global.roadpoints[nextfield][5] +
                        Global.roadpoints[nextfield][7]) / 4;
      float[] car2next = VectorOps.vector(car[0] - pointFx, 0.0f,
                                          car[2] - pointFz);
      car2next = VectorOps.normalize(car2next);
      float[] next2last = VectorOps.vector(car[0] - nextMidx, 0.0f,
                                           car[2] - nextMidz);
      next2last = VectorOps.normalize(next2last);
      float dotpod = VectorOps.dotProduct(car2next, next2last);

      if (dotpod < 0.99f) {
        acspeed += 0.01;
        carspeed -= acspeed;
        // System.out.println(currentRotY);
        int currentRotYangle = (int) (RotY + turnangle);

        while ( (currentRotYangle) > 360) {
          currentRotYangle = currentRotYangle - 360;
        }
        while ( (currentRotYangle) < 0) {
          currentRotYangle = currentRotYangle + 360;
        }
        double tempcamSine = Global.sinTab[currentRotYangle];
        double tempcamCosine = Global.cosTab[currentRotYangle];

        //      double nrads = Math.toRadians(RotY + turnangle);
        //     double tempcamSine = Math.sin(nrads);
        //     double tempcamCosine = Math.cos(nrads);

        float npointFx = (car[0] + ( -1f * (float) tempcamSine));
        float npointFz = (car[2] + ( -1f * (float) tempcamCosine));

        float[] ncar2next = VectorOps.vector(car[0] - npointFx, 0.0f,
                                             car[2] - npointFz);
        ncar2next = VectorOps.normalize(ncar2next);
        float ndotpod = VectorOps.dotProduct(ncar2next, next2last);
        if (ndotpod < dotpod) {
          RotY -= turnangle;
          pod.postRotate( -turnangle, 0.0f, 0.0f, 1.0f);
        }
        else {
          RotY += turnangle;
          pod.postRotate(turnangle, 0.0f, 0.0f, 1.0f);
        }

      }
      //    System.out.println(dotpod);
    }

  }

  private void headandend() {
    if (currentfield < 0) {
      currentfield = 53;
    }
    if (currentfield == 54) {
      currentfield = 0;
    }

  }

  private void collide(Group pod) {
    carspeed = -carspeed / 1.2f;
    pod.setTranslation(PreCarPosition[0],
                       PreCarPosition[1],
                       PreCarPosition[2]);

  }

}

⌨️ 快捷键说明

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