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

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

?? levelgenerator.java

?? 大量j2me源代碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:

               // Connect a new room either to the left or right.
               if (dir == LEFT_DIR || dir == RIGHT_DIR)
               {
                  if (dir == LEFT_DIR)
                     corridorX = lastRoomX - corridorWidth + 1;
                  if (dir == RIGHT_DIR)
                     corridorX = lastRoomX + lastRoomW - 1;

                  corridorY = Tools.getRand(Math.max(lastRoomY, newRoomY),
                                            Math.min(lastRoomY + lastRoomH -
                                                     corridorHeight,
                                                     newRoomY + newRoomH -
                                                     corridorHeight));
               }

               // Connect a new room either above or below.
               if (dir == UP_DIR || dir == DOWN_DIR)
               {
                  if (dir == UP_DIR)
                     corridorY = lastRoomY - corridorHeight + 1;
                  if (dir == DOWN_DIR)
                     corridorY = lastRoomY + lastRoomH - 1;

                  corridorX = Tools.getRand(Math.max(lastRoomX, newRoomX),
                                            Math.min(lastRoomX + lastRoomW -
                                                     corridorWidth,
                                                     newRoomX + newRoomW -
                                                     corridorWidth));
               }

               // Draw the corridor on the tilemap.
               addRoom(level, corridorX, corridorY, corridorWidth,
                       corridorHeight);

               // Set the last room index to be the room we added (step back by
               // an extra one to skip the corridor just added to connect the
               // new room to the last one).
               lastRoomIndex = roomCount-2;
            }
         }
      }

      //#ifdef debug
      dump();
      //#endif
      return tileMap;
   }

   /**
    * @param b An array of booleans to test.
    * @return True if all the booleans in the array are true.
    */
   private static final boolean areAllTrue(boolean[] b)
   {
      for (int i = 0; i < b.length; i++)
         if (b[i] == false) return false;
      return true;
   }

   /**
    * Based on an array of boolean's this returns a random choice from a limited
    * list of ones that are currently false. The level generator uses this to
    * randomly choose a direction, but only from ones that have not previously
    * been tried (set to true in the array).
    */
   private static final int getRandDir(boolean[] dirs)
   {
      // we only do a random test on the number of available dirs, so lets
      // find out how many there are first
      int numDirs = 0;
      for (int i = 0; i < 4; i++)
         if (!dirs[i]) numDirs++;

      if (numDirs == 0) return 0;

      // now pick one at random
      int n = 0;
      if (numDirs > 1)
         n = Tools.getRand(0, numDirs - 1);

      // and return the dir corresponding to the nth result by figuring
      // the array index of the nth true value
      int c = -1;
      int i = 0;
      while (i < dirs.length)
      {
         if (!dirs[i++]) c++;
         if (c == n) return i - 1;
      }

      return 0;
   }

   /**
    * Checks to see if the supplied rectangle is within 3 tiles of any other
    * room (including corridors).
    * @param tileX The x position of the room to be checked.
    * @param tileY The y position of the room to be checked.
    * @param tilesWide The width of the room to be checked.
    * @param tilesHigh The height of the room to be checked.
    * @return True if the rectangle (room) is within 3 tiles of another.
    */
   private final boolean isRectNearRoom(int tileX, int tileY, int tilesWide,
                                        int tilesHigh)
   {
      for (int i = 0; i < roomCount; i++)
      {
         if (Tools.isIntersectingRect(tileX, tileY, tilesWide, tilesHigh,
                                      roomX[i] - 3, roomY[i] - 3,
                                      roomW[i] + 3, roomH[i] + 3))
         {
            return true;
         }
      }
      return false;
   }

   /**
    * Adds a room to the level by setting all the bytes in the tilemap to be
    * walls. Note that existing wall tiles will be inverted by this process
    * (except for corners) in order to "carve out" doorways where the walls
    * between rooms and corridors overlap.
    * @param level The level number is a relative density level used to fill
    * the room with objects.
    * @param tileX The x position of the new room.
    * @param tileY The y position of the new room.
    * @param tileWidth The width of the new room.
    * @param tileHeight The height of the new room.
    */
   private void addRoom(int level, int tileX, int tileY, int tileWidth,
                        int tileHeight)
   {
      addWallsToMap(tileX, tileY, tileWidth, tileHeight);

      roomW[roomCount] = tileWidth;
      roomH[roomCount] = tileHeight;
      roomX[roomCount] = tileX;
      roomY[roomCount] = tileY;
      roomCount++;

      // Add enemy to this room (we base the number on the level they're on)
      int maxEnemy = level + 1;
      if (maxEnemy > 10) maxEnemy = 10;
      int numEnemy = Tools.getRand(0, maxEnemy);

      int numAdded = 0;
      int tries = 0;
      while (numAdded < numEnemy && tries++ < maxEnemy * 2)
      {
         // Pick a random tile and try to add an activator there (may be filled
         // by another one)
         int randomTileX = Tools.getRand(tileX + 1, tileX + tileWidth - 2);
         int randomTileY = Tools.getRand(tileY + 1, tileY + tileHeight - 2);

         if (tileMap[randomTileY][randomTileX] == World.NO_TILE &&
                 (randomTileX != playerStartX && randomTileY != playerStartY))
         {
            numAdded++;
            tileMap[randomTileY][randomTileX] = World.FIGHTER_ACTIVATOR_TILE;
         }
      }
   }

   /**
    * Toggles tiles in the tilemap to either a wall or an empty space (based on
    * what is there already) in an outline rectangle using the supplied bounding
    * coordinates. Note that corners are NOT inverted, they are always set as
    * walls.
    * @param roomTileX The starting x position of the room to create.
    * @param roomTileY The starting y position of the room to create.
    * @param roomTilesWide The width of the room to create.
    * @param roomTilesHigh The height of the room to create.
    */
   private void addWallsToMap(int roomTileX, int roomTileY,
                              int roomTilesWide, int roomTilesHigh)
   {
      // Add the top and bottom line.
      for (int tileX = roomTileX; tileX < roomTileX + roomTilesWide; tileX++)
      {
         // Invert the tiles along the top.
         invertTile(tileX, roomTileY);
         // Invert the tiles along the bottom.
         invertTile(tileX, roomTileY + roomTilesHigh - 1);
      }

      // Left and right side lines.
      for (int tileY = roomTileY + 1; tileY < roomTileY + roomTilesHigh - 1;
           tileY++)
      {
         // Invert the tiles down the left side.
         invertTile(roomTileX, tileY);
         // Invert the tiles down the right side.
         invertTile(roomTileX + roomTilesWide - 1, tileY);
      }

      // Mark corners as walls (not inverted).
      tileMap[roomTileY][roomTileX] = World.WALL_TILE;
      tileMap[roomTileY][roomTileX + roomTilesWide - 1] = World.WALL_TILE;
      tileMap[roomTileY + roomTilesHigh - 1][roomTileX] = World.WALL_TILE;
      tileMap[roomTileY + roomTilesHigh - 1][roomTileX + roomTilesWide - 1] =
              World.WALL_TILE;
   }

   /**
    * Inverts an existing map tile between either empty or a wall tile.
    * @param tileX The x position of the tile to invert.
    * @param tileY The y position of the tile to invert.
    */
   private void invertTile(int tileX, int tileY)
   {
      // Turn an empty tile into a wall or vice versa.
      if (tileMap[tileY][tileX] == World.WALL_TILE)
         tileMap[tileY][tileX] = World.NO_TILE;
      else
         tileMap[tileY][tileX] = World.WALL_TILE;
   }

   private void dump()
   {
      System.out.println("\t          1         2         3         4         5");
      System.out.println("\t012345678901234567890123456789012345678901234567890");

      for (int ty = 0; ty < height; ty++)
      {
         System.out.print(ty + "\t");

         for (int tx = 0; tx < width; tx++)
         {
            if (tileMap[ty][tx] == World.WALL_TILE)
               System.out.print("#");
            else if (tileMap[ty][tx] == World.FIGHTER_ACTIVATOR_TILE)
               System.out.print("F");
            else if (playerStartX == tx && playerStartY == ty)
               System.out.print("X");
            else
               System.out.print(" ");
         }
         System.out.println();
      }

   }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成va人片在线观看| 欧美日韩一区二区三区不卡| 五月综合激情日本mⅴ| 国产精品久久久久久久岛一牛影视 | 欧美视频一二三区| 色香蕉成人二区免费| 成人动漫精品一区二区| voyeur盗摄精品| 91在线精品一区二区| 色综合咪咪久久| 91豆麻精品91久久久久久| 欧美性色综合网| 欧美乱熟臀69xxxxxx| 日韩视频免费观看高清完整版| 91精品国产高清一区二区三区| 欧美精品在线观看播放| 精品日韩欧美一区二区| 国产欧美视频一区二区| 亚洲欧洲综合另类| 亚洲123区在线观看| 国产在线看一区| 从欧美一区二区三区| 欧美在线free| 欧美videos大乳护士334| 久久理论电影网| 亚洲人成人一区二区在线观看| 亚洲国产美国国产综合一区二区| 爽好多水快深点欧美视频| 经典三级视频一区| 日本高清不卡一区| 精品福利在线导航| 亚洲另类在线一区| 毛片av一区二区| 色综合天天综合网天天狠天天| 91精品国产综合久久精品性色| 日韩美女一区二区三区四区| 亚洲欧洲av在线| 久久成人免费网站| av电影在线观看不卡| 日韩美女视频在线| 亚洲精品欧美专区| 老司机精品视频导航| 91福利资源站| 久久精品亚洲一区二区三区浴池| 亚洲精品日韩一| 国产成人av在线影院| 日韩区在线观看| 亚洲欧美日韩中文字幕一区二区三区| 天天综合网天天综合色| 成人精品视频一区二区三区尤物| 制服丝袜亚洲精品中文字幕| 国产精品久久久久影院| 毛片不卡一区二区| 宅男在线国产精品| 亚洲美女少妇撒尿| thepron国产精品| 精品少妇一区二区三区| 爽爽淫人综合网网站| 日本高清成人免费播放| 国产精品国产三级国产普通话蜜臀 | 一本色道久久综合亚洲精品按摩 | 亚洲免费看黄网站| 粉嫩13p一区二区三区| 欧美mv日韩mv| 婷婷久久综合九色综合伊人色| av不卡在线播放| 一区二区三区自拍| 国产精品66部| 欧美一级二级三级乱码| 亚洲午夜在线观看视频在线| 91视频在线观看| 亚洲女人****多毛耸耸8| thepron国产精品| 中日韩免费视频中文字幕| 国产一区二区剧情av在线| 26uuu另类欧美亚洲曰本| 精品在线亚洲视频| 久久久综合精品| 丁香婷婷综合色啪| 中文文精品字幕一区二区| 岛国精品一区二区| 国产精品美女久久福利网站| 懂色一区二区三区免费观看| 国产精品视频一二三区| 国产精品久久久久久妇女6080| 久久久.com| 丰满放荡岳乱妇91ww| 国产精品久久久久久久岛一牛影视 | 精品亚洲成a人在线观看| 91麻豆精品国产91| 另类成人小视频在线| 欧美刺激脚交jootjob| 国产又黄又大久久| 国产精品久久久久国产精品日日| 懂色av噜噜一区二区三区av| ●精品国产综合乱码久久久久| 94-欧美-setu| 天天亚洲美女在线视频| 精品国产sm最大网站免费看 | 亚洲欧美电影一区二区| 欧美日韩视频在线一区二区| 蜜臀av性久久久久av蜜臀妖精| 久久免费看少妇高潮| 91在线视频18| 美女网站色91| 中文字幕一区二区三区在线观看 | 国产激情视频一区二区在线观看| 欧美国产视频在线| 欧美揉bbbbb揉bbbbb| 久久99精品一区二区三区| 国产精品毛片无遮挡高清| 91日韩精品一区| 琪琪久久久久日韩精品| 国产精品毛片久久久久久久| 91精品欧美福利在线观看| 成人精品小蝌蚪| 六月丁香婷婷色狠狠久久| 亚洲人成在线观看一区二区| 欧美va亚洲va香蕉在线| 91久久精品一区二区三区| 国产呦精品一区二区三区网站| 亚洲欧美在线视频观看| 精品黑人一区二区三区久久| 色久综合一二码| 国产高清精品在线| 婷婷久久综合九色综合绿巨人| 国产精品国产自产拍高清av王其| 欧美精品一二三| 一本大道av一区二区在线播放| 久久99久久99精品免视看婷婷| 亚洲国产精品精华液网站 | 91美女在线看| 国产精品1区2区3区| 丝袜国产日韩另类美女| 一区二区高清免费观看影视大全 | av成人老司机| 国产精品77777竹菊影视小说| 奇米影视一区二区三区| 一区二区国产盗摄色噜噜| 国产精品色婷婷久久58| 亚洲精品一区二区三区99| 精品视频全国免费看| 99re成人精品视频| www.亚洲免费av| 粉嫩av一区二区三区在线播放 | 欧美系列在线观看| 一本大道久久a久久精品综合| 成人国产在线观看| 国产传媒久久文化传媒| 国产一区二区三区黄视频 | jlzzjlzz亚洲日本少妇| 成人精品高清在线| 懂色av一区二区三区免费看| 国产sm精品调教视频网站| 国产aⅴ综合色| 成av人片一区二区| av高清不卡在线| 色综合一区二区三区| 一道本成人在线| 精品视频在线看| 欧美大黄免费观看| 精品国产人成亚洲区| 欧美精品一区二区精品网| 久久久综合视频| 国产精品女人毛片| 一区二区欧美视频| 日本特黄久久久高潮| 国产一区二区三区蝌蚪| 国产iv一区二区三区| 色婷婷综合久久久久中文一区二区 | 国产一区二三区好的| 国产91精品一区二区麻豆网站| 成人黄色小视频| 一本到不卡免费一区二区| 欧美精品一二三区| 久久久久久麻豆| 亚洲美女视频在线| 日韩激情一二三区| 国产精品一区二区三区网站| 99r国产精品| 6080午夜不卡| 国产精品美女久久久久久| 亚洲在线视频免费观看| 久久99热这里只有精品| 国产成人av一区二区三区在线| 在线免费观看一区| 久久精品亚洲一区二区三区浴池| 日本一区二区久久| 亚洲成人免费视| 国产成人综合在线| 欧美日韩一区二区在线观看视频 | 国产成人在线免费| 欧美系列日韩一区| 久久久精品免费网站| 亚洲午夜激情网页| 懂色av一区二区在线播放| 欧美高清你懂得| 亚洲免费av网站| 成人午夜视频网站| 日韩片之四级片|