亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ball.java

?? 手機游戲的源代碼
?? JAVA
字號:
import javax.microedition.lcdui.*;

public class Ball {
  int x, y; //坐標
  int spd; //速度
  int Vx, Vy; //速度分量

  boolean moving; //是否移動
  int nx, ny; //下一次的坐標
  byte arraySign; //球在數組中的編號
  boolean onBag;//是否在袋上
  boolean alive; //是否在桌上
  int standForceX, standForceY;//外力的X,Y值
  int hittedBalls;//碰到過的球
  byte style;//球的樣式
  byte ballSign;


  public Ball(Ball ball) {
    this.x = ball.x;
    this.y = ball.y;
    nx = ball.nx;
    ny = ball.ny;
    Vx = ball.Vx;
    Vy = ball.Vy;
    arraySign = ball.arraySign;
    alive = ball.alive;
    standForceX = ball.standForceX;
    standForceY = ball.standForceY;
    hittedBalls = ball.hittedBalls;
    onBag = ball.onBag;
    moving = ball.moving;
    style = ball.style;
    ballSign = ball.ballSign;

  }
  /**
   * @param x int X坐標
   * @param y int Y坐標
   * @param s int 編號
   * @param t int 樣式
   */
  public Ball(int x, int y, int as, int bs) {
    this.x = x * 100;
    this.y = y * 100;
    nx = x * 100;
    ny = y * 100;
    Vx = 0;
    Vy = 0;
    arraySign = (byte) as;
    alive = true;
    standForceX = 0;
    standForceY = 0;
    hittedBalls = 0x0;
    onBag = false;
    moving = false;
    ballSign = (byte) bs;
    switch(bs){
      case 0: style = a.STYLE_WHITE;break;
      case 8: style = a.STYLE_BLACK;break;
      default:
        if( bs < 8){
          style = a.STYLE_SOLID;
        }
        else{
          style = a.STYLE_STRIPE;
        }
    }
  }
  /**
   * 畫球
   * @param g Graphics
   * @param ballImage Image
   */
  public void drawBall(Graphics g, Image ballImage) {
    g.drawImage(ballImage, x / 100, y / 100, g.HCENTER | g.VCENTER);
    g.setColor(0xffffff);
    g.setFont(Font.getFont(0, 0, Font.SIZE_SMALL));
    g.drawString("" + arraySign, x / 100, y / 100 - 6, g.HCENTER | g.TOP);
    if (onBag) {
//      spd = 0;
//      a.setBallsState(arraySign,false);
      onBag = false;
    }
  }
  /**
   * 白球受力
   * @param force int
   * @param x1 int
   * @param y1 int
   */
  public void onHit(int force, int x1, int y1) {
    a.setBallsState(0, true);
    int s = a.sqrt( (x1 - x) * (x1 - x) + (y1 - y) * (y1 - y));
    Vx = (x1 - x) * 10000 / s;
    Vy = (y1 - y) * 10000 / s;
    spd = force;
    moving = true;
  }

  /**
   * 移動一湞
   */
  public void move() {
    spd = spd * 97 / 100;
    if (spd <= 70) {
      a.setBallsState(arraySign, false);
      spd = 0;
      moving = false;
      if (a.think) { //-------------think---------------------------------------
        if (arraySign == 0) {
          a.whiteBallStop = true;
        }
        else
        if (arraySign == a.curHitSign) {
          a.curBallStop = true;
        }
      } //------------------------end think--------------------------------
    }
  }

