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

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

?? obstacles.java

?? Reilly Killer Game Programming in Java書的源代碼
?? JAVA
字號:

// Obstacles.java
// Andrew Davison, April 2005, ad@fivedots.coe.psu.ac.th

/* Obstacles stores a 2D boolean array (obs) representing the
   XZ plane. The row index is the z-axis, the column index
   is the x-axis. obs[0][0] is the back left hand corner of
   the plane, which is the (x,z) point (0-FLOOR_LEN/2, 0-FLOOR_LEN/2).

   Obstacles can only be positioned at integer positions due
   to the use of array subscripts to mark the obstacle positions.
*/

import java.util.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.*;


public class Obstacles
{
  private final static float RADIUS = 0.1f;   // radius of obstacle
  private final static float HEIGHT = 1.0f;   // height of obstacle

  private final static int FLOOR_LEN = 20;  
      // should be the same as the floor size in CheckerFloor, and be even

  // colours for obs material
  private final static Color3f black = new Color3f(0.0f, 0.0f, 0.0f);
  private final static Color3f specular = new Color3f(1.0f, 1.0f, 1.0f);
  private final static Color3f red = new Color3f(0.9f, 0.1f, 0.2f);


  private boolean obs[][];    // whether a (x,z) has an obstacle
  private BoundingSphere obsBounds[][];   // the bounding sphere for obs
  private Group obsGroup;     // group of 3d obstacles shown in world


  public Obstacles()
  {
    obs = new boolean[FLOOR_LEN+1][FLOOR_LEN+1];    // larger than FLOOR_LEN*FLOOR_LEN
    obsBounds = new BoundingSphere[FLOOR_LEN+1][FLOOR_LEN+1];
    for (int z=0; z <= FLOOR_LEN; z++)
      for(int x=0; x <= FLOOR_LEN; x++) {
        obs[z][x] = false;
        obsBounds[z][x] = null;
      }

    obsGroup = new Group();

  }  // end of Obstacles()


  public void store(String line)
  /* The line will have the format:
        (x1,z1) (x2,z2) ...
  */
  {
    int x=0, z=0;
    String coordStr;
    StringTokenizer points;
    StringTokenizer coords = new StringTokenizer(line);
    while (coords.hasMoreTokens()) {
      coordStr = coords.nextToken();    // should be a single (x,z)
      points = new StringTokenizer(coordStr, "(,)");
      try {
        x = Integer.parseInt(points.nextToken());
        z = Integer.parseInt(points.nextToken());
      }
      catch (NumberFormatException ex){ 
        System.out.println("Incorrect format for obstacle data in tours file"); 
        break;
      } 
      markObstacle(x,z);
    }
  }  // end of store()


  private void markObstacle(int x, int z)
  {
    if ((x < -FLOOR_LEN/2) || (x > FLOOR_LEN/2)) {
      System.out.println("Obstacle x point out of bounds: " + x);
      x = 0;
    }
    if ((z < -FLOOR_LEN/2) || (z > FLOOR_LEN/2)) {
      System.out.println("Obstacle z point out of bounds: " + z);
      z = 0;
    }
    obs[z+(FLOOR_LEN/2)][x+(FLOOR_LEN/2)] = true;
    obsBounds[z+(FLOOR_LEN/2)][x+(FLOOR_LEN/2)] =
			new BoundingSphere( new Point3d(x, 0.0, z), RADIUS);

   obsGroup.addChild( makeObs(x, z));

  }  // end of markObstacle()


  public void print()
  {
    // header - markers for each 5 units, and a line
    for(int x=(-FLOOR_LEN/2); x <= (FLOOR_LEN/2); x++) {
      if (x == 0)
        System.out.print("0");
      else if (x%5 == 0)
        System.out.print("*");
      else
        System.out.print(" ");
    }
    System.out.println("");
    for(int x=(-FLOOR_LEN/2); x <= (FLOOR_LEN/2); x++)
      System.out.print("-");
    System.out.println("");

    // body of table: O's and a z-axis at the end of each line
    for (int z=0; z <= FLOOR_LEN; z++) {
      for(int x=0; x <= FLOOR_LEN; x++) {
        if (obs[z][x])
          System.out.print("O");
        else
          System.out.print(" ");
      }
      if ((z-FLOOR_LEN/2)%5 == 0)
        System.out.println("| " + (z-FLOOR_LEN/2));
      else 
        System.out.println("|");
    }

    // footer: a line
    for(int x=(-FLOOR_LEN/2); x <= (FLOOR_LEN/2); x++)
      System.out.print("-");
    System.out.println("");
  }  // end of print()


