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

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

?? ai.java

?? 手機游戲的源代碼
?? JAVA
字號:

public class AI implements Runnable{
  private int AIforce;
//  private boolean thisBallIn = false;

  public AI() {
  }

  Thread self = new Thread(this);
  synchronized public void begin() {
    self = new Thread(this);
    self.start();
  }

  public void run() {
    initThinkData();
//    AIthink(true);
    AIthink(false);
    if(a.AIHitBallsKind != 0 //分出顏色
       && a.turn > 3 //當回合大于3的時候
       ){//進行反彈思考
      if(a.hitLevel>0){
        if(a.PRINT)System.out.println("***************************************************沒有球進袋,計算反彈結果****************************************************************");
        AIthink(true);
      }
    }
    if(a.PRINT)System.out.println("###########   結束   ############");
    if (a.hitLevel < 3) {//碰撞等級小于3時,有坐標設置: dataLevel[][3] dataLevel[][4]起作用
      a.haveSet = true;
    }
    else {//碰撞等級大于等于3時,無坐標設置: dataLevel[][3] dataLevel[][4]不起作用
      a.haveSet = false;
    }
    a.thinkOver = true;
  }
  /**
   * 初始化一些思考的數據
   */
  private void initThinkData(){
    a.AIx = 8000;
    a.AIy = 0;
    a.haveSet = false;
    a.dataLevel = new int[4][7];
    a.hitLevel = 3;

    if(a.turn < 3 || a.AIHitBallsKind == a.KIND_ALL){
      AIforce = 2000;
    }
    else{
      AIforce = 1500;
    }

    if(a.AIHitBallsKind == a.KIND_ALL){
      a.dataLevel[2][0] = 1;
      a.dataLevel[2][1] = a.w/2;
      a.dataLevel[2][2] = (a.Balls[0].y/1000 == 6) ? 7000:6000;
      a.dataLevel[2][3] = 0;
      a.dataLevel[2][4] = 0;
      a.dataLevel[3][5] = 2000;
      a.dataLevel[2][6] = 0;
    }
    else{
      for (int t = 0; t < a.AIBallsID.length; t++) {
        if (a.Balls[a.AIBallsID[t]].alive) {
          a.dataLevel[3][0] = 1;
          a.dataLevel[3][1] = a.Balls[a.AIBallsID[t]].x;
          a.dataLevel[3][2] = a.Balls[a.AIBallsID[t]].y;
          a.dataLevel[3][3] = a.Balls[a.AIBallsID[t]].x;
          a.dataLevel[3][4] = a.Balls[a.AIBallsID[t]].y;
          a.dataLevel[3][5] = 2000;
          a.dataLevel[3][6] = a.AIBallsID[t];
          break;
        }
      }
    }
  }
  /**
   * 復位一些思考的數據
   */
  private void resetThinkData(){
    a.fail = false;
    a.curTrackSign = 0;
    a.thinkStop = false;//本次思考結束標志
    a.thinkEnd = false;
    a.haveSet = true;

    a.whiteBallStop = false;
    a.curBallStop = false;
    a.curBallIn = false;
    a.whiteBallIn = false;
  }