  /**
   * 移動一步
   */
  public void moveStep() {
    x = nx;
    y = ny;
    if (inBag()) {
      if (a.think) { //---------think-----------------------------------------
        if (this.arraySign == a.curHitSign) {
          a.curBallIn = true;
        }
        else
        if (this.arraySign == 0) {
          a.whiteBallIn = true;
          if (a.curTrackSign == 0) {
            a.fail = true;
          }
        }
      } //--------------------end think--------------------------------------
      else{
        if(!a.firstIn){
//          a.firstIn = true;
          switch(this.style){
            case a.STYLE_WHITE:
              break;
            case a.STYLE_BLACK:
              break;
            case a.STYLE_SOLID:
              a.setTargetBalls(a.isPlayerTurn,a.KIND_SOLID);
              a.setTargetBalls(!a.isPlayerTurn,a.KIND_STRIPE);
              break;
            case a.STYLE_STRIPE:
              a.setTargetBalls(a.isPlayerTurn,a.KIND_STRIPE);
              a.setTargetBalls(!a.isPlayerTurn,a.KIND_SOLID);
              break;
          }
        }
      }
      spd = 0;
      a.setBallsState(arraySign, false);
      alive = false;
    }
    resetData();
  }
  /**
   * 復位一些數據
   */
  public void resetData() {
    hittedBalls = 0;
    standForceX = 0;
    standForceY = 0;
  }
  /**
   * 計算和球的碰撞,得到一個新的狀態
   */
  public void getNextPost() {
    for (int i = 0; i < a.tempBalls.length; i++) {
      if (i == arraySign
          || !a.tempBalls[i].alive
          || ( (hittedBalls >>> i) & 0x00000001) == 1
          ) {
        continue;
      }
      if (isNear(a.tempBalls[i])) {
        hit(a.tempBalls[i], true);
      }
    }
  }
  /**
   * 得到下一個不和球碰撞的坐標,和邊碰撞的結果實現
   */
  public void getNextSet() {
    nx = x + spd * Vx / (a.t * 10000);
    ny = y + spd * Vy / (a.t * 10000);
    if (nx <= a.SIDE) {
      if ( (ny > 1960 && ny < 9134) || ny > 10866 && ny < 18040) {
        nx += (a.SIDE - nx) * 2;
        Vx = Math.abs(Vx);
      }
    }
    if (nx >= a.w - a.SIDE) {
      if ( (ny > 1960 && ny < 9134) || ny > 10866 && ny < 18040) {
        nx -= (nx - a.w + a.SIDE) * 2;
        Vx = -Math.abs(Vx);
      }
    }
    if (ny <= a.SIDE) {
      if (nx > 1960 && nx < 13040) {
        ny += (a.SIDE - ny) * 2;
        Vy = Math.abs(Vy);
      }
    }
    if (ny >= a.h - a.SIDE) {
      if (nx > 1960 && nx < 13040) {
        ny -= (ny - a.h + a.SIDE) * 2;
        Vy = -Math.abs(Vy);
      }
    }
  }
  /**
   * 判斷是否撞到了其他球
   * @param ball Ball 被撞的球
   * @return boolean 返回是否撞到
   */
  private boolean isNear(Ball ball) {
    int dtx = Math.abs(nx - ball.nx);
    int dty = Math.abs(ny - ball.ny);
    if (dtx <= a.ballD && dty <= a.ballD) {
      if ( ( (dtx * dtx) + (dty * dty)) <= a.ballDD) {
        return true;
      }
    }
    return false;
  }
  /**
   * 撞到其他的球
   * @param ball Ball 撞到的球
   * @param initiative boolean 是否是主動撞到的
   */
  public void hit(Ball ball, boolean initiative) {
    if (a.think) { //--------------think--------------------------------------------------------
      if (a.curTrackSign == 0 && arraySign == 0) { //---------------當前目標球為白球
        if (ball.arraySign == a.curHitSign) { //---------撞到的球是目標球
          a.curTrackSign = a.curHitSign; //-------設置當前跟蹤目標球
          a.curBallStop = false;
        }
        else { //----------------------------------撞到的球非目標球
          if (a.PRINT) System.out.println("!!!!!!!!!!" + "應該碰:" + a.curHitSign +"  結果是" + ball.arraySign); ///////////////
          a.fail = true; //-----------------------失敗
          a.haveSet = false;
        }
      }
      else
      if (a.curTrackSign == a.curHitSign && arraySign == a.curHitSign) { //----------------------------------當前目標球為被碰撞球
        if (ball.arraySign != 0) { //------------------撞到的不是白球
          a.thinkStop = true; //----------------思考停止
          if (a.PRINT) System.out.println(
              "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!碰到的球:" + ball.arraySign +"  跟蹤的球:" + a.curTrackSign);
        }
      }
      if (ball.arraySign == 0) {
        a.whiteBallStop = false;
      }
    } //------------------------end think-------------------------------------------------------

    a.setBallsState(arraySign, true); //將自己的狀態改為動態
    hittedBalls |= (0x00000001 << ball.arraySign);
    boolean haveSpd = false;

    if (moving) {
      int c = 0, d = 0;
      c = ball.nx - nx;
      d = ball.ny - ny;

//      if(a.haveSet && ball.arraySign == a.curHitSign){//-------AI打中正確的球時-------
      if (a.haveSet) {
        if (a.think) {
          if (ball.arraySign == a.curHitSign && this.arraySign == 0) {
            c = ball.nx - a.AIx;
            d = ball.ny - a.AIy;
          }
        }
        else {
          if (ball.arraySign == (byte) a.dataLevel[a.hitLevel][6] && this.arraySign == 0) {
            c = ball.nx - a.dataLevel[a.hitLevel][3];
            d = ball.ny - a.dataLevel[a.hitLevel][4];
          }
        }
        a.haveSet = false;
      }

      int m = spd * Vx / 10200,
          n = spd * Vy / 10200;

      int temp0 = c * m + d * n;
      if (temp0 > 0) {
        int temp1 = c * c + d * d;
        int x1 = c * temp0 / temp1,
            y1 = d * temp0 / temp1;
        int x0 = m - x1,
            y0 = n - y1;
        ball.addForce(x1, y1);
        this.addForce(x0, y0);
      }
      else {
        haveSpd = true;
      }
    }
    if (initiative) {
      ball.hit(this, false);
      composeForce(haveSpd);
    }
    else {
      composeForce(haveSpd);
      return;
    }
  }