  public boolean nearObstacle(Point3d pos, double radius)
  /* posn is not allowed to be outside the floor area.
     Also, every obstacle's bounding sphere is checked against pos
  */
  {
    if ((pos.x < -FLOOR_LEN/2) || (pos.x > FLOOR_LEN/2) ||
        (pos.z < -FLOOR_LEN/2) || (pos.z > FLOOR_LEN/2))     // off the floor
      return true;

    // check if near any obstacles
    BoundingSphere bs = new BoundingSphere( pos, radius);
    for (int z=0; z <= FLOOR_LEN; z++)
      for(int x=0; x <= FLOOR_LEN; x++)
        if (obs[z][x]) {
          if (obsBounds[z][x].intersect(bs))
            return true;
        }
     return false;
   }  // end of nearObstacle()



  private TransformGroup makeObs(int x, int z)
  // a red cylinder whose base is on (x,z)
  {
    // create obstacle node
    Appearance obsApp = new Appearance();
    Material mat = new Material(black, black, red, specular, 100.f);
    mat.setLightingEnable(true);
    obsApp.setMaterial( mat );
    Cylinder obs = new Cylinder( RADIUS, HEIGHT, 
						Cylinder.GENERATE_NORMALS, obsApp);

    // fix obs's position
    TransformGroup posnTG = new TransformGroup();
    Transform3D trans = new Transform3D();
    trans.setTranslation( new Vector3d(x, HEIGHT/2, z) );
    posnTG.setTransform(trans);
    posnTG.addChild(obs); 
    return posnTG;
  }  // end of makeObs()