  /**
   * 設置數據
   * @param lv int 等級 0:有球能被打進 1:白球和目標球都進 2:白球撞到目標球但沒進袋 3:白球撞不到目標球
   * @param x int 方向X坐標
   * @param y int 方向Y坐標
   * @param hitx int 碰撞X坐標
   * @param hity int 碰撞Y坐標
   * @param force int 力量
   * @param s int 球號
   */
  private void setDataInLevel(int lv,int x,int y,int hitx,int hity,int force,int s){
    if (a.dataLevel[lv][0] == 0 ||
        ( (Math.abs(hitx - a.Balls[0].x) + Math.abs(hity - a.Balls[0].y)) <
         (Math.abs(a.dataLevel[lv][3] - a.Balls[0].x) + Math.abs(a.dataLevel[lv][4] - a.Balls[0].y)))
        ) {
      a.dataLevel[lv][0] = 1;
      a.dataLevel[lv][1] = x;
      a.dataLevel[lv][2] = y;
      a.dataLevel[lv][3] = hitx;
      a.dataLevel[lv][4] = hity;
      a.dataLevel[lv][5] = force;
      a.dataLevel[lv][6] = s;
    }
  }
  /**
   * 找目標球的碰撞點
   * @param ballSign byte 球號
   * @param bagSign byte 袋號
   * @return int[] 返回的結果[0]碰撞點的X坐標[1]碰撞點的Y坐標[2]碰撞點和袋的X距離[3]碰撞點和袋的Y距離
   */
  private int[] findHitSet(byte ballSign,byte bagSign){
    int[] result = new int[4];
    a.copyBallsState();
    int dtx = a.tempBalls[ballSign].x - a.bagSet[bagSign][0],
        dty = a.tempBalls[ballSign].y - a.bagSet[bagSign][1];
    int u = a.sqrt(dtx * dtx + dty * dty);
    int vx = dtx * 10000 / u,
        vy = dty * 10000 / u;
    int x = (u + a.ballD) * vx / 10000 + a.bagSet[bagSign][0],
        y = (u + a.ballD) * vy / 10000 + a.bagSet[bagSign][1];
    result[0] = x;
    result[1] = y;
    result[2] = dtx;
    result[3] = dty;
    return result;
  }
  /**
   * 找白球的方向點
   * @param x int 碰撞點的X坐標
   * @param y int 碰撞點的Y坐標
   * @param dtx int 碰撞點和袋的X距離
   * @param dty int 碰撞點和袋的Y距離
   * @param isRebound boolean 是否反彈
   * @param side int 反彈的邊號
   * @return int[] 返回的結果 [0]是否有結果[1]方向X坐標[2]方向Y坐標[3]碰撞X坐標[4]碰撞Y坐標
   */
  private int[] findStartSet(int x,int y,int dtx,int dty,boolean isRebound,int side){
    int [] result = new int[5];
    a.copyBallsState();
    int m,n;
    if(!isRebound){
      m = x - a.tempBalls[0].x;
      n = y - a.tempBalls[0].y;
      if ( (dtx * m + dty * n) < 0){
        result[0] = 1;
        result[1] = x;
        result[2] = y;
        result[3] = x;
        result[4] = y;
      }
      else{
        result[0] = 0;
      }
    }
    else{
      int x1=0,y1=0,x0=0,y0=0;
      switch(side){
        case 0:
          x1 = x;
          y1 = a.SIDE_UP-(y-a.SIDE);
          x0 = a.tempBalls[0].x;
          y0 = a.SIDE_UP-(a.tempBalls[0].y-a.SIDE_UP);
          break;
        case 1:
          x1 = a.SIDE_RIGHT+(a.SIDE_RIGHT-x);
          y1 = y;
          x0 = a.SIDE_RIGHT+(a.SIDE_RIGHT-a.tempBalls[0].x);
          y0 = a.tempBalls[0].y;
          break;
        case 2:
          x1 = x;
          y1 = a.SIDE_DOWN+(a.SIDE_DOWN-y);
          x0 = a.tempBalls[0].x;
          y0 = a.SIDE_DOWN+(a.SIDE_DOWN-a.tempBalls[0].y);
          break;
        case 3:
          x1 = a.SIDE_LEFT-(x-a.SIDE_LEFT);
          y1 = y;
          x0 = a.SIDE_LEFT-(a.tempBalls[0].x-a.SIDE_LEFT);
          y0 = a.tempBalls[0].y;
          break;
      }
      m = x-x0;
      n = y-y0;
      if ( (dtx * m + dty * n) < 0){
        result[0] = 1;
        result[1] = x1;
        result[2] = y1;
        result[3] = x;
        result[4] = y;
      }
      else{
        result[0] = 0;
      }
    }
    return result;
  }

  public void AIthink(boolean isRebound){
    if(a.PRINT)System.out.println("----------------------------------------------------");/////////
    for(byte s=0;s<a.AIBallsID.length;s++){//-----------------AI要打的球循環-----------------
      if(!a.tempBalls[a.AIBallsID[s]].alive){
        continue;
      }
      boolean thisBallIn = false;
      for (byte i = 0; i < a.bagSet.length; i++){//------------球代循環--------------------
        if(thisBallIn) break;
        int[] hitData = findHitSet(a.AIBallsID[s],i);
        for (byte j = 0;j<4;j++){//--------------------------球案邊循環---------------------------
          int[] data = findStartSet(hitData[0],hitData[1],hitData[2],hitData[3],isRebound,j);

          if (data[0] == 1) { //--------------------------------角度合適---------VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
            a.curHitSign = a.AIBallsID[s];
            a.AIx = data[3];
            a.AIy = data[4];
            resetThinkData(); //----------初始化一些狀態數據
            a.tempBalls[0].onHit(AIforce, data[1], data[2]);
            if(a.PRINT)System.out.println("================================================="); /////////
            if(a.PRINT)System.out.println("球號" + a.AIBallsID[s] + "  袋號" + i); /////////////////////////////////////////////////////
            int loop = 0;

            while (!a.thinkEnd) { //-------------while think move------------****************************************
              loop++;
              a.move(); //球進行移動
              if (a.fail) { // 碰錯球 LV3=====================================================================
                a.thinkEnd = true;
                if(a.PRINT)System.out.println("失敗"); //////////////////////////////////////////////////
              }
              else
              if (a.curBallIn && a.whiteBallStop) { //目標球進袋 LV0============================================
                thisBallIn = true;
                a.thinkEnd = true;
                a.hitLevel = 0;
                setDataInLevel(0, data[1], data[2], data[3], data[4], AIforce,a.curHitSign);
                if(a.PRINT)System.out.println("成功!!!▄︻┹═一▄︻┹═一▄︻┹═一▄︻┹═一▄︻┹═一▄︻┹═一"); /////////////////////////////////////////////////
                if (a.AIHitBallsKind == a.KIND_ALL || //打所有球的時候得到坐標就確定
                    isRebound //反彈的時候有了坐標就確定
                    ) {
                  return;
                }
              }
              else
              if (a.curBallIn && a.whiteBallIn) { //全進 LV1=====================================================
                a.thinkEnd = true;
                if(a.PRINT)System.out.println("全進袋"); /////////////////////////////////////////////////////////

//                if((!isRebound && a.hitLevel>0)||(isRebound && a.hitLevel>1)){
//                  a.hitLevel = 1;
//                  setDataInLevel(1, data[1], data[2], data[3], data[4], AIforce, a.curHitSign);
//                }
                if(isRebound){//反彈的時候
                  if(a.hitLevel>1){//當在非反彈的時候沒有兩球都進的情況進入
                    a.hitLevel = 1;
                    setDataInLevel(1, data[1], data[2], data[3], data[4], AIforce, a.curHitSign);
                  }
                }
                else{//不是反彈的情況
                  if (a.hitLevel > 0 ) {//當沒有成功的情況進入
                    a.hitLevel = 1;
                    setDataInLevel(1, data[1], data[2], data[3], data[4], AIforce, a.curHitSign);
                  }
                }

              }
              else
              if (a.thinkStop || (a.curBallStop && a.curTrackSign == a.curHitSign)) { //全沒進 LV2====================================
                a.thinkEnd = true;
                if(a.PRINT)System.out.println("碰到球,沒進袋"); //////////////////////////////////////////////////
                if(a.PRINT){if (!a.thinkStop) System.out.println("//////////////////力量不夠//////////////////////////////");}
                if(!isRebound){
                  if (a.hitLevel > 1) {
                    a.hitLevel = 2;
                    setDataInLevel(2, data[1], data[2], data[3], data[4], AIforce, a.curHitSign);
                  }
                }
                else{
                  if (a.hitLevel > 2) {
                    a.hitLevel = 2;
                    setDataInLevel(2, data[1], data[2], data[3], data[4], AIforce, a.curHitSign);
                  }
                }
              }
              else
              if (loop > 110) {//=============================超過循環時間========================================================
                a.thinkEnd = true;
              }
            } //-------------------------while think move end-----------**********************************************

            if(a.PRINT)System.out.println("loop = " + loop); /////////////////////////////////////////////////
          } //------ 角度合適 end-----------------VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
          if(!isRebound){
            break;
          }
        }//------------邊循環 end-----------------------------------------------
      }//------------球代循環  end ----------------------------------------------
    }//-----------------AI要打的球循環   end  ---------------------------
  }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线影院一区二区| 国产成人免费在线视频| 精品在线一区二区三区| 成人手机在线视频| 91精品国产乱码久久蜜臀| 亚洲色欲色欲www| 乱中年女人伦av一区二区| 色婷婷久久久久swag精品| 91福利精品第一导航| 国产精品看片你懂得| 国产一区二区三区电影在线观看 | 日本麻豆一区二区三区视频| 成人黄色小视频在线观看| 777a∨成人精品桃花网| 一区二区三区丝袜| 久热成人在线视频| 蜜桃av噜噜一区二区三区小说| 亚洲精品免费视频| 亚洲精品自拍动漫在线| 国产suv精品一区二区三区| 日韩午夜小视频| 五月综合激情网| 91国内精品野花午夜精品| 国产精品国产自产拍高清av| 国产精品资源网站| 国产亚洲美州欧州综合国| 久久激情五月激情| 日韩免费看网站| 精一区二区三区| 国产日韩精品久久久| 国产一区二区免费看| 国产日本一区二区| 成人小视频免费观看| 国产日韩欧美综合一区| 成人激情免费电影网址| 一区免费观看视频| 色婷婷久久久亚洲一区二区三区 | 日韩成人一区二区| 91精品在线免费| 欧美aaa在线| 欧美精品一区在线观看| 国产精品中文欧美| 亚洲欧洲综合另类| 欧美性极品少妇| 青青草97国产精品免费观看| 欧美成人艳星乳罩| 国产一区二区三区免费看| 国产精品每日更新在线播放网址| 91精品国产全国免费观看| 亚洲18色成人| 欧美一区二区三区不卡| 国产一区二区h| 亚洲视频在线一区观看| 欧洲亚洲国产日韩| 久久国产尿小便嘘嘘| 国产精品久久久久影院| 欧美日韩在线观看一区二区 | 午夜伊人狠狠久久| 精品毛片乱码1区2区3区| 高清成人免费视频| 一区二区三区在线不卡| 日韩欧美视频一区| 99久久久久免费精品国产 | 国产精品理论片| 欧美日本一区二区三区四区| 亚洲午夜久久久久久久久电影院| 欧美日韩国产中文| 精品国产伦理网| 热久久免费视频| 亚洲精品一区二区三区蜜桃下载| 国产成人一区二区精品非洲| 亚洲欧美一区二区三区国产精品| 91麻豆精品国产91久久久久久久久 | 国产精品久久福利| 91精品国产欧美一区二区成人 | 国产精品一区在线观看乱码 | 国产一区二区三区久久久| 夜夜嗨av一区二区三区四季av| 欧美一级欧美三级在线观看| 国产成人99久久亚洲综合精品| 成人av在线播放网站| 日本aⅴ亚洲精品中文乱码| 欧美激情在线一区二区| 欧美一区二区三区在线电影| 成人精品一区二区三区中文字幕| 全国精品久久少妇| 亚洲午夜精品网| 国产精品久久久久久妇女6080| 欧美一级片在线看| 欧美色图在线观看| 色综合网色综合| 成人av网站在线观看| 国产一区二区三区久久悠悠色av| 三级欧美韩日大片在线看| 亚洲黄色在线视频| 综合欧美一区二区三区| 中文字幕av一区 二区| 欧美mv和日韩mv的网站| 欧美区一区二区三区| 在线观看区一区二| 色婷婷一区二区三区四区| 不卡的电视剧免费网站有什么| 国产精品综合在线视频| 国产永久精品大片wwwapp | 日韩欧美成人激情| 色婷婷久久久综合中文字幕| 亚洲欧美日韩在线| 国产精品久久久久一区二区三区 | 在线视频欧美精品| 97久久超碰国产精品| 成人丝袜视频网| 国产成人在线视频网站| 国产福利一区二区三区视频在线 | 日韩一级片网站| 欧美精品久久天天躁| 欧美日韩在线不卡| 日韩一区二区在线看| 91精品国产入口| 欧美mv日韩mv国产网站app| 欧美精品一区二区三区在线| 亚洲大片免费看| 91精品国产综合久久久久久久| 成人午夜激情在线| 成人激情动漫在线观看| 一本大道久久a久久精二百| 在线一区二区三区四区五区| 91黄视频在线| 欧美精品tushy高清| 精品免费国产一区二区三区四区| 精品女同一区二区| 中文字幕亚洲在| 亚洲成人资源在线| 久久福利视频一区二区| 国产麻豆成人精品| av亚洲精华国产精华精| 91成人在线观看喷潮| 91麻豆精品91久久久久久清纯| 欧美v国产在线一区二区三区| 久久婷婷久久一区二区三区| 成人欧美一区二区三区在线播放| 亚洲综合999| 国产在线不卡视频| 色婷婷av一区二区三区软件| 欧美精品tushy高清| 国产欧美日本一区视频| 亚洲综合偷拍欧美一区色| 乱中年女人伦av一区二区| 成人综合婷婷国产精品久久免费| 91免费版在线看| 欧美不卡一区二区三区| 成人欧美一区二区三区在线播放| 日韩av一区二区三区四区| 国产成人av一区二区| 精品视频在线免费看| 久久久精品国产99久久精品芒果| 一区二区三区四区精品在线视频| 日本成人中文字幕在线视频| 懂色av一区二区在线播放| 在线不卡中文字幕| 中文字幕永久在线不卡| 麻豆精品视频在线观看视频| 最好看的中文字幕久久| 精品一区二区三区免费毛片爱| 91蝌蚪porny| 一区二区三区在线影院| 色哟哟精品一区| 亚洲自拍另类综合| 懂色av噜噜一区二区三区av| 精品va天堂亚洲国产| 国产精品久久久久久久浪潮网站 | 亚洲欧美福利一区二区| 美日韩一区二区| 欧美影院精品一区| 国产精品嫩草久久久久| 国内精品视频一区二区三区八戒| 一本大道久久a久久精品综合| 久久久久久久久免费| 亚洲午夜久久久久久久久电影网 | 一区二区三区中文在线观看| 国产成人av资源| 久久午夜色播影院免费高清 | 精品一区二区三区免费毛片爱| 一本高清dvd不卡在线观看| 国产日韩三级在线| 国模一区二区三区白浆| 91精品国产品国语在线不卡| 亚洲一区二区av在线| 91成人免费电影| 一区二区三区在线播| 一本大道久久a久久综合婷婷| 欧美高清在线视频| 国产不卡一区视频| 国产欧美精品一区二区色综合 | 国产欧美久久久精品影院| 精品一区二区成人精品| 日韩午夜小视频| 精品一区二区三区视频| 日韩精品一区二区三区四区视频| 日韩av成人高清| 欧美军同video69gay|