  /**
   * 給球加一個力量
   * @param forceX int X力量
   * @param forceY int Y力量
   */
  public void addForce(int forceX, int forceY) {
    standForceX += forceX;
    standForceY += forceY;
  }

  /**
   * 碰撞后計算合力
   * @param haveSpeed boolean 是否保留自己之前的速度
   */
  public void composeForce(boolean haveSpeed) {
    if (haveSpeed) {
      standForceX += (spd * Vx / 10000);
      standForceY += (spd * Vy / 10000);
    }
    spd = a.sqrt(standForceX * standForceX + standForceY * standForceY);
    if (spd <= 80) {
      spd = 0;
      Vx = 0;
      Vy = 0;
      moving = false;
    }
    else {
      Vx = standForceX * 10000 / spd;
      Vy = standForceY * 10000 / spd;
      moving = true;
    }

    standForceX = 0;
    standForceY = 0;
  }
  /**
   * 球進袋
   * @return boolean 是否進袋
   */
  public boolean inBag() {
    int dtx, dty;
    if (x <= 1960) {

      if (y >= 9134 && y <= 10866) { //1
        dtx = x - 500;
        dty = y - 10000;
        if ( (dtx * dtx + dty * dty) < 1000000) {
          x = 1100;
          y = 10000;
          onBag = true;
          return true;
        }
      }
      else if (y <= 1960) { //0
        dtx = x;
        dty = y;
        if ( (dtx * dtx + dty * dty) < 4840000) {
          x = 1100;
          y = 1100;
          onBag = true;
          return true;
        }
      }
      else if (y >= 18040) { //2
        dtx = x;
        dty = y - 20000;
        if ( (dtx * dtx + dty * dty) < 4840000) {
          x = 1100;
          y = 18900;
          onBag = true;
          return true;
        }
      }
    }
    else if (x >= 13040) {
      if (y >= 9134 && y <= 10866) { //4
        dtx = x - 14500;
        dty = y - 10000;
        if ( (dtx * dtx + dty * dty) < 1000000) {
          x = 13900;
          y = 10000;
          onBag = true;
          return true;
        }
      }
      else if (y <= 1960) { //3
        dtx = x - 15000;
        dty = y;
        if ( (dtx * dtx + dty * dty) < 4840000) {
          x = 13900;
          y = 1100;
          onBag = true;
          return true;
        }
      }
      else if (y >= 18040) { //5
        dtx = x - 15000;
        dty = y - 20000;
        if ( (dtx * dtx + dty * dty) < 4840000) {
          x = 13900;
          y = 18900;
          onBag = true;
          return true;
        }
      }
    }
    return false;
  }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本色道a无线码一区v| 欧美成人r级一区二区三区| 欧美日韩美少妇| 欧美www视频| 伊人性伊人情综合网| 国产馆精品极品| 日韩亚洲欧美一区二区三区| 亚洲欧美aⅴ...| 国产精品亚洲午夜一区二区三区| 欧美色网站导航| 国产精品理论片在线观看| 精品综合免费视频观看| 欧美日韩在线精品一区二区三区激情| 欧美激情综合在线| 国产精品一区二区三区99| 91麻豆精品国产无毒不卡在线观看| 亚洲欧洲另类国产综合| 国产不卡在线一区| 久久久777精品电影网影网| 日韩国产欧美一区二区三区| 欧美在线观看18| 一区二区在线电影| 97精品久久久久中文字幕| 国产色一区二区| 国产激情一区二区三区桃花岛亚洲| 日韩一级完整毛片| 蜜臀va亚洲va欧美va天堂| 欧美福利视频导航| 图片区小说区国产精品视频| 欧美视频三区在线播放| 夜夜精品视频一区二区| 欧洲精品一区二区三区在线观看| 中文字幕一区免费在线观看| 成人精品一区二区三区中文字幕| 中文一区一区三区高中清不卡| 国产精品资源在线| 国产欧美精品一区二区色综合朱莉| 国产伦精品一区二区三区免费迷 | 美美哒免费高清在线观看视频一区二区| 欧美三级在线播放| 天天综合日日夜夜精品| 在线播放亚洲一区| 久久99蜜桃精品| 久久美女高清视频| 成人性生交大片免费| 亚洲欧美另类久久久精品 | 777xxx欧美| 久99久精品视频免费观看| 2024国产精品视频| 成a人片亚洲日本久久| 亚洲黄色片在线观看| 51午夜精品国产| 国产在线视频不卡二| 欧美国产国产综合| 欧美性猛交xxxxxx富婆| 麻豆一区二区在线| 国产婷婷色一区二区三区| 97超碰欧美中文字幕| 亚洲成a人片在线观看中文| 精品国产乱码久久久久久影片| 国产一区二区三区免费在线观看| 中文字幕一区视频| 91精品国产综合久久精品性色| 国产伦精品一区二区三区免费| 亚洲欧洲美洲综合色网| 欧美一级艳片视频免费观看| 高清shemale亚洲人妖| 亚洲图片欧美视频| 国产午夜亚洲精品理论片色戒| 日本精品一区二区三区高清| 久国产精品韩国三级视频| 亚洲精品免费一二三区| 久久综合999| 欧美日韩久久一区二区| 国产91色综合久久免费分享| 午夜欧美视频在线观看| 日本一区二区三区高清不卡| 欧美久久久影院| www.成人网.com| 麻豆精品久久精品色综合| 亚洲欧洲av一区二区三区久久| 日韩欧美精品在线| 色婷婷一区二区三区四区| 蜜桃精品在线观看| 一区二区视频在线看| 久久精品人人做人人综合| 51午夜精品国产| 91官网在线观看| 国产成人在线观看免费网站| 日韩精品欧美成人高清一区二区| 成人欧美一区二区三区白人 | 欧美人妖巨大在线| 不卡一区中文字幕| 国产乱子轮精品视频| 麻豆专区一区二区三区四区五区| 亚洲曰韩产成在线| 国产精品免费aⅴ片在线观看| 精品乱人伦小说| 91精品国产丝袜白色高跟鞋| 精品视频一区二区三区免费| 日本乱码高清不卡字幕| 成人av网站在线| 国产成人免费在线观看| 精品一区二区三区视频在线观看| 丝袜亚洲精品中文字幕一区| 亚洲特黄一级片| 日韩美女视频一区二区 | www.亚洲色图| 成人性生交大片| 成人久久视频在线观看| 丁香亚洲综合激情啪啪综合| 国产精品一区一区| 国产成人精品影院| 国产福利91精品一区| 国产一本一道久久香蕉| 国产一区二区三区观看| 精品亚洲免费视频| 国产成+人+日韩+欧美+亚洲| 成人永久看片免费视频天堂| 成人午夜激情视频| 色乱码一区二区三区88| 欧洲一区二区av| 欧美一区二区三区婷婷月色| 欧美成va人片在线观看| 2023国产精品| 亚洲同性同志一二三专区| 亚洲欧美成aⅴ人在线观看| 亚洲综合色成人| 日韩中文字幕1| 国产专区综合网| av中文一区二区三区| 91久久一区二区| 这里只有精品99re| 久久综合九色综合欧美就去吻 | 91婷婷韩国欧美一区二区| a级精品国产片在线观看| 91久久久免费一区二区| 日韩一二三四区| 国产精品视频yy9299一区| 亚洲福利一二三区| 九九热在线视频观看这里只有精品| 国产999精品久久久久久绿帽| 91网上在线视频| 欧美一级高清片在线观看| 无吗不卡中文字幕| 国产一区二区三区高清播放| 97久久超碰精品国产| 欧美日本一道本| 中国av一区二区三区| 爽好久久久欧美精品| 国产乱子轮精品视频| 欧美网站大全在线观看| 久久久午夜精品| 亚洲国产美女搞黄色| 国产成人免费视频一区| 欧美日韩精品一区二区在线播放| 久久精品欧美日韩| 午夜精品久久久久久久久| 国产成人av影院| 91精品国产综合久久久久久 | 99国产精品国产精品毛片| 欧美一二三区在线观看| 日韩理论片网站| 国产精品资源在线观看| 欧美肥妇毛茸茸| 亚洲乱码中文字幕综合| 丰满放荡岳乱妇91ww| 日韩欧美一区二区在线视频| 亚洲精品中文在线观看| 成人午夜在线免费| 欧美精品一区二区在线播放| 亚洲国产欧美在线| 色美美综合视频| 成人欧美一区二区三区小说| 国产精品538一区二区在线| 91精品国产欧美日韩| 亚洲一区二区在线视频| av电影天堂一区二区在线| 久久亚洲精华国产精华液| 毛片一区二区三区| 6080yy午夜一二三区久久| 亚洲精品欧美在线| k8久久久一区二区三区| 国产婷婷色一区二区三区四区| 免费看日韩精品| 欧美日韩成人在线| 亚洲图片欧美综合| 欧美色图天堂网| 一区二区三区欧美日| 91视频国产观看| 亚洲三级在线免费| 91亚洲国产成人精品一区二三| 国产精品萝li| 99re在线精品| 综合久久国产九一剧情麻豆| av男人天堂一区| 亚洲精品视频一区| 欧美日韩一区小说| 亚洲电影一级黄| 正在播放一区二区|