  public Group getObsGroup()
  {  return obsGroup;  }



}  // end of Obstacles class

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美腿丝袜在线亚洲一区| 欧美精品在线观看播放| 欧美日韩视频专区在线播放| 精品少妇一区二区三区日产乱码 | 欧美色综合天天久久综合精品| 日韩午夜电影av| 亚洲美女免费在线| 国产不卡在线视频| 日韩一级完整毛片| 亚洲黄色av一区| 成人动漫一区二区| 久久蜜桃av一区二区天堂| 日韩国产欧美三级| 欧美日韩一区二区三区在线看| 国产欧美视频一区二区| 精品一区二区精品| 91精品免费在线观看| 亚洲成人手机在线| 在线观看区一区二| 国产精品国产三级国产aⅴ原创 | 欧美日韩国产一级| 亚洲欧美日韩系列| www.欧美色图| 国产精品素人视频| 成人av在线资源网站| 国产欧美一区二区在线观看| 国产综合久久久久影院| 日韩免费高清视频| 美日韩一区二区三区| 91麻豆精品国产自产在线观看一区| 亚洲欧美国产三级| 91国偷自产一区二区开放时间 | 国产一区二区在线观看免费| 91麻豆精品国产综合久久久久久| 亚洲午夜电影在线| 欧美日韩另类国产亚洲欧美一级| 亚洲一区二区影院| 欧美三级中文字幕在线观看| 性欧美大战久久久久久久久| 欧美亚洲国产怡红院影院| 亚洲一区二区偷拍精品| 色噜噜夜夜夜综合网| 亚洲午夜久久久久久久久久久| 91成人国产精品| 午夜精品久久久久久久99水蜜桃 | 亚洲国产精品视频| 欧美一三区三区四区免费在线看| 天天做天天摸天天爽国产一区| 欧美日韩国产综合视频在线观看| 五月激情综合色| 欧美成人激情免费网| 国产精品91一区二区| 国产精品欧美一级免费| 欧美视频中文一区二区三区在线观看 | 亚洲天堂中文字幕| 欧美日韩中文字幕精品| 精品一区二区三区久久久| 久久久久久久久久久久久夜| 91麻豆国产精品久久| 亚洲成av人片www| 26uuu欧美| 色综合久久中文综合久久97 | 欧美午夜精品一区二区蜜桃| 亚洲福利视频一区| 久久精品亚洲麻豆av一区二区| 91视频国产观看| 麻豆91在线播放免费| 中文字幕 久热精品 视频在线| 欧美色成人综合| 懂色av中文一区二区三区| 亚洲国产精品一区二区www在线 | 欧美精选一区二区| 国产成人精品aa毛片| 亚洲一区二区欧美日韩| 久久亚洲一区二区三区明星换脸| 色悠悠亚洲一区二区| 精品在线播放免费| 亚洲狠狠爱一区二区三区| 久久久精品一品道一区| 91电影在线观看| 成人av在线资源网站| 麻豆freexxxx性91精品| 亚洲综合免费观看高清完整版在线 | 成人国产一区二区三区精品| 亚洲成人午夜电影| 亚洲欧美日韩在线不卡| 日韩一区二区三区免费看| 99精品欧美一区二区蜜桃免费| 另类综合日韩欧美亚洲| 亚洲一区二区3| 国产精品久久毛片av大全日韩| 日韩精品一区二区三区在线| 欧美午夜一区二区三区免费大片| 国v精品久久久网| 久久精品免费看| 天堂在线一区二区| 性欧美疯狂xxxxbbbb| 亚洲视频资源在线| 中文字幕在线观看一区| xf在线a精品一区二区视频网站| 欧美日韩国产一级| 欧美在线免费视屏| 9i在线看片成人免费| 国产成人在线影院| 国产九色精品成人porny| 美国毛片一区二区三区| 日韩和欧美的一区| 免费在线看成人av| 日韩制服丝袜先锋影音| 天天影视色香欲综合网老头| 亚洲激情综合网| 一区二区激情视频| 一区二区三区免费在线观看| 日韩美女啊v在线免费观看| 国产精品家庭影院| 日韩一区在线免费观看| 亚洲三级免费观看| 国产精品伦理在线| 中文字幕一区二区在线播放| 欧美激情一区三区| 国产精品卡一卡二卡三| 国产精品高潮呻吟| 亚洲男人天堂av网| 亚洲一本大道在线| 丝袜诱惑亚洲看片| 精品一区二区三区视频在线观看| 久久成人免费网| 国产精品77777| 91亚洲精品一区二区乱码| 97精品久久久久中文字幕| 91精品办公室少妇高潮对白| 欧美日韩亚洲综合一区二区三区| 欧美日韩综合不卡| 日韩欧美中文字幕公布| 久久综合狠狠综合| 国产精品国产精品国产专区不蜜 | 欧美自拍丝袜亚洲| 欧美日韩亚洲综合一区 | 欧美日韩日本视频| 欧美一级黄色录像| 日本一区二区三级电影在线观看 | 亚洲自拍偷拍麻豆| 蜜臀av性久久久久蜜臀av麻豆| 九色综合狠狠综合久久| 成人精品在线视频观看| 91福利在线观看| 欧美tickling网站挠脚心| 国产日韩精品一区| 亚洲成人一区在线| 韩国三级电影一区二区| 91丨九色丨尤物| 欧美电影免费观看高清完整版在线| 精品理论电影在线| 一区二区三区四区国产精品| 乱一区二区av| 在线观看av不卡| 久久久久久久久久看片| 午夜天堂影视香蕉久久| 成人一级片在线观看| 欧美日韩国产电影| 欧美韩国一区二区| 蜜桃av一区二区三区电影| 丰满白嫩尤物一区二区| 欧美一区二区三区视频在线观看| 国产欧美日韩精品一区| 男男视频亚洲欧美| 欧美亚一区二区| 国产欧美综合在线观看第十页| 亚洲成人精品一区| av综合在线播放| 久久久久久99精品| 三级欧美在线一区| 欧洲av一区二区嗯嗯嗯啊| 久久蜜桃av一区二区天堂 | 亚洲丝袜制服诱惑| 国内精品免费在线观看| 制服丝袜中文字幕亚洲| 亚洲视频在线一区| 国产成人夜色高潮福利影视| 在线成人av网站| 亚洲电影第三页| 99re8在线精品视频免费播放| 久久久久久99久久久精品网站| 青青草原综合久久大伊人精品优势| 91久久一区二区| 亚洲色图欧美偷拍| 91视频国产观看| 中文字幕中文在线不卡住| 国产经典欧美精品| 国产丝袜在线精品| 激情亚洲综合在线| 精品国产不卡一区二区三区| 亚洲国产日韩a在线播放性色| 91一区二区在线| 亚洲视频在线观看一区| 94-欧美-setu| 亚洲一区二区三区精品在线| 日本丶国产丶欧美色综合| 精品国产一区a| 久久99精品久久久久久久久久久